У меня возникли проблемы с анализом CSV из текстового файла, и мне было интересно, могли бы вы, ребята, помочь мне. До сих пор у меня есть следующее:REXX - Parse from CSV File
Файл CSV (DATA.txt) выглядит примерно так: в нем всегда будет 15 полей, разделенных запятой. Не все поля являются обязательными, поэтому некоторые из них будут заполнены, а некоторые - пустыми.
Seattle,Lastname,Firstname,DOB,SEX,etc,etc
Seattle,Lastname,Firstname,DOB,,etc,etc
Portland,Lastname,Firstname,DOB,SEX,,,etc
Portland,Lastname,Firstname,DOB,SEX,etc,etc
А вот мой REXX код
SOURCEFILE = "C:\DATA\DATA.TXT"
IF A=2 THEN DO COUNTER=1 TO LINES(SOURCEFILE)
PARSE VALUE LINEIN(SOURCEFILE) WITH CITY "," LAST_NAME "," FIRST_NAME "," MOM_NAME "," MIDDLE_NAME "," DAD_NAME "," DOB "," etc "," etc "," etc "," etc "," SEX "," etc "," etc
CALL SETCURSOR 4,23
CALL CREATEDATA
END
CREATEDATA:
CALL TYPE CITY
CALL PRESS TAB
CALL TYPE LAST_NAME
CALL PRESS TAB
CALL TYPE DATE(U)
CALL PRESS TAB
CALL TYPE FIRST_NAME
CALL PRESS TAB
CALL PRESS ENTER
RETURN
Я не уверен, если я должен использовать ARG или УАК при разборе, или если я правильно написал первые две строки. Я знаю, что моя функция CREATEDATA работает правильно, потому что я получаю «CITY», но не анализируемое значение. Любая помощь будет очень высоко ценится. Спасибо!
Согласно книге Коулислава Rexx, встроенная функция LINES может возвращать количество строк в файле, на который делается ссылка, или, если это невозможно определить, значение «1», где значение ненулевого счета будет соответствовать в противном случае - «0». Я использую ooRexx на окнах совсем немного и могу подтвердить, что ooRexx не считает все строки, он просто возвращает 0/1. Я использую следующее для чтения файлов по одной строке за раз: DO WHILE LINES (filename)> 0; PARINE VALUE LINEIN (имя файла) с ...; END – NealB
Результат 'Lines()' зависит от реализации. Некоторые реализации возвращают счет, другие - только 1 или 0, как вы заметили. Именно поэтому я предпочитаю загружать стебель: 'Lines.0' является фактическим счетом. –