Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.03.2019, 17:15   #1
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию Delphi - Прочитать метаданные с pdf построчно без дополнительных инструментов

Доброе время суток,
Есть pdf, там есть поле метаданных «/NC_ID(». В блокноте я его вижу. Думаю, дай я его прочту как txt, и поиском найду «/NC_ID(»

Код:
var
  LFileCertificate: TextFile;
  LIndex, L_Length, LInd: integer;
begin
  if OpenDialog1.Execute then
  begin
  AssignFile(LFileCertificate, OpenDialog1.FileName);
  Reset(LFileCertificate);
  while not Eof(LFileCertificate) do
   begin
   Readln(LFileCertificate, S);
    if Pos('/NC_ID(', S) <> 0 then
    begin
      LInd := Pos('/NC_ID(', S);
      showmessage(Copy(S, LInd, 20));
      abort;
    end;
   //ShowMessage(S);
   end;
   ShowMessage('close file');
   CloseFile(LFileCertificate);
  end;
end;
та не тут то было,
Данное поле находит, но при условии, что я в блокнете половину данных удалю, а мне это не подходит.
Почему «pos» не срабатывает на полном файле. Максимальная длинна «string =2 Гб». Этот параметр находится в конце файла.

Последний раз редактировалось KBO; 27.03.2019 в 17:19.
KBO вне форума Ответить с цитированием
Старый 27.03.2019, 17:37   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

не надо использовать TextFile, используйте, например, TFileStream
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.03.2019, 17:46   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Можно еще StringStream
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 27.03.2019 в 17:51.
Аватар вне форума Ответить с цитированием
Старый 28.03.2019, 01:35   #4
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
не надо использовать TextFile, используйте, например, TFileStream
никак не могу от чепухи в строке уйти
Код:
var
  FSO: TFileStream;
  s: string;
  q: ansistring;
  p: pansistring;
  LInd, LInd1:integer;
  BufferTB: TBytes;
  Buffer: PByte;
begin
  FSO:=TFileStream.Create('d:\ex2.pdf', fmOpenRead);
  LInd:=FSO.Size;
  SetLength(s,LInd);
  FSO.Seek(0,soFromBeginning);
  FSO.Read(Pointer(s)^,LInd);
  FSO.Free;
  LInd1 := Pos('/NC_ID(', s);
...
все время фигня в "s" пишется
KBO вне форума Ответить с цитированием
Старый 28.03.2019, 03:32   #5
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

Все оказалось намного проще с функцией "System.IOUtils.TFile.ReadAllText"

Последний раз редактировалось KBO; 28.03.2019 в 03:41.
KBO вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение построчно out of memory / Delphi XE4 Taras2018 Общие вопросы Delphi 11 24.02.2018 16:17
Метаданные Игорь232 Общие вопросы по Java, Java SE, Kotlin 0 27.04.2014 20:19
Сортировка построчно ValueListEditor Delphi Венгельс Помощь студентам 0 05.06.2011 17:26
Добавление или удаление дополнительных кнопок в панели инструментов проводника Windows triceratops Помощь студентам 0 01.12.2009 06:09
Как из юникодного текстового файла прочитать его построчно и неповторяющиеся слова ввести в ListBox? SkAndrew Общие вопросы Delphi 2 10.11.2008 22:14