Задать вопрос
Kezzya
@Kezzya

Как парсить текстовик в delphi?

Есть текстовик, там названия книг, авторы, и количество страниц. Надо загрузить данные из текстовика в массив записей. Идея такая, сохраняю файл в переменную c типом ShortString бегу по текстовику и когда будет пробел, тогда идёт другое свойство записи ( Например, после автора шло название книги) Почти это реализовал, но застрял на моменте, как я буду брать строку для сохранения автора/название книги. Просто написать как у меня есть A[d].Author:= A[d].Author + output[c] ? Мне просто кажется это как-то всё через костыли, может я что-то не так делаю?
Код записи:
TBook = record
Pages: integer;
Title: ShortString;
Author: ShortString;
end;

Код функции загрузки из файла в массив записей
procedure TForm1.LoadBtn1Click(Sender: TObject);
var output: ShortString;
begin
assignfile(LoadF, 'LoadF.txt');
Reset(LoadF);
for d:=0 to Length(A) - 1 do
begin
Read(LoadF, output);
for c:=0 to Length(output) do
begin
if (output[c] = ' ') then count:= count + 1;
if (count = 1) then A[d].Author :=
end;
Read(LoadF, A[d].Author);
end;

closeFile(LoadF);
end;
  • Вопрос задан
  • 763 просмотра
Подписаться 1 Простой 3 комментария
Решения вопроса 2
IgorPI
@IgorPI
procedure TMainForm.ButtonClick(Sender: TObject);
var
 men: TMatchCollectionEnumerator;
begin
  men := TRegEx.Matches('one two three', '\w+').GetEnumerator;

  while men.MoveNext do
  begin
    men.Current.Value
  end;

  men.Free;
end;


Смекнули?

Units
- System.RegularExpressions
- System.Generics.Collections
Ответ написан
HemulGM
@HemulGM Куратор тега Delphi
Delphi Developer, сис. админ
TBook = package record
  Pages: integer;
  Title: string[255];
  Author: string[255];
end;
...
var Item: TBook;
begin
  while not Eof(LoadF) do
  begin
    Read(LoadF, Item);
    SetLength(MyBooks, Length(MyBooks)+1);
    MyBooks[Length(MyBooks)-1] := Item;
  end;
...


Записи с точным размером ты можешь без проблем записывать напрямую в файл и читать.

НО!
Этот способ слишком низкоуровневый, малопроизводительный и вообще не стоит такое использовать.
Для этого используют файловые бд или современные форматы хранения данных. Например JSON или XML.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
tsklab
@tsklab
Здесь отвечаю на вопросы.
как можно добавить к существующему массиву записи, ведь я не знаю сколько их будет
Используйте динамический массив (SetLength).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы