30.06.2009, 14:41 | #1 |
Участник
|
Nav 4.0
обнаружилась проблема при разборе текстового файла по полям (не датапорт). разделители полей = табуляторы (смотрел в других редакторах) код 9 TabChar := 9; InFile.TEXTMODE(TRUE); IF InFile.OPEN(InFileText) THEN BEGIN REPEAT nRead := InFile.READ(txtString); IF nRead <> 0 THEN BEGIN FOR i := 1 TO STRLEN(txtString) DO BEGIN Chr := txtString[i]; IF Chr = TabChar THEN newItem := TRUE - условие не выполняется никогда ..................... в дебагере Chr = ' '- пробел, если в файле символ TAB. То есть похоже Nav заменяет символ TAB на пробел при такой конструкции чтения текстового файла.... Как решить? |
|
01.07.2009, 08:07 | #2 |
Участник
|
Сталкивался с такой проблемой. Используйте потоки, там такой проблемы нет. Примерно так:
Код: myFile.OPEN(inFileName); myFile.CREATEINSTREAM(inFileStream); WHILE NOT inFileStream.EOS DO BEGIN myBytesRead := inFileStream.READTEXT(TextBuffer, 900); IF myBytesRead > 0 THEN BEGIN Обрабатываем TextBuffer END; END; myFile.CLOSE; inFileStream - InStream. |
|
01.07.2009, 08:27 | #3 |
Участник
|
Еще хочу предостеречь от следующей ошибки.
В справке написано: Цитата:
READ (File)READ (File)
Use this function to read from an ASCII or binary file. [Read] := File.READ(Variable) Read Data type: integer This optional return value tells you the number of bytes read. File Data type: file Use this variable to refer to the file. Variable Data type: any The destination variable. Comments If TEXTMODE (File) is set to TRUE, the system reads a line of text from the file, evaluates it and sets the variable equal to the result. If TEXTMODE is set to FALSE, the system determines the number of bytes to read based on the size of the variable. Т.е. при попытке прочитать файл со строкой qwertyuiopqwertyuiop кодом: Код: myFile.TEXTMODE(FALSE); myFile.OPEN('C:\test.dat'); BytesRead := myFile.READ(myBufer10); MESSAGE('%1, %2, %3', BytesRead, myBufer10, MAXSTRLEN(myBufer10)); myFile.CLOSE; Цитата:
Текст 'qwertyuiopq' в READ параметр но. 1 слишком длинный.
|
|
01.07.2009, 12:06 | #4 |
Участник
|
спасибо. да все решил через потоки.
1) через потоки сначала изменил разделяющий символ с TAB на | (в бинарном виде) 2) потом уже разобрал по полям в обычном текстовом режиме. |
|