Parsing a String and getting the values as multiple records.

shettarvikasshettarvikas Member Posts: 106
Hi,

Need to parse a string which contains Item codes seperated by comma. once it is done, for each item, we need to check the inventory and populate the same sttring with details.

eg:Request String ItemCodes|1000,1100,1001|

for each item, we have to check the inventory and reply with the qty.
Output String ItemCodes|1000^10,1100^20,1001^30|

How can it be done.
Thanks in advance,

Regards,
Vikas

Comments

  • XypherXypher Member Posts: 297
    buff_str := req_str;
    
    WHILE STRPOS(buff_str,',') > 1 DO BEGIN
      record.RESET;
      record.SETFILTER("Inventory Code",
                       COPYSTR(buff_str,1,STRPOS(buff_str,',')-1));
    
      buff_str := COPYSTR(buff_str,STRPOS(buff_str,',')+1);
    
      IF record.FINDSET THEN
        req_str := COPYSTR(req_str,1,STRLEN(req_str)-STRLEN(buff_str)-1) +
                   '^' + FORMAT(record."Inventory Qty") + 
                   COPYSTR(req_str,STRLEN(req_str)-STRLEN(buff_str)+1);
    END;
    

    I haven't tested this code, as I am not at work yet. Just off the top of my head. Let me know if it does the trick :-s
  • shettarvikasshettarvikas Member Posts: 106
    Hi,
    thanks for the reply but the logic is failing at
    buff_str := COPYSTR(buff_str,STRPOS(buff_str,',')+1);
    

    when it returns to the loop
    WHILE STRPOS(buff_str,',') > 1 DO BEGIN
    

    buff_str has item code value but not ',' position. Hence it is failing to run for the 2nd time.
  • XypherXypher Member Posts: 297
    Ok, how about this...
    buff_str := req_str;
    
    WHILE STRPOS(buff_str,',') >= 1 DO BEGIN
      record.RESET;
      record.SETFILTER("Inventory Code",
                       COPYSTR(buff_str,1,STRPOS(buff_str,',')-1));
    
      buff_str := COPYSTR(buff_str,STRPOS(buff_str,',')+1);
    
      IF record.FINDSET THEN
        req_str := COPYSTR(req_str,1,STRLEN(req_str)-STRLEN(buff_str)-1) +
                   '^' + FORMAT(record."Inventory Qty") + ',' +
                   COPYSTR(req_str,STRLEN(req_str)-STRLEN(buff_str)+1);
    END;
    
    record.SETFILTER("Inventory Code", buff_str);
    
    IF record.FINDSET THEN
      req_str += '^' + FORMAT(record."Inventory Qty");
    
  • shettarvikasshettarvikas Member Posts: 106
    Thanks Xypher, Thank you very much. Its working fine!!!
Sign In or Register to comment.