' This program will parse a Standard Comma Quote Delimited file ' ' Written by Bill Haesslein in IBasic Pro on 2006-05-05 ' Converted to EBasic 2008-11-21 ' ' Input Test Data files look like: ' "Doe, John",1313 Mockingbird Lane,"Dallas, Tx 75123" ' "Smith, Sam","13 Avenue """A"","Washington, DC 01000" ' "Date","Pupil","Grade" ' "25 May","Bloggs, Fred","C" ' "25 May","Doe, Jane","B" ' "15 July","Bloggs, Fred","A" ' "15 April","Muniz, Alvin ""Hank""","A" ' 1997,Ford,E350,"Super, ""luxurious"" truck" ' "Doe, John",1313 Mockingbird Lane,"Dallas, Tx 75123" ' "Smith, Sam","13 Avenue """A"","Washington, DC 01000" ' 1997,Ford,E350,"ac, abs, moon",3000.00 ' 1999,Chevy,,"Venture ""Extended Edition""","",4900.00 ' 1999,Chevy,"Venture ""Extended Edition, Very Large""",,5000.00 ' ' Output Returned: Changed tabs to be ' - ' ' Doe, John - 1313 Mockingbird Lane - Dallas, Tx 75123 ' Smith, Sam - 13 Avenue "A" - Washington, DC 01000 ' Date - Pupil - Grade ' 25 May - Bloggs, Fred - C ' 25 May - Doe, Jane - B ' 15 July - Bloggs, Fred - A ' 15 April - Muniz, Alvin "Hank" - A ' 1997 - Ford - E350 - Super, "luxurious" truck ' Doe, John - 1313 Mockingbird Lane - Dallas, Tx 75123 ' Smith, Sam - 13 Avenue "A" - Washington, DC 01000 ' 1997 - Ford - E350 - ac, abs, moon - 3000.00 ' 1999 - Chevy - - Venture "Extended Edition" - - 4900.00 ' 1999 - Chevy - Venture "Extended Edition, Very Large" - - 5000.00 ' $main DEF version$="1.2":STRING AUTODEFINE "off" DEF rtn:STRING DEF delim, File_Path, filter, filename:STRING DEF I_file,O_file:FILE DEF max, finished, i, j, all_ok, lines:INT DEF File_Name_I, File_Name_O:STRING DEF Field_Values[30], Returned_Value:STRING DEF line_in[1500], line_out[1500]:ISTRING all_ok = 1 delim = "\t" File_Path = "C:\\Users\\bill\\Documents\\!Temp" filter = "Input File (*.csv)|*.csv|IMP Files (*.imp)|*.imp|All Files (*.*)|*.*||" filename = FILEREQUEST("Select Input File",0,1,filter,"csv",0, File_Path) IF (filename = "") THEN GOTO Final File_Name_I = filename filter = "Output File (*.TXT)|*.txt|All Files (*.*)|*.*||" filename = filerequest("Select Output File",0,0,filter,"txt",0, File_Path) 'filename = MID$(filename,1,LEN(filename)-3)+"TXT" IF (filename = "") THEN GOTO Final File_Name_O = filename max = 30 j = -1 lines = 0 OPENCONSOLE IF (OPENFILE(I_file,File_Name_I,"R") <> 0) PRINT "File: ", File_Name_I, " Not able to Open Input" GOTO Aborted ENDIF IF (OPENFILE(O_file,File_Name_O,"W") <> 0) PRINT "File: ", File_Name_O, " Not able to Open Output" GOTO Aborted ENDIF WHILE (READ(I_file,line_in) = 0) lines++ 'WRITE O_file, """ CLOSECONSOLE END '------------------------------------------------------------------ SUB Comma_Delimited_Parser(Original:POINTER, Returned:POINTER), INT '------------------------------------------------------------------ DEF cchar, pchar, char2, fldn, c, q:STRING DEF q_flag, i, l:INT ' =" q = CHR$(34) ' =, c = CHR$(44) l = LEN(#Original) q_flag = 0 pchar = "" fldn = "" PRINT #Original IF MID$(#Original,1,1) = q THEN q_flag = 1 ELSE q_flag = 0 FOR i = 1 TO l cchar = MID$(#Original,i,1) ' if current char = , and not a quoted string IF (cchar = c) AND (q_flag = 0) #Original = MID$(#Original,i+1) #Returned = fldn ' return 0 means not done with string RETURN 0 ENDIF IF q_flag = 1 AND cchar = q ELSE fldn += cchar ENDIF IF cchar = q AND i <> 1 ' old programmers trick: start q_flag at 0, then q_flag = 1 - 0 = 1, or q_flag = 1 - 1 = 0 ' or if flag is on (1), turn off (0), if off (0) then turn on (1) q_flag = 1 - q_flag ENDIF IF lines = 10 print i," ",cchar," ",pchar," ",fldn ENDIF pchar = cchar NEXT i #Original = "" #Returned = fldn ' return 1 means string has been completely delimited RETURN 1 ENDSUB