How to split a delimited string into an array...
I have a delimited string coming in to a stored procedure (SP) for vb.net that needs to be parsed/converted into multi-dimensional arrays. The reason I am using delimited string because I do not know how to pass arrays to oracle SP from vb.net using ODP or MPO (Microsoft's Provider for Oracle).
My delimited string looks something like this: "level1_1|level2_1:level3_1;level3_2|level2_2:level3_1;level3_2~Level1_2|level2_2:level3_1"
So, its going to be 3d array. I would greatly appreciate if anyone could help me solving this puzzle. Any examples would be a great help.
Thanks for everything in advance,
Vincent
Hi Andrew,
I appreciate your response. Currently I use "Microsoft provider for Oracle" to connect to Oracle Database because when I started with my application there wasn't ODP (Oracle Data Provider for .Net) available. So, I used Microsoft provider and still using it.
I know how to use arrays in .Net but the problem is I can not find the Oracle Type to pass the array to Oralce Stored Procedure using this provider.
It would be very helpful if someone shows me the syntax for both to receive from oracle and transport to Oracle. I haven't tried using ODP yet. May be now its the time to see how it works.
And of course, your link was very helpful but I am already doing that (which is very slow for multi-dimentional array). So, I thought there might be a built in function in oracle which does that. Because most of the programming languages does have built in function for this conversion. for example: Split() in vb, java, javascript etc.
Anyway, if anyone finds any clues as to how to pass milti-dimentional arrays from .Net (microsoft) to oracle stored procedure please, please let me know how to do that.
-Vincent
Similar Messages
-
How to split a delimited string into rows
Hi Everyone,
I have a field in my EMPLOYEE table named "OLD_USER_IDS" which stores all the old system ID's that the employee was once assigned to. This field is comma separated like so: "USERID1,USERID2,USERID3". My question is: how can I write a SELECT query that splits each individual User ID into its own row?
For example:
EMP_ID USER_ID
10 USERID1
10 USERID2
12 USERID3
15 USERID4
15 USERID5
15 USERID6
Thank You
-SamI think you should search this forum first for similar questions. I keep track of some interesting stuffs posted in this forum in a file, and from that
WITH t AS (SELECT 'USER1,USER2,USER3' str FROM DUAL
select substr(str,
decode(level,
1,
1,
instr(str, ',', 1, level - 1) + 1),
decode(instr(str, ',', 1, level),
0,
length(str),
instr(str, ',', 1, level) -
decode(level,
1,
0,
instr(str, ',', 1, level - 1)) - 1)) the_value
from (select str from t)
connect by level <=
length(str) - length(replace(str, ',')) + 1; -
How do I split a comma delimited string into an array.
I have a string that I am passing into a function that is Comma delimited. I want to split the string into an array. Is there a way to do this.
Thanks in advance.trouble confirmed on 10gR1 and 10gR2
works with 'a,b,c' and also with ' "1" , "2" , "3" '
does not work with '1,2,3'
throwing ORA-6512 -
How to break up a String into multiple array Strings?
How do I break up a string into a bunch of String arrays after the line ends.
For example,
JTextArea area = new JTextArea();
this is a string that i have entered in the area declared above
now here is another sting that is in the same string/text area
this is all being placed in one text field
Sting input = area.getText();
now how do I break that up into an array of strings after each line ends?Ok I tested it out and it works.
So for future refrence to those that come by the same problem I had:
To split up a string when using a textfield or textarea so that you can store seperate sections of the string based on sperate lines, using the following code:
String text = area.getText() ;
String[] lines = text.split("\n") ;
This will store the following
this is all one
entered string
into two arrays
Cheers{
Edited by: watwatacrazy on Oct 21, 2008 11:06 AM
Edited by: watwatacrazy on Oct 21, 2008 11:16 AM
Edited by: watwatacrazy on Oct 21, 2008 11:16 AM -
How to split comma delimited string?
Hi,
I have a parameter called Id in my SP which will be of nvarchar data type and i'm going to get the multiple ids at a time seperated by commas in that parameter from the application. Now my requirement is to update a table with these comma seperated ids in seperate rows.
For example, if i have 2 parameters called Id1 and Id2. Id1 will contain only one value and will be of int data type and Id2 will be of nvarchar data type as i can get multiple ids delimited by a comma from the application. Suppose Id1 = 1 and Id2 = '1,2,3,4'. Then I have to update id2 in the tables seperately like wherever Id1 is '1' i need to update Id2 column for 4 rows with the value 1, 2, 3, 4 respectively in different rows.
Could you please tell me how can i do this in T-SQL? How can i split the data of parameter Id2 in 4 different rows?
Please let me know if you did not understand the question.
Thanks,
Deeptideeptideshpande wrote:
Hi,
I got a similar function which is like this:
CREATE FUNCTION dbo.fnSplit(
@sInputList VARCHAR(8000) -- List of delimited items
, @sDelimiter VARCHAR(8000) = ',' -- delimiter that separates items
) RETURNS @List TABLE (item VARCHAR(8000))
BEGIN
DECLARE @sItem VARCHAR(8000)
WHILE CHARINDEX(@sDelimiter,@sInputList,0) <> 0
BEGIN
SELECT
@sItem=RTRIM(LTRIM(SUBSTRING(@sInputList,1,CHARINDEX(@sDelimiter,@sInputList,0)-1))),
@sInputList=RTRIM(LTRIM(SUBSTRING(@sInputList,CHARINDEX(@sDelimiter,@sInputList,0)+LEN(@sDelimiter),LEN(@sInputList))))
IF LEN(@sItem) > 0
INSERT INTO @List SELECT @sItem
END
IF LEN(@sInputList) > 0
INSERT INTO @List SELECT @sInputList -- Put the last item in
RETURN
END
GO
Now when i use this in my select statement, i get data in a tabular structure as shown below:
select
from dbo.fnSplit('1,22,333,444,,5555,666',
Results
Item
1
22
333
444
5555
666
Now my requirement is to insert this value in a table which has 2 columns ID1 and ID2.
At any point of time ID1 will be an int value(only one id in that parameter) and ID2 can have multiple ids delimited by comma. With the help of above split function i can split values of ID2 into 6 different ids but i need to insert the table
in the following way:
ID1 ID2
1 1
1 22
1 333
1 444
1 5555
1 666
How can i insert the data in the above mentioned fashion.
Thanks,
Deepti
Like this:
Code Snippet
select 1 as id,* from dbo.fnSplit('1,22,333,444,,5555,666', ',')
Great!!!! Wonderfull!!!... Thanks a lot. -
How to seperate a delimited string into a seperate column
Say I have the following list in a column called authors
"Simpson, Homer//Flintstone, Fred//Jetson, George//Griffin, Peter"
How can I parse this list to be just Simpson, Flintstone, Jetson, Griffin?
I have rows that have 20 names like this.
thank you for any helpare you looking for columns or rows?
here is columns
WITH t AS
(select 'Simpson, Homer//Flintstone, Fred//Jetson, George//Griffin, Peter' txt from dual
SELECT
regexp_substr( txt,'[^//]+',1,1) column1,
regexp_substr( txt,'[^//]+',1,2) column2,
regexp_substr( txt,'[^//]+',1,3) column3,
regexp_substr( txt,'[^//]+',1,4) column4
regexp_substr( txt,'[^//]+',1,5) column5
FROM
t
COLUMN1 COLUMN2 COLUMN3 COLUMN4
Simpson, Homer Flintstone, Fred Jetson, George Griffin, Peteras rows
WITH t AS
(select 'Simpson, Homer//Flintstone, Fred//Jetson, George//Griffin, Peter' txt from dual
SELECT
regexp_substr( txt,'[^//]+',1,level) column1
from t connect by level <= regexp_count(txt,'//')+1
COLUMN1
Simpson, Homer
Flintstone, Fred
Jetson, George
Griffin, PeterEdited by: pollywog on Dec 15, 2010 3:12 PM -
Split Comma Delimited String Oracle
I want to Split Comma Delimited string in oracle9i into rowwise data.i do not want to use Functions or connect by level...
is there any other way from which we can split strings.???
if we use Connect by level method the problem im facing is we cannot use suqueries in Connect by clause...
Edited by: user11908943 on Sep 16, 2009 8:37 AMmichaels2 wrote:
I prefer using XMLTABLE which has superceded XMLSEQUENCE and I personally find it easier to read...Agree, but that would be hard in 9i since it is not implemented ;)Ah! missed that bit (gawd I wish people would upgrade to supported versions)
In still later versions (11g) I prefer
SQL> with t as
select 'a,b,c,d,e' str from dual
select trim(column_value) str
from t, xmltable(('"' || replace(str, ',', '","') || '"'))
STR
a
b
c
d
e
5 rows selected.
Natty! But completely illogical (I mean creating an XMLTABLE from a non-XML string). I'm guessing that's a development of XQuery? -
How to Split Single Outbound Idoc into Multiples
Hi guys
Hope you all are doing good.
Can you please let me know , How to Split Single Outbound IDOC into multiples.
I am looking for some sought of configuration in IDOC/from SHIPMENT Configuration level. Because this needs to be implemented for Shipment IDOCS. Please let me know if this can be done through configurations apart from implementing User exit or copying the outbound shipment function module.
Awaiting for your valuable replies.
Best Regards
ShivaHello,
1. Routes
2. Packaging used
3. Shipment Type
Regards
Waza -
How do you turn a string into an integer?
how do you turn a string into an integer?
for ex, if i wanted to turn the string "5" into the integer 5, how would i do that?String stringNumber="5";
try{
int number=Integer.parseInt(stringNumber);
}catch(NumberFormatException e){
System.out.println("The string "+stringNumber+" must be a number!");
} -
How to convert a delimited string to XML?
Hi there,
Please help me to convert a pipe delimited string into XML, e.g.
string -------SubName:abc|SuvValue:123|
required XML:
<ROWS>
<ROW>
<SubName>abc</SubName>
<SubValue>123</SubValue>
</ROW>
</ROWS>
or
string -------abc|123|
required XML:
<ROWS>
<ROW>
<SubName>abc</SubName>
<SubValue>123</SubValue>
</ROW>
</ROWS>
-----i am trying to first parse the string into a table type and then using the DBMS_XMLGen.getXML function but unable to get values from table type...
any prompt response is highly appriciated...
Regards, HassanHi Hassan,
If your version supports it (ie 10gR2 and upwards), you can use XQuery to directly parse the string and generate the XML :
SQL> SELECT XMLQuery(
2 '<ROWS>
3 <ROW> {
4 for $i in ora:tokenize($str,"\|")
5 return
6 if ($i) then element {substring-before($i,":")} {substring-after($i,":")}
7 else ()
8 } </ROW>
9 </ROWS>'
10 passing sys_xmlgen('SubName:abc|SubValue:123|') as "str"
11 returning content
12 ).getClobVal()
13 FROM dual;
XMLQUERY('<ROWS><ROW>{FOR$IINO
<ROWS><ROW><SubName>abc</SubName><SubValue>123</SubValue></ROW></ROWS>
Each element is built based on its name from the input string. -
How can i write a string into a specified pos of a file?
How can i write a string into a specified pos of a file without read all file into ram and write the whole file again?
for example:
the content of file is:
name=123
state=456
i want to modify the value of name with 789
(write to file without read all file into ram)
How can i do it? thank youtake this as an idea. it actually does what i decribed above. you sure need to make some modifications so it works for your special need. If you use it and add any valuable code to it or find any bugs, please let me know.
import java.io.*;
import java.util.*;
* Copyright (c) 2002 Frank Fischer <[email protected]>
* All rights reserved. See the LICENSE for usage conditions
* ObjectProperties.java
* version 1.0, 2002-09-12
* author Frank Fischer <[email protected]>
public class ObjectProperties
// the seperator between the param-name and the value in the prooperties file
private static final String separator = "=";
// the vector where we put the arrays in
private Vector PropertiesSet;
// the array where we put the param/value pairs in
private String propvaluepair[][];
// the name of the object the properties file is for
public String ObjectPropertiesFileName;
// the path to the object'a properties file
public String ObjectPropertiesDir;
// reference to the properties file
public File PropertiesFile;
// sign for linebreak - depends on platforms
public static final String newline = System.getProperty("line.separator");
public ObjectProperties(String ObjectPropertiesFileName, String ObjectPropertiesDir, ObjectPropertiesManager ObjectPropertiesManager)
// System.out.println("Properties Objekt wird erzeugt: "+ObjectPropertiesFileName);
this.ObjectPropertiesFileName = ObjectPropertiesFileName;
this.ObjectPropertiesDir = ObjectPropertiesDir;
// reference to the properties file
PropertiesFile = new File(ObjectPropertiesDir+ObjectPropertiesFileName);
// vector to put the param/value pair-array in
PropertiesSet = new Vector();
// System.out.println("Properties File Backup wird erzeugt: "+name);
backup();
// System.out.println("Properties File wird eingelesen: "+PropertiesFile);
try
//opening stream to file for read operations
FileInputStream FileInput = new FileInputStream(PropertiesFile);
DataInputStream DataInput = new DataInputStream(FileInput);
String line = "";
//reading line after line of the properties file
while ((line = DataInput.readLine()) != null)
//just making sure there are no whitespaces at the beginng or end of the line
line = cutSpaces(line);
if (line.length() > 0)
//$ indicates a param-name
if (line.startsWith("$"))
// array to store a param/value pair in
propvaluepair = new String[1][2];
//get the param-name
String parameter = line.substring(1, line.indexOf(separator)-1);
//just making sure there are no whitespaces at the beginng or end of the variable
parameter = cutSpaces(parameter);
//get the value
String value = line.substring(line.indexOf(separator)+1, line.length());
//just making sure there are no whitespaces at the beginng or end of the variable
value = cutSpaces(value);
//put the param-name and the value into an array
propvaluepair[0][0] = parameter;
propvaluepair[0][1] = value;
// System.out.println("["+ObjectPropertiesFileName+"] key/value gefunden:"+parameter+";"+value);
//and finaly put the array into the vector
PropertiesSet.addElement(propvaluepair);
// error handlig
catch (IOException e)
System.out.println("ERROR occured while reading property file for: "+ObjectPropertiesFileName);
System.out.println("ERROR CODE: "+e);
// System.out.println("in ObjectProperties");
// function to be called to get the value of a specific paramater 'param'
// if the specific paramater is not found '-1' is returned to indicate that case
public String getParam(String param)
// the return value indicating that the param we are searching for is not found
String v = "-1";
// looking up the whole Vector
for (int i=0; i<PropertiesSet.size(); i++)
//the String i want to read the values in again
String s[][] = new String[1][2];
// trying to get out the array from the vector again
s = (String[][]) PropertiesSet.elementAt(i);
// comparing the param-name we're looking for with the param-name in the array we took out the vector at position i
if (s[0][0].equals(param) == true)
//if the param-names are the same, we look up the value and write it in the return variable
v = s[0][1];
// making sure the for loop ends
i = PropertiesSet.size();
// giving the value back to the calling procedure
return v;
// function to be called to set the value of a specific paramater 'param'
public void setParam(String param, String value)
// looking up the whole Vector for the specific param if existing or not
for (int i=0; i<PropertiesSet.size(); i++)
//the String i want to read the values in again
String s[][] = (String[][]) PropertiesSet.elementAt(i);
// comparing the param-name we're looking for with the param-name in the array we took out the vector at position i
if (s[0][0].equals(param) == true)
//if the param-names are the same, we remove the param/value pair so we can add the new pair later in
PropertiesSet.removeElementAt(i);
// making sure the for loop ends
i = PropertiesSet.size();
// if we land here, there is no such param in the Vector, either there was none form the beginng
// or there was one but we took it out.
// create a string array to place the param/value pair in
String n[][] = new String[1][2];
// add the param/value par
n[0][0] = param;
n[0][1] = value;
// add the string array to the vector
PropertiesSet.addElement(n);
// function to save all data in the Vector to the properties file
// must be done because properties might be changing while runtime
// and changes are just hold in memory while runntime
public void store()
backup();
String outtofile = "# file created/modified on "+createDate("-")+" "+createTime("-")+newline+newline;
try
//opening stream to file for write operations
FileOutputStream PropertiesFileOuput = new FileOutputStream(PropertiesFile);
DataOutputStream PropertiesDataOutput = new DataOutputStream(PropertiesFileOuput);
// looping over all param/value pairs in the vector
for (int i=0; i<PropertiesSet.size(); i++)
//the String i want to read the values in
String s[][] = new String[1][2];
// trying to get out the array from the vector again
s = (String[][]) PropertiesSet.elementAt(i);
String param = "$"+s[0][0];
String value = s[0][1];
outtofile += param+" = "+value+newline;
outtofile += newline+"#end of file"+newline;
try
PropertiesDataOutput.writeBytes(outtofile);
catch (IOException e)
System.out.println("ERROR while writing to Properties File: "+e);
catch (IOException e)
System.out.println("ERROR occured while writing to the property file for: "+ObjectPropertiesFileName);
System.out.println("ERROR CODE: "+e);
// sometimes before overwritting old value it's a good idea to backup old values
public void backup()
try
// reference to the original properties file
File OriginalFile = new File(ObjectPropertiesDir+ObjectPropertiesFileName);
File BackupFile = new File(ObjectPropertiesDir+"/backup/"+ObjectPropertiesFileName+".backup");
//opening stream to original file for read operations
FileInputStream OriginalFileInput = new FileInputStream(OriginalFile);
DataInputStream OriginalFileDataInput = new DataInputStream(OriginalFileInput);
//opening stream to backup file for write operations
FileOutputStream BackupFileOutput = new FileOutputStream(BackupFile);
DataOutputStream BackupFileDataOutput = new DataOutputStream(BackupFileOutput);
// String content = "";
String line = "";
// do till end of file
while ((line = OriginalFileDataInput.readLine()) != null)
BackupFileDataOutput.writeBytes(line+newline);
// error handlig
catch (IOException e)
System.out.println("ERROR occured while back up for property file: "+ObjectPropertiesFileName);
System.out.println("ERROR CODE: "+e);
System.out.println("this is a serious error - the server must be stopped");
private String cutSpaces(String s)
while (s.startsWith(" "))
s = s.substring(1, s.length());
while (s.endsWith(" "))
s = s.substring(0, s.length()-1);
return s;
public String createDate(String seperator)
Date datum = new Date();
String currentdatum = new String();
int year, month, date;
year = datum.getYear()+1900;
month = datum.getMonth()+1;
date = datum.getDate();
currentdatum = ""+year+seperator;
if (month < 10)
currentdatum = currentdatum+"0"+month+seperator;
else
currentdatum = currentdatum+month+seperator;
if (date < 10)
currentdatum = currentdatum+"0"+date;
else
currentdatum = currentdatum+date;
return currentdatum;
public String createTime(String seperator)
Date time = new Date();
String currenttime = new String();
int hours, minutes, seconds;
hours = time.getHours();
minutes = time.getMinutes();
seconds = time.getSeconds();
if (hours < 10)
currenttime = currenttime+"0"+hours+seperator;
else
currenttime = currenttime+hours+seperator;
if (minutes < 10)
currenttime = currenttime+"0"+minutes+seperator;
else
currenttime = currenttime+minutes+seperator;
if (seconds < 10)
currenttime = currenttime+"0"+seconds;
else
currenttime = currenttime+seconds;
return currenttime; -
How do I unflatten from string to an array of strings in labwindows
New to Labwindows so please forgive. I am trying to use STM to read messages from an existing LabView program. I am using ClientTCPCB from the example that came with the STM library, but it reads in doubles, I want to read in strings. I can see that I have the correct number of elements in my receive buffer, but I can't figure out how to convert the receive buffer into an array of char arrays (or strings as it were) something like labview's "unflatten from string" with 1-d array of strings as the type.
So I figured it out... from the lack of info on the web and forums I doubt it will be useful to anyone else, but will post a brief solution.
So I dumped the raw bytes to a file to look at how they are packed. The first 4 bytes (int) is the number of strings in the message. The next 4 bytes (int) are the number of chars that follow, then the corresponding chars, sans any null term character, then the very next int would be the number of chars in the next string and so on and so forth. So I ended up writing my own charArrUnflatten function. Anyway, after all this I might try to recode everything to use network vars. Cheers. -
How to parse a delimited string and insert into different columns?
Hi Experts,
I need to parse a delimited string ':level1_value:level2_value:level3_value:...' to 'level1_value', 'level2_value', etc., and insert them into different columns of one table as one row:
Table_Level (Level1, Level2, Level3, ...)
I know I can use substr and instr to get level value one by one and insert into Table, but I'm wondering if there's better ways to do it?
Thanks!user9954260 wrote:
However, there is one tiny problem - the delimiter from the source system is a '|' When I replace your test query with | as delimiter instead of the : it fails. Interestingly, if I use ; it works. See below:
with t as (
select 'str1|str2|str3||str5|str6' x from dual union all
select '|str2|str3|str4|str5|str6' from dual union all
select 'str1|str2|str3|str4|str5|' from dual union all
select 'str1|str2|||str5|str6' from dual)
select x,
regexp_replace(x,'^([^|]*).*$','\1') y1,
regexp_replace(x,'^[^|]*|([^|]*).*$','\1') y2,
regexp_replace(x,'^([^|]*|){2}([^|]*).*$','\2') y3,
regexp_replace(x,'^([^|]*|){3}([^|]*).*$','\2') y4,
regexp_replace(x,'^([^|]*|){4}([^|]*).*$','\2') y5,
regexp_replace(x,'^([^|]*|){5}([^|]*).*$','\2') y6
from t;
The "bar" or "pipe" symbol is a special character, also called a metacharacter.
If you want to use it as a literal in a regular expression, you will need to escape it with a backslash character (\).
Here's the solution -
test@ORA11G>
test@ORA11G> --
test@ORA11G> with t as (
2 select 'str1|str2|str3||str5|str6' x from dual union all
3 select '|str2|str3|str4|str5|str6' from dual union all
4 select 'str1|str2|str3|str4|str5|' from dual union all
5 select 'str1|str2|||str5|str6' from dual)
6 --
7 select x,
8 regexp_replace(x,'^([^|]*).*$','\1') y1,
9 regexp_replace(x,'^[^|]*\|([^|]*).*$','\1') y2,
10 regexp_replace(x,'^([^|]*\|){2}([^|]*).*$','\2') y3,
11 regexp_replace(x,'^([^|]*\|){3}([^|]*).*$','\2') y4,
12 regexp_replace(x,'^([^|]*\|){4}([^|]*).*$','\2') y5,
13 regexp_replace(x,'^([^|]*\|){5}([^|]*).*$','\2') y6
14 from t;
X Y1 Y2 Y3 Y4 Y5 Y6
str1|str2|str3||str5|str6 str1 str2 str3 str5 str6
|str2|str3|str4|str5|str6 str2 str3 str4 str5 str6
str1|str2|str3|str4|str5| str1 str2 str3 str4 str5
str1|str2|||str5|str6 str1 str2 str5 str6
4 rows selected.
test@ORA11G>
test@ORA11G>isotope
PS - it works for semi-colon character ";" because it is not a metacharacter. So its literal value is considered by the regex engine for matching.
Edited by: isotope on Feb 26, 2010 11:09 AM -
Split string into an array (Skip first character)
I have a string like:
,open,close,open
I want to parse the data into an array (without the first ','). I found and tweaked the following code, but the result was:
+<blank line> (think this is coming from the first ',')+
off
on
off
FUNCTION SPLIT (p_in_string VARCHAR2, p_delim VARCHAR2) RETURN t_array
IS
i number :=0;
pos number :=0;
lv_str varchar2(50) := p_in_string;
strings t_array;
BEGIN
-- determine first chuck of string
pos := instr(lv_str,p_delim,1,1);
-- while there are chunks left, loop
WHILE ( pos != 0) LOOP
-- increment counter
i := i + 1;
-- create array element for chuck of string
strings(i) := substr(lv_str,1,pos-1);
-- remove chunk from string
lv_str := substr(lv_str,pos+1,length(lv_str));
-- determine next chunk
pos := instr(lv_str,p_delim,1,1);
-- no last chunk, add to array
IF pos = 0 THEN
strings(i+1) := lv_str;
END IF;
END LOOP;
-- return array
RETURN strings;
END SPLIT;
I am working on a 9i database.How is your collection defined? Assuming you are doing something like
SQL> create type t_array as table of varchar2(100);
2 /
Type created.then you would just need to add an LTRIM to the code that initializes LV_STR and add appropriate EXTEND calls when you want to extend the nested table
SQL> ed
Wrote file afiedt.buf
1 create or replace FUNCTION SPLIT (p_in_string VARCHAR2, p_delim VARCHAR2)
2 RETURN t_array
3 IS
4 i number :=0;
5 pos number :=0;
6 lv_str varchar2(50) := ltrim(p_in_string,p_delim);
7 strings t_array := t_array();
8 BEGIN
9 -- determine first chuck of string
10 pos := instr(lv_str,p_delim,1,1);
11 -- while there are chunks left, loop
12 WHILE ( pos != 0)
13 LOOP
14 -- increment counter
15 i := i + 1;
16 -- create array element for chuck of string
17 strings.extend;
18 strings(i) := substr(lv_str,1,pos-1);
19 -- remove chunk from string
20 lv_str := substr(lv_str,pos+1,length(lv_str));
21 -- determine next chunk
22 pos := instr(lv_str,p_delim,1,1);
23 -- no last chunk, add to array
24 IF pos = 0
25 THEN
26 strings.extend;
27 strings(i+1) := lv_str;
28 END IF;
29 END LOOP;
30 -- return array
31 RETURN strings;
32* END SPLIT;
SQL> /
Function created.
SQL> select split( ',a,b,c', ',' ) from dual;
SPLIT(',A,B,C',',')
T_ARRAY('a', 'b', 'c')If T_ARRAY is defined as an associative array, you wouldn't need to have the EXTEND calls but then you couldn't call the function from SQL.
Justin -
How to split a big file into several small files using XI
Hi,
Is there any way to split a huge file into small files using XI.
Thanks
MukeshThere is a how to guide for using file adapters, an "sdn search" will get you the document.
Based on that , read a file into XI, Use strings to store the file content and do the split
here is some code to get you started
===========
Pseudocode:
===========
// This can be passed in - however many output files to which the source is split
numOutputFiles = 5;
// Create the same number of filehandles as numOutputFiles specifies
open file1, file2, file3, file4, file5;
// Create an Array to hold the references to those filehandles
Array[5] fileHandles = {file1, file2, file3, file5, file5};
// Initialize a loop counter
int loopCounter = 0;
// a temporary holder to "point" the output stream to the correct output file
File currentOutputFile = null;
// loop through your input file
while (sourceFile.nextLine != null)
loopCounter++;
if (loopCounter == (numOutputFiles +1) // you've reached 5, loop back
loopCounter = 1;
currentOutputFile = fileHandles[loopCounter]; // gets the output file at that index of the array
currentOutputFile.write(sourceFile.nextLine);
regards
krishna
Maybe you are looking for
-
hi we have imported some material w, we cleared all the payments like material cost cvd and other somehow somebody reversed the invoice doc in mr8m now payment is already done now when i am doing miro for the same po it is showing me no quantity an
-
Hi All, I am on 10.2 Standard edition and 11.1 Standard edition (2 databases in the application, one on 10g, another on 11g). Being on standard edition, cannot use many common features e.g. partitioning, bitmap indexes etc. I use to think that, parti
-
I have purchased a monthly subscription to Adobe PDF pack so that i can edit a PDF file, i have uploaded the file and its now in "my assets". how do i now edit this file??
-
Chapters disappear after saving movie file
I have added chapters to my movie file using the instructions here: http://images.apple.com/quicktime/pdf/QuickTime7UserGuide.pdf (page ) but when I save my movie file, the chapters and the text file that supported the chapters disappear! _Could anyo
-
My ipod went black. When I tried to sync it, I accidently retored it to factory settings and lost all of my apps etc. Now I only have a black screen that says I pod when I turn it on. Is there anything I can do?