Рекомендации по чтению и синтаксическому анализу текстового файла с фиксированной шириной с использованием Delphi - PullRequest
2 голосов
/ 22 марта 2010

Какой лучший способ прочитать и проанализировать текстовый файл с фиксированной шириной, используя Delphi?

существует ли какой-либо компонент для этого?

спасибо заранее.

Ответы [ 3 ]

5 голосов
/ 22 марта 2010

Если под чтением вы имеете в виду анализ, попробуйте использовать TStringList. Позвоните TStringList.LoadFromFile, и вы получите список отдельных линий. Затем вы можете перейти к каждой отдельной строке и разобрать ее в записи или классе на основе различных столбцов фиксированной длины в строке. Проверьте функцию копирования, чтобы сделать это проще.

Трудно быть более конкретным без каких-либо подробностей о том, что вы пытаетесь сделать, но это общая идея.

2 голосов
/ 22 марта 2010

Если его фиксированная ширина и ansi, вы можете использовать потоки для чтения в запись, содержащую поля, состоящие из массива ansichar.

type
  rTest = record
    Field1 : array[1..12] of ansichar;
    Field2 : array[1..02] of ansichar;
    CRLF   : array[1..02] of ansichar;
  end;

var
  // Sample record for testing.
  Test1 : rTest = (Field1 : '123456789012'; Field2: 'AB'; CRLF: ^M+^J);

procedure TForm1.Button1Click(Sender: TObject);
var
  St : tStream;
  rdest : rTest;
  SVar : string;
begin
  St := TMemoryStream.Create;
  // write the record from the constant 
  st.Write(Test1,SizeOf(rTest));
  st.Seek(0,soFromBeginning);
  // read the record from the stream
  St.Read(rDest,SizeOf(rTest));
  // pull out field 1 and display
  SVar := Copy(rDest.Field1,1,12);
  ShowMessage(SVar);
  // pull out field 2 and display
  SVar := Copy(rDest.Field2,1,2);
  ShowMessage(SVar);
  st.free;
end;
0 голосов
/ 22 марта 2010

Вы можете сделать с помощью простого TMemo или TRichEdit. Но компонент текстового редактора # 1 (?) Для Delphi, я полагаю, является TSynEdit .

...