EDI Data into BW
Hello,
We receive some external EDI data that we want to move into BW directly or indirectly.
Does anyone have suggestions on how this can be automated? The easiest way that i can think of, but it is also manual. Is to cleanse the EDI file and dump it into a FF and load it that way into BW. I would like to get some ideas on how this can be automated either using the FF method or some other way.
Thanks,
Nick
Hi Nick,
Can you just specify how you are receiving your EDI data..Is it in some data base or some file like flat file. If its lying in some data base then you can use UD or DB connect to pull into bw. If there are large number of files then you can upload into bw from application server.
Regards
Rak
Similar Messages
-
Parsing an EDI file and populating the data into database table
Hi ,
Please help me in parsing an edi file and getting the required columns.
we get an EDI file from a bank. I need to parse that file and populate the db table with the required columns.
the file is '*' delimited and every line ends with '\'.
The record starts with 'ST*' and ends with 'SE*'.
sample edi file is
ISA*00* *00* *ZZ*043000096820 *ZZ*2156833510 *131202*0710*U*00401*000001204*0*P*>\ ignore first 2 lines
GS*RA*043000096820*2156833510*131202*0710*1204*X*003020\
ST*820*000041031\
BPR*X*270*C*ACH*PPD*01*101036669***9101036669**01*031000053*DA*00000008606086714*131202\
TRN*1*101036661273032\
DTM*007*131202\
N1*1U*BPS\
N1*BE*MICHAEL DRAYTON*34*159783633\
N1*PE*BPS*ZZ*183383689C2 ABC\
N1*PR*ABC TREAS 310\
SE*9*000041031\ ST*820*000041032\
BPR*X*686*C*ACH*PPD*01*101036669***9101036669**01*031000053*DA*00000008606086714*131202\
TRN*1*101036661273034\
DTM*007*131202\
N1*1U*BPS\
N1*BE*SAMIA GRAVES*34*892909238\
N1*PE*BPS*ZZ*184545710C5 ABC\
N1*PR*ABC TREAS 310\
SE*9*000041032\
Below is the procedure I am trying to use for parsing that file. but the logic is not working. can you please help me in doing this. its very urgent requirement.
CREATE OR REPLACE package body p1 is
Function parse_spec(p_str varchar2) return t_str_nt is
begin
return regexp_replace(p_str,'\\$',null);
end;
procedure edi( is
l_out_file utl_file.file_type;
l_lin varchar2(200);
field1 number(9);
field2 varchar2(10 byte);
field3 varchar2(15 byte);
field4 varchar2(15 byte);
field5 varchar2(20 byte);
field6 varchar2(20 byte);
field7 varchar2(20 byte);
field8 varchar2(9 byte);
field9 varchar2(15 byte);
field10 varchar2(5 byte);
l_item_nt t_str_nt:=t_str_nt();
begin
l_out_file := utl_file.fopen (file_path, file_name, 'r');
IF utl_file.is_open(l_out_file) THEN
LOOP
BEGIN
l_item_nt:= utl_file.get_line(l_out_file, l_lin);
IF l_item_nt IS NULL THEN
raise no_data_found;
Else
for k in 1..l_item_nt.count loop
case
when l_item_nt(k) like 'ST*%' then
field1:= ltrim(regexp_substr(parse_spec(l_item_nt(k)),'[^*]+',1,3),0);
when l_item_nt(k) like 'BPR*X*%' then
field2 := regexp_substr(parse_spec(l_item_nt(k)),'[^*]+',1,3);
when l_item_nt(k) like 'TRN*1*%' then
field3:= regexp_substr(parse_spec(l_item_nt(k)),'[^*]+',1,3);
when l_item_nt(k) like 'DTM*007*%' then
field4:= regexp_substr(parse_spec(l_item_nt(k)),'[^*]+',1,3);
when l_item_nt(k) like '%*BE*%' then
field5 := regexp_substr(regexp_substr(parse_spec(l_item_nt(k)),'[^*]+',1,3),'[^ ]+', 1, 1);
field6 := regexp_substr(regexp_substr(parse_spec(l_item_nt(k)),'[^*]+',1,3),'[^ ]+', 1, 1);
field7 := regexp_substr(parse_spec(l_item_nt(k)),'[^*]+',1,5);
when l_item_nt(k) like '%*PE*%*ZZ*%' then
field8:= regexp_substr(regexp_substr(parse_spec(line),'[^*]+',1,5),'[^ ]+',1,1)
field9 := regexp_substr(regexp_substr(parse_spec(line),'[^*]+',1,5),'[^ ]+',1,2);
when l_item_nt(k) like 'SE*%' then
insert into t1(field1,field2,field3,field5,field6,field7,field8,field9)
-- values(field1,field2,field3,field5,field6,field7,field8,field9);
else
dbms_output.put_line ('end of line');
end case;
end loop;
end if;
end loop;
utl_file.fclose(l_out_file);
exception
when no_data_found then
dbms_output.put_line('No data found');
end;I would not use regular expressions for parsing as it is CPU intensive - and standard string processing suffices.
I would break the EDI up into lines. I would tokenise each line. I then have 2d array that can be referenced to find a specific field. E.g. line x and token y is field abc.
Basic approach:
SQL> create or replace type TStrings as table of varchar2(4000);
2 /
Type created.
SQL> -- create a parser that tokenises a string
SQL> create or replace function Tokenise(
2 csvLine varchar2,
3 separator varchar2 default ',',
4 enclosedBy varchar2 default null
5 ) return TStrings is
6 strList TStrings;
7 str varchar2(32767);
8 i integer;
9 l integer;
10 enclose1 integer;
11 enclose2 integer;
12 encloseStr varchar2(4000);
13 replaceStr varchar2(4000);
14
15 procedure AddString( line varchar2 ) is
16 begin
17 strList.Extend(1);
18 strList( strList.Count ) := Replace( line, CHR(0), separator );
19 end;
20
21 begin
22 strList := new TStrings();
23
24 str := csvLine;
25 loop
26 if enclosedBy is not null then
27 -- find the ennclosed text, if any
28 enclose1 := InStr( str, enclosedBy, 1 );
29 enclose2 := InStr( str, enclosedBy, 2 );
30
31 if (enclose1 > 0) and (enclose2 > 0) and (enclose2 > enclose1) then
32 -- extract the enclosed string
33 encloseStr := SubStr( str, enclose1, enclose2-enclose1+1 );
34 -- replace the separator char's with zero char's
35 replaceStr := Replace( encloseStr, separator, CHR(0) );
36 -- and remove the enclosed quotes
37 replaceStr := Replace( replaceStr, enclosedBy );
38 -- change the enclosed string in the big string to the replacement string
39 str := Replace( str, encloseStr, replaceStr );
40 end if;
41 end if;
42
43 l := Length( str );
44 i := InStr( str, separator );
45
46 if i = 0 then
47 AddString( str );
48 else
49 AddString( SubStr( str, 1, i-1 ) );
50 str := SubStr( str, i+1 );
51 end if;
52
53 -- if the separator was on the last char of the line, there is
54 -- a trailing null column which we need to add manually
55 if i = l then
56 AddString( null );
57 end if;
58
59 exit when str is NULL;
60 exit when i = 0;
61 end loop;
62
63 return( strList );
64 end;
65 /
Function created.
SQL>
SQL>
SQL> declare
2 ediDoc varchar2(32767) :=
3 'ISA*00* *00* *ZZ*043000096820 *ZZ*2156833510 *131202*0710*U*00401*000001204*0*P*>\GS*RA*043000096820*2156833510*131202*0710*1204*X*003020\ST*820*000041031\BPR*X*270*C*ACH*PPD*01*101036669***9101036669**01*031000053*DA*00000008606086714*131202\TRN*1*101036661273032\DTM*007*131202\N1*1U*BPS\N1*BE*MICHAEL DRAYTON*34*159783633\N1*PE*BPS*ZZ*183383689C2 ABC\N1*PR*ABC TREAS 310\SE*9*000041031\ST*820*000041032\BPR*X*686*C*ACH*PPD*01*101036669***9101036669**01*031000053*DA*00000008606086714*131202\TRN*1*101036661273034\DTM*007*131202\N1*1U*BPS\N1*BE*SAMIA GRAVES*34*892909238\N1*PE*BPS*ZZ*184545710C5 ABC\N1*PR*ABC TREAS 310\SE*9*000041032\';
4
5 lines TStrings;
6 tokens TStrings;
7 begin
8 -- split EDI string into lines
9 lines := Tokenise( ediDoc, '\' );
10
11 -- process line and extract fields
12 for i in 3..lines.Count loop
13 dbms_output.put_line( '***********************' ) ;
14 dbms_output.put_line( 'line=['||lines(i)||']' );
15 tokens := Tokenise( lines(i), '*' );
16
17 for j in 1..tokens.Count loop
18 dbms_output.put_line( to_char(j,'00')||'='||tokens(j) );
19 end loop;
20 end loop;
21 end;
22 /
line=[ST*820*000041031]
01=ST
02=820
03=000041031
line=[BPR*X*270*C*ACH*PPD*01*101036669***9101036669**01*031000053*DA*00000008606086714*131202]
01=BPR
02=X
03=270
04=C
05=ACH
06=PPD
07=01
08=101036669
09=
10=
11=9101036669
12=
13=01
14=031000053
15=DA
16=00000008606086714
17=131202
line=[TRN*1*101036661273032]
01=TRN
02=1
03=101036661273032
<snipped> -
How to input data into an arraylist from a text file?
I am trying to take data from a text file and put that data into an arraylist. First here is the text file:
[item1, 10, 125.0, item2, 10, 12.0, item3, 20, 158.0]
3
4530.0
[item5, 65, 555.5, item4, 29, 689.0]
2
56088.5
[item7, 84, 34.5, item6, 103, 0.5, item8, 85, 1.36]
3
3065.1The text between the [ ] is the output from my arraylists. I have three arraylists. The first [ ] belongs to arraylist A, the second to arraylist B, and the third to arraylist C. The format of the arraylists is this:
<item name>,<# in stock>,<value of one item>
The first number below the arraylists in the text file represents the number of items in the list. The second number below the arraylists represents the total value of the items in the arraylists.
Here is the class file I have (yes, it does everything):
import java.io.*;
import java.util.Scanner;
import java.util.ArrayList;
public class Inventory extends Object
public int toAdd = 0;
private boolean done = false; //Are we done yet?
public String strItemName; //The name of the item type.
public int intNumInStock; //The number in stock of that type.
public double dblValueOfOneItem; //The value of one item.
public String strNumberInStock;
public double dblTotalValueA; //The total value of warehouse A.
public double dblTotalValueB; //The total value of warehouse B.
public double dblTotalValueC; //The total value of warehouse C.
public int intWarehouseAItemCount; //Counter for items in warehouse A.
public int intWarehouseBItemCount; //Counter for items in warehouse B.
public int intWarehouseCItemCount; //Counter for items in warehouse C.
ArrayList warehouseAList = new ArrayList(); //Create the Warehouse A ArrayList.
ArrayList warehouseBList = new ArrayList(); //Create the Warehouse B arrayList.
ArrayList warehouseCList = new ArrayList(); //Create the Warehouse C arrayList.
/** Construct a new Inventory object. */
public Inventory()
super();
/**Add items to the Warehouse A ArrayList.*/
private void createWareHouseA()
System.out.println("!" + toAdd + " item types will be added to warehouse A.");
//Cast
String strNumInStock = Integer.toString(intNumInStock);
String strValueOfOneItem = Double.toString(dblValueOfOneItem);
this.strNumberInStock = strNumInStock;
System.out.println("!Initial size of warehouseAList : " +
warehouseAList.size());
//Add items to the array List
warehouseAList.add(this.strItemName);
warehouseAList.add(this.strNumberInStock);
warehouseAList.add(this.dblValueOfOneItem);
System.out.println("!size of arrayList after additions " + warehouseAList.size());
/**Add items to the Warehouse B ArrayList.*/
private void createWareHouseB()
System.out.println("!" + toAdd + " item types will be added to warehouse B.");
//Cast
String strNumInStock = Integer.toString(intNumInStock);
String strValueOfOneItem = Double.toString(dblValueOfOneItem);
this.strNumberInStock = strNumInStock;
System.out.println("!Initial size of warehouseBList : " +
warehouseBList.size());
//Add items to the array List
warehouseBList.add(this.strItemName);
warehouseBList.add(this.strNumberInStock);
warehouseBList.add(this.dblValueOfOneItem);
System.out.println("!size of arrayList after additions " + warehouseBList.size());
/**Add items to the Warehouse C ArrayList.*/
private void createWareHouseC()
System.out.println("!" + toAdd + " item types will be added to warehouse C.");
//Cast
String strNumInStock = Integer.toString(intNumInStock);
String strValueOfOneItem = Double.toString(dblValueOfOneItem);
this.strNumberInStock = strNumInStock;
System.out.println("!Initial size of warehouseCList : " +
warehouseCList.size());
//Add items to the array List
warehouseCList.add(this.strItemName);
warehouseCList.add(this.strNumberInStock);
warehouseCList.add(this.dblValueOfOneItem);
System.out.println("!size of arrayList after additions " + warehouseCList.size());
/**Interpret the commands entered by the user.*/
public void cmdInterpreter()
this.displayHelp();
Scanner cin = new Scanner(System.in);
while (!this.done)
System.out.print(">");
//"line" equals the next line of input.
String line = cin.nextLine();
this.executeCmd(line);
/**Execute one line entered by the user.
* @param cmdLN; The command entered by the user to execute. */
private void executeCmd(String cmdLN)
Scanner line = new Scanner(cmdLN);
if (line.hasNext())
String cmd = line.next();
//What to do when users enter the various commands below.
if (cmd.equals("help"))
this.displayHelp();
else if (cmd.equals("Q!"))
this.done = true;
else if (cmd.equals("F") && line.hasNext())
this.inputFromFile(line.next());
else if (cmd.equals("K") && line.hasNext())
int numItemsToAdd = Integer.valueOf( line.next() ).intValue();
this.toAdd = numItemsToAdd;
this.inputFromKeyboard(numItemsToAdd);
/**What to do if input comes from a file.
* @param inputFile; The name of the input file to process.*/
private void inputFromFile(String inputFile)
Scanner cin = new Scanner(System.in);
System.out.println("!Using input file " + inputFile + ".");
System.out.print("!Enter the name of the output file: ");
String outputFile = cin.next();
System.out.println("!Using output file " + outputFile + ".");
try
BufferedReader in = new BufferedReader(new FileReader(inputFile));
//Scanner in = new Scanner(new File(inputFile));
//Initialize the String variables.
String line1 = null;
String line2 = null;
String line3 = null;
String line4 = null;
String line5 = null;
String line6 = null;
String line7 = null;
String line8 = null;
String line9 = null;
System.out.println(in.equals(",") + " see?");
//System.out.println((char)(char)in.read() + " experiment");
/**This loop assigns values to the string variables based on the
* values on each line in the input file. */
while(in.readLine() != null)
line1 = in.readLine();
line2 = in.readLine();
line3 = in.readLine();
line4 = in.readLine();
line5 = in.readLine();
line6 = in.readLine();
line7 = in.readLine();
line8 = in.readLine();
line9 = in.readLine();
//Print the contents of each line in the input file.
System.out.println("!value of line 1: " + line1);
System.out.println("!value of line 2: " + line2);
System.out.println("!value of line 3: " + line3);
System.out.println("!value of line 4: " + line4);
System.out.println("!value of line 5: " + line5);
System.out.println("!value of line 6: " + line6);
System.out.println("!value of line 7: " + line7);
System.out.println("!value of line 8: " + line8);
System.out.println("!value of line 9: " + line9);
/**Add items to the warehouses.*/
warehouseAList.add(line1);
warehouseBList.add(line4);
warehouseCList.add(line7);
/**Add the item count and total value for warehouse A.*/
int intLine2 = Integer.valueOf(line2).intValue();
this.intWarehouseAItemCount = intLine2;
double dblLine3 = Double.valueOf(line3).doubleValue();
this.dblTotalValueA = dblLine3;
/**Add the item count and total value for warehouse B.*/
int intLine5 = Integer.valueOf(line5).intValue();
this.intWarehouseBItemCount = intLine5;
double dblLine6 = Double.valueOf(line6).doubleValue();
this.dblTotalValueB = dblLine6;
/**Add the item count and total value for warehouse C.*/
int intLine8 = Integer.valueOf(line8).intValue();
this.intWarehouseCItemCount = intLine8;
double dblLine9 = Double.valueOf(line9).doubleValue();
this.dblTotalValueC = dblLine9;
/**Ask the user how many items to add or delete from inventory.*/
System.out.print("Enter the number to add to inventory for " +
warehouseAList.get(0) + ":");
String toAddOrDel = cin.next();
/**Print the contents of all the warehouses. */
System.out.println(" ");
//Print the contents of warehouse A.
System.out.println("!--------------------------------");
System.out.println("!----------Warehouse A:----------");
System.out.println("!--------------------------------");
//Print the item list for warehouse A.
System.out.println(warehouseAList);
//Print the total amount of items in warehouse A.
System.out.println("Total items: " + this.intWarehouseAItemCount);
//Print the total value of the items in warehouse A.
System.out.println("Total value: " + this.dblTotalValueA);
System.out.println("!--------------------------------");
System.out.println("!----------Warehouse B:----------");
System.out.println("!--------------------------------");
//Print the item list for warehouse B.
System.out.println("!warehouseB: " + warehouseBList);
//Print the total amount of items in warehouse B.
System.out.println("Total items: " + this.intWarehouseBItemCount);
//Print the total value of the items in warehouse B.
System.out.println("Total value: " + this.dblTotalValueB);
System.out.println("!--------------------------------");
System.out.println("!----------Warehouse C:----------");
System.out.println("!--------------------------------");
//Print the item list for warehouse C.
System.out.println("!warehouseC: " + warehouseCList);
//Print the total amount of items in warehouse C.
System.out.println("Total items: " + this.intWarehouseCItemCount);
//Print the total value of the items in warehouse C.
System.out.println("Total value: " + this.dblTotalValueC);
in.close();
catch (FileNotFoundException e)
System.out.println("!Error: Unable to open file for reading.");
catch (EOFException e)
System.out.println("!Error: EOF encountered, file may be corrupted.");
catch (IOException e)
System.out.println("!Error: Cannot read from file.");
/**What to do if input comes from the keyboard.
* @param numItems; The total number of items that will be added to the
* Warehouse(s). */
public void inputFromKeyboard(int numItems)
System.out.println("!You will be adding " + numItems + " items to " +
"inventory from the keyboard. ");
this.toAdd = numItems;
Scanner cin = new Scanner(System.in);
//Prompt user for name of output file.
System.out.print("!Enter the name of the output file: ");
String outputFile = cin.next();
/**This loop asks the user for information about the item(s) and inputs
*them into the appropriate array.*/
int count = 0;
while (numItems > count)
//Item name.
System.out.print("!Item name: ");
String addItemName = cin.next();
//Number in stock.
System.out.print("!Number in stock: ");
String addNumInStock = cin.next();
//Initial warehouse.
System.out.print("!Initial warehouse(A,B,C): ");
String addInitWarehouse = cin.next();
//Value of one item.
System.out.print("!Value of one item: ");
String addValueOfOneItem = cin.next();
//Add or delete from inventory
System.out.print("!Enter amount to add or delete from inventory: ");
String strAddOrDelete = cin.next();
System.out.println("!Amount to add or delete: " + strAddOrDelete);
//Cast
int intAddNumInStock = Integer.valueOf(addNumInStock).intValue();
double doubleAddValueOfOneItem = Double.valueOf(addValueOfOneItem).doubleValue();
int intAddOrDelete = Integer.valueOf(strAddOrDelete).intValue();
/**Add intAddNumInStock with intAddOrDelete to determine the amount
* to add or delete from inventory (If a user wishes to remove items
* from inventory simply add negative values). */
intAddNumInStock = intAddNumInStock + intAddOrDelete;
System.out.println("!Inventory after modifications: " + strAddOrDelete);
this.strItemName = addItemName;
this.intNumInStock = intAddNumInStock;
this.dblValueOfOneItem = doubleAddValueOfOneItem;
//Put items into warehouse A if appropriate.
if (intAddNumInStock < 25)
//Increment the warehouse A item count.
this.intWarehouseAItemCount = this.intWarehouseAItemCount + 1;
//Calculate the total value of warehouse A.
this.dblTotalValueA = this.dblTotalValueA + intAddNumInStock * doubleAddValueOfOneItem;
//Create the warehouse A array list.
this.createWareHouseA();
//Put items into warehouse B if appropriate.
if (intAddNumInStock >= 25)
if (intAddNumInStock < 75)
//Increment the warehouse B item count.
this.intWarehouseBItemCount = this.intWarehouseBItemCount + 1;
//Calculate the total value of warehouse B.
this.dblTotalValueB = this.dblTotalValueB + intAddNumInStock * doubleAddValueOfOneItem;
//Create the warehouse B array list.
this.createWareHouseB();
//Put items into warehouse C if appropriate.
if (intAddNumInStock >= 75)
//Increment the warehouse C item count.
this.intWarehouseCItemCount = this.intWarehouseCItemCount + 1;
//Calculate the total value of warehouse C.
this.dblTotalValueC = this.dblTotalValueC + intAddNumInStock * doubleAddValueOfOneItem;
//Create the warehouse C array list.
this.createWareHouseC();
//display helpful information.
System.out.println("!--------------------------------");
System.out.println("!" + addItemName + " is the item name.");
System.out.println("!" + addNumInStock + " is the number in stock.");
System.out.println("!" + addInitWarehouse + " is the initial warehouse.");
System.out.println("!" + addValueOfOneItem + " is the value of one item.");
System.out.println("!--------------------------------------------------");
//Increment the counters.
count++;
/**Create and write to the output file. */
try
//Use the output file specified by the user.
PrintWriter out = new PrintWriter(outputFile);
/**Write warehouse A details.*/
//Blank the first line.
out.println(" ");
//Write the array list for warehouse A.
out.println(warehouseAList);
//Write the amount of items in warehouse A.
out.println(intWarehouseAItemCount);
//Write the total value for warehouse A.
out.println(dblTotalValueA);
/**Write warehosue B details.*/
//Write the array list for warehouse B.
out.println(warehouseBList);
//Write the amount of items in warehouse B.
out.println(intWarehouseBItemCount);
//Write the total value for warehouse B.
out.println(dblTotalValueB);
/**Write warehouse C details.*/
//Write the array list for warehouse C.
out.println(warehouseCList);
//Write the amount of items in warehouse C.
out.println(intWarehouseCItemCount);
//Write the total value for warehouse C.
out.println(dblTotalValueC);
//Close the output file.
out.close();
catch (FileNotFoundException e)
System.out.println("Error: Unable to open file for reading.");
catch (IOException e)
System.out.println("Error: Cannot read from file.");
/**View the contents and the value of each warehouse.*/
System.out.println("!---------------Inventory Summary------------------");
System.out.println("!--------------------------------------------------");
System.out.println("!--------------------LEGEND:-----------------------");
System.out.println("!<item type>, <amount in stock>,<value of one item>");
System.out.println("!--------------------------------------------------");
System.out.println("!------------------Warehouse A:--------------------");
System.out.println("!--------------------------------------------------");
//Display Items in warehouse A.
System.out.println(warehouseAList);
//Total items in warehouse A.
System.out.println("Total items: " + intWarehouseAItemCount);
//Display total value of warehouse A.
System.out.println("Total value: " + "$" + dblTotalValueA);
System.out.println("!--------------------------------------------------");
System.out.println("!------------------Warehouse B:--------------------");
System.out.println("!--------------------------------------------------");
//Display Items in warehouse B.
System.out.println(warehouseBList);
//Total items in warehouse B.
System.out.println("Total items: " + intWarehouseBItemCount);
//Display total value of warehouse B.
System.out.println("Total value: " + "$" + dblTotalValueB);
System.out.println("!--------------------------------------------------");
System.out.println("!------------------Warehouse C:--------------------");
System.out.println("!--------------------------------------------------");
//Display Items in warehouse C.
System.out.println(warehouseCList);
//Total items in warehouse C.
System.out.println("Total items: " + intWarehouseCItemCount);
//Display total value of warehouse C.
System.out.println("Total value: " + "$" + dblTotalValueC);
/**Display a help message.*/
private void displayHelp()
System.out.println("!--------------------------------");
System.out.println("! General Help:");
System.out.println("!--------------------------------");
System.out.println("! ");
System.out.println("!'help' display this help message.");
System.out.println("!'Q!' quit this program.");
System.out.println("!--------------------------------");
System.out.println("! Input File Specific Commands:");
System.out.println("!--------------------------------");
System.out.println("! ");
System.out.println("!'F' <name> type F followed by the name of the " +
"file to be used for input.");
System.out.println("!---------------------------------------");
System.out.println("! Input From Keyboard Specific Commands:");
System.out.println("!---------------------------------------");
System.out.println("! ");
System.out.println("!'K' <number> type K followed by the number of " +
"items that will be added. ");
System.out.println("! ");
}Program file:
public class InventoryProg
public static void main(String[] args)
//Create a new Inventory object.
Inventory test = new Inventory();
//Execute the command interpreter.
test.cmdInterpreter();
}Right now I am stuck on this and I cannot progress any further until I figure out how to input the data in the text file back into a arraylist.
Thanks in advance.Thanks but I figured it out. Heres a sample of the code i used to solve my problem:
try
//Warehouse A BufferedReader.
BufferedReader inA = new BufferedReader(new FileReader(inputFileWarehouseA));
//Warehouse B BufferedReader.
BufferedReader inB = new BufferedReader(new FileReader(inputFileWarehouseB));
//Warehouse C BufferedReader.
BufferedReader inC = new BufferedReader(new FileReader(inputFileWarehouseC));
//Warehouse details BufferedReader.
BufferedReader inDetails = new BufferedReader(new FileReader(inputFileDetails));
//Will hold values in warehouse arraylists.
String lineA = null;
String lineB = null;
String lineC = null;
//Will hold the details of each warehouse.
String line1 = null;
String line2 = null;
String line3 = null;
String line4 = null;
String line5 = null;
String line6 = null;
//Get the item count and total value for each warehouse.
while(inDetails.readLine() != null)
line1 = inDetails.readLine();
line2 = inDetails.readLine();
line3 = inDetails.readLine();
line4 = inDetails.readLine();
line5 = inDetails.readLine();
line6 = inDetails.readLine();
/**Assign the item count and total value to warehouse A.*/
//Cast.
int intLine1 = Integer.valueOf(line1).intValue();
double dblLine2 = Double.valueOf(line2).doubleValue();
//Assign the values.
this.intWarehouseAItemCount = intLine1;
this.dblTotalValueA = dblLine2;
/**Assign the item count and total value to warehouse B.*/
//Cast.
int intLine3 = Integer.valueOf(line3).intValue();
double dblLine4 = Double.valueOf(line4).doubleValue();
//Assign the values.
this.intWarehouseBItemCount = intLine3;
this.dblTotalValueB = dblLine4;
/**Assign the item count and total value to warehouse C.*/
//Cast.
int intLine5 = Integer.valueOf(line5).intValue();
double dblLine6 = Double.valueOf(line6).doubleValue();
//Assign the values.
this.intWarehouseCItemCount = intLine5;
this.dblTotalValueC = dblLine6;
/**Put the items back into the warehouses arraylists. */
//Add items to warehouse A.
while((lineA = inA.readLine()) != null)
warehouseAList.add(lineA);
//Add items to warehouse B.
while((lineB = inB.readLine()) != null)
warehouseBList.add(lineB);
//Add items to warehouse C.
while((lineC = inC.readLine()) != null)
warehouseCList.add(lineC);
}(this isn't the whole try statement its pretty long) -
Splitting comma seperated column data into multiple rows
Hi Gurus,
Please help me for solving below scenario. I have multiple value in single column with comma seperated values and my requirement is load that data into multiple rows.
Below is the example:
Source Data:
Product Size Stock
ABC X,XL,XXL,M,L,S 1,2,3,4,5,6
Target Data:
Product Size Stock
ABC X 1
ABC XL 2
ABC XXL 3
ABC M 4
ABC L 5
ABC S 6
Which transformation we need to use for getting this output?
Thanks in advance !Hello,
Do you need to do this tranformation through OWB mapping only? And can you please tell what type of source you are using? Is it a flat file or a table?
Thanks -
Can not extract data into BW from SQL SERVER
Dear All,
I meet a problem to extract data from database(MS SQL Server 2000(sp3)) into BW now and can not extract data into BW ODS, even PSA, In the monitor, display yellow light(0 from 0 record), detail message just display message "data request arranged" "confirmed with: confirmation" in requests(message) step; "missing message: request received" in extract (message) step; "no data" in processing(data packet) step and so on. but in fact, there are two records in my database test table and DB connection is OK. Even I can extract data from another test oracle database into BW ODS successfully.
Our BW system has two BW applicaton server and use oracle database. the one application server locates on IBM AIX host. the another one locates on one NT server. the application server on NT server is used for data extration from MS SQL SERVER database into BW oracle database. and MS SQL SERVER and NT platform application server locate on same one host. DBSL was installed on the NT application server already. and DB connector also was created successfully for MS SQL SERVER and datasource also was generated. DBSL type is Kernel640-WIN-IA32bit-unicode. my BW system is ECC5.0/UNICODE/ORACLE. all table/view/field name of MS SQL server is upcase and have not any specific character. for example: ZDEMO etc.
wait your help.
Thanks in advance.
BillyHi Ravi,
Could you help me to get knowledge about the followings:
approximately how many records extracting and transfering from SAP R/3 to BIW in an organisation. for that how much time will take .
How to extract data from two are three source system to BIW. Kindly help me with step by step explanation .If any screen shots with documents pls fwd to my ID. "[email protected]"
Your help highly appreciated.
Thanks.
Hema -
Can not load data into the ods.
When I was trying to load data into BW3.5 from R3 system, I am getting this message
"For InfoSource ZSD_A507_011, there is no Hierarchies for master data in source system R3PCLNT300
" any idea. There is no hierarchies for this.Hello Mat,
What are you trying to load??
If the data source is a hierarchy datasource??
just check this thread
There are no hierarchies for this InfoSource in source system
Thanks
Ajeet -
How to Get data into I_ table which is Created dynamically
Hi Guys ,
I created one dynamic internal table , now I am want to display same internal table in my ALV? , how can I populate data into this internal table from my internal table based on some condition.
My Requirement is?
I have to display like this
1.This is my heading (field_cat of my ALV in which pack size may varry based on the flavor).
Plant flavor pack_size1----
pack_size-n
2. I have internal table( itab2) with all the pack-sizes and plant details.
3. how can I pass the these data into (itab1) which going to display in ALV ?
I can loop at itab2.
How to pass this data into itab1 relevent fields ?
Looking for Val. Inputs
With Best Regards
Prabhu
TC-Team SAP
Pepsi India
[email protected]Hi,
This is a code snippet.
DATA: r_dyn_table TYPE REF TO data,
r_wa_dyn_table TYPE REF TO data,
l_fields_table type SOI_FIELDS_TABLE.
FIELD-SYMBOLS: <t_dyn_table> TYPE STANDARD TABLE,
<wa_dyn_table> TYPE ANY,
<w_field1> TYPE ANY,
<w_field2> TYPE ANY.
DATA: l_oref_structure TYPE REF TO cl_abap_structdescr,
l_abap_compdescr type abap_compdescr.
data: check1 type i,
check2 type i,
l_range(20).
r_dyn_table = IL_DYNDATA-r_dyn_table.
ASSIGN r_dyn_table->* TO <t_dyn_table>.
CREATE DATA r_wa_dyn_table LIKE LINE OF <t_dyn_table>.
ASSIGN r_wa_dyn_table->* TO <wa_dyn_table>.
l_oref_structure ?= cl_abap_typedescr=>describe_by_data(
wa_supl ).
loop at il_fill_itab into wa_supl.
loop at l_oref_structure->COMPONENTS into l_abap_compdescr.
ASSIGN COMPONENT l_abap_compdescr-name
OF STRUCTURE wa_supl TO <w_field1>.
check1 = sy-subrc.
ASSIGN COMPONENT l_abap_compdescr-name
OF STRUCTURE <wa_dyn_table> TO <w_field2>.
check2 = sy-subrc.
if check1 = 0 and check2 = 0.
<w_field2> = <w_field1>.
endif.
endloop.
APPEND <wa_dyn_table> TO <t_dyn_table>.
endloop.
You can access your dynamic internal table via a field symbol.
Svetlin -
Inserting data into one table using another table
Hi i have 2 tables
CREATE TABLE N_SET
N_ST_ID NUMBER(38) NOT NULL, ---- PK
N_ST_NM VARCHAR2(50 BYTE) NOT NULL,
N_ST_DSC VARCHAR2(200 BYTE),
DFTID NUMBER ------ FK
CREATE TABLE RZ
NST_ID NUMBER(38) NOT NULL, ---- FK
RID NUMBER(38) NOT NULL, --- PK
RNM VARCHAR2(30 BYTE) NOT NULL
I entered the data into the N_SET table using sequence in column N_ST_ID (using procedure)
Now i need to enter the data into RZ table where NST_ID should contain the value of N_SET.N_ST_ID
so for this i've written another procedure
but confused how to write the select statement to retrieve the above condition..
Could you help me in this please...Hi,
I have a table Target whose structure is
create table employee
id VARCHAR2(20),
name VARCHAR2(20),
employee_seq NUMBER not null
-- Create sequence
create sequence test_seq
minvalue 1
maxvalue 999999999999999999999999999
start with 5
increment by 1
nocache
cycle;
create table emp
id VARCHAR2(20)
name VARCHAR2(20)
INSERT INTO emp
( id, name )
VaLUES ( '100','test1');
commit;
INSERT INTO emp
( id, name )
VaLUES ( '100','test2');
commit;
i have to insert into the TARGET table the fsa value from
SOURCE table along with the sequence number using sequence test_seq.nextval.
INSERT INTO employee
( id, name, employee_seq )
SELECT id, ename, ( select test_seq.nextval from dual )
FROM emp ; -
Copy a certain row of data into the next row in a same internal table ??
HI, guys.
May i know how to copy a certain row of data into the next row in a same internal table ?? Bcz I plan to update a certain colum of data in the row just now into another value..
For example:-
*at first...
ebeln1 ebelp1 xblnr1
ebeln2 ebelp2 xblnr2
ebeln3 ebelp3 xblnr3
*after that, become...
ebeln1 ebelp1 xblnr1
ebeln2 ebelp2 xblnr2
ebeln2 ebelp2 xblnr4
ebeln2 ebelp2 xblnr5
ebeln3 ebelp3 xblnr3
Thanks in advance.hi,
If you have this kind of requirement then you must be having 2 internal tables ,one existing data and 2nd from which you have to insert the records into 1st table.
so in this case,
loop at itab1.
v_index = sy-tabix.
loop at itab2 into wa where pri_key = itab1-pri_key.
v_index = v_index + 1.
insert wa into itab index v_index.
endloop.
endloop.
Using this code ,your data records similar to your 1st tables primary key records will get inserted into table. -
Unable to Loda the data into PSA.
Hi Xpert,
i am uanble to load the data into PSA.
my source system is not R/3,it is BI.
(ctually we are xtracting the data (from a cube) with the help of programm to a table and then i am creating a generic data ource on that table and loading the data to my cube.)
i am getting this error message.
Error message from the source system
Diagnosis
An error occurred in the source system.
System Response
Caller 09 contains an error message.
Further analysis:
The error occurred in Extractor .
Refer to the error message.
Procedure
How you remove the error depends on the error message.
Note
If the source system is a Client Workstation, then it is possible that the file that you wanted to load was being edited at the time of the data request. Make sure that the file is in the specified directory, that it is not being processed at the moment, and restart the
Then i replicated the data source and activate ti also then also i am getting this error message.
when i am checking my data source on RSA3 i am getting this error message,
Two internal tables are neither compatible nor convertible.
t happened?
Error in the ABAP Application Program
The current ABAP program "SAPLAQBWEXR" had to be terminated because it has
come across a statement that unfortunately cannot be executed.
or analysis
You attempted to move one data object to another.
This is not possible here because the internal tables concerned
are neither compatible nor convertible.
gger Location of Runtime Error
Program SAPLAQBWEXR
Include LAQBWEXRU01
Row 419
Module type (FUNCTION)
Module Name AQBW_CALL_EXTRACTOR_QUERY
Regards,
sat534Hi
Problem looks to be with generic datasource
share details of data source and how you created it.
Regards
Sudeep -
I wish to insert data into a table only when the value of the inserted data has changed. Thus, in a time series, if the value of the data at time, t-1, is 206 then if the data to be inserted at time t is 206, then it is skipped (not entered).
If the value of the data at time t+1 is 206, it is skipped also; until the value changes, so if the value at t+1 was 205, then that would be inserted, and if at time t+2 the data is 206, it would be inserted too.
What is the best way to do it without increasing overheads?This view works:
SELECT
i.IDNO,i.[Date],i.[Level]
FROM
mytable i
INNER
JOIN mytable
d
ON
d.IDNO
= i.IDNO-1
WHERE
i.[Level]
<> d.[Level]
on this mytable below. A trigger could be quite useful here although I am cautious using them. However I wish to avoid the overhead by not having a temp table (which could be sizable). mytable below
should give 3 lines. The IDNO is an identity column.
IDNO
Item
Date
Level
1
X24
12/23/13 10:41
22996
2
X24
12/23/13 10:41
22996
3
X24
12/23/13 9:21
23256
4
X24
12/23/13 9:21
23256
5
X24
12/23/13 9:22
23256
6
X24
12/23/13 9:22
23256
7
X24
12/23/13 9:22
22916 -
How do you access a web service to insert data into table?
Ok I have a simple html/jsp survey form to host on our web site. Because of firewall issues I cannot do a direct connect to the database and insert the data from the form. So I need to take the data from the survey form, and pass it to an existing web service, or create a web service that will insert this information for me into the database table?
Thanks again.
orozcoThanks for the reply shanu. Well, because of firewall issues, as a work around we use a web service to insert data into the database table. Since the Web Service already exist, we just thought it would be easy enough just to pass the parameters to it, and have it do the insert. So really all I need is just to communicate with the already existing web service. I will be honest though I have not really worked with web services before.
orozcom -
Search data into ResultSets to genrate a complex report
Hi,
I am writing a report called "Product Flow". The report headings are follows
prodcode prod name opening qty purchase_qty sales_qty closing_qty
=============================================================
To achieve this, I need to know the products, their opening qty, their purchase qty, sales qty and finally I will I will calculate the closing stock.
All this information is into different tables. I want to create 4-5 resultsets and then take the prodcut's resultset and scroll into it, take product one by one and then search its details into other resultset of opening, purchase and sales resultsets
How can I do it with resultsets? can anyone guide me? I am very much new for Java.
Thanks
OMkarDear,
Evenif I use SQL join. While designing the report finally, do I not have to write some code to compare and search some data into various resultsets or some kind of collections?
For example, in the above report, when I want to display report on screen, I will have to take the list of product and then search its values into tables and display it on the screen. So for this, do I not have to take the resultset of product table (rs) which will give me a list of product.
use while (rs.next()) >
take each product code
search the values in other resultsets (to search these values in actual table may be time consuming becasue of huge size of table. If there are 500 products in the table, I will have to use the table for 500 times using SQL.
Finally display the report on screen.How can I get more information about the collection type of resultset as u mentioned in the first reply? I will read the tutorials on SQL joins as you suggested and see if I can use it for this report.
Thanks for the reply. I would high appreciate if you can guide me to achieve my aims of project I am doing my studies.
Regards
OMkar -
Loading MS Access Table and Data into Oracle
Hi,
I have few tables in MS Access. I want to create same layout of tables in Oracle and want to populate data from MS Access tables to Oracle tables.
Please let me know if there is a way by which I can create tables and load data automatically (thru some option or script)?
I have Oracle 10g database and its clients.
Thanks in advance,
Rajeev.You can use Oracle migration workbench
Loading MS Access Table and Data into Oracle
It´s very easy to use and good to import
regards,
Felipe -
1
I Have Problem in display data into Chart Or chartJs ,
In my Controller I Return Json and
use it in javascript like this but i have
error that tell me 't' is undefined
$(document).ready(function () {
$.getJSON("/Report/GetTransactions/", function (data) {
debugger;
var ctx = document.getElementById("myChart").getContext("2d");
var myBarChart = new Chart(ctx).Bar(data);
debugger;
data = {
labels: ["January", "February", "March", "April", "May", "June", "July"],
datasets: [
label: "My First dataset",
fillColor: "rgba(220,220,220,0.5)",
strokeColor: "rgba(220,220,220,0.8)",
highlightFill: "rgba(220,220,220,0.75)",
highlightStroke: "rgba(220,220,220,1)",
data: [data]
label: "My Second dataset",
fillColor: "rgba(151,187,205,0.5)",
strokeColor: "rgba(151,187,205,0.8)",
highlightFill: "rgba(151,187,205,0.75)",
highlightStroke: "rgba(151,187,205,1)",
data: [data]
and my controller is this
return Json(_reportRepository.GetTransactions(), JsonRequestBehavior.AllowGet);Hi Mario Castro,
In selection Screen initially u have to enter the input value after provides some user command only next screen will be trigger.
In the next screen PBO event you cant assign selection screen Variable into next screen fields.
Eg.
Selection Screen Variable
s_belnr
s_bukrs
s_gjahr
Next Screen
t_belnr
t_bukrs
t_gjahr
In PBO you can code
t_belnr = s_belnr
t_bukrs = s_bukrs
s_gjahr = s_gjahr
Revert back if any difficulties to do.
Regards,
Thangam.P
Maybe you are looking for
-
A report layout for address labels using Word's label-table
Hello, I sent the following question to the BIPublisher forum, but didn't get any answers. Maybe it wasn't the right forum. I'm a little desperate with this problem, because I have spent days trying to solve this. Could somebody please help with this
-
Converting Images to CMYK for Print Publication
When in my workflow should I be converting images to CMYK for print publication? Currently, I shoot RAW photographs with my DSLR in Adobe RGB, import the images into Photoshop for manipulation and then convert the final, sized image to CMYK before pl
-
Final Cut Pro 2nd monitor not working properly?
Been here before a long time ago, can't remember how it was resolved. Working in a new edit suite, FCP Studio. Two new Samsung monitors (not my choice). I want one to be my playback monitor. I set: Final Cut Pro > Audio/Video Settings > Digital Cin
-
After Upgrade to ECC 6.0 from 4.7 version, two variants for Payroll Reconciliation report in PC00_M10_REC are missing. These variants were of users who have left the organisation/company. Can anyone help me to restore those variants and tell me w
-
Problems with Pitch-Shifting in GarageBand 10.0.1
I'm trying to reconstruct a song by showing the sample source, then showing its progression by pitch-shifting it to the point where its sound matches with the song that samples it (e.g., the YouTube tutorials on the "Shook Ones, Pt. II" and "Ice Crea