Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];

Вниз

TFileStream.Create или еще чего?   Найти похожие ветки 

 
Pavelkq   (2004-12-27 09:18) [0]

Пытаюсь открывать вордовский файл. Чтение, как обычный текстовый файл не прокатывает. Пробую следующее:
procedure TForm1.Button1Click(Sender: TObject);
var name: string;
   S: TFileStream;
   Reader: TReader;
begin
 Memo1.Lines.Clear;
 if Form1.OpenDialog1.Execute then
   name := OpenDialog1.FileName;
 if name="" then exit;

 S:=TFileStream.Create(name,fmOpenRead);
 Reader := TReader.Create (S, 1024);
 Reader.ReadListBegin;
 while not Reader.EndOfList do
   Memo1.Lines.Add (Reader.ReadString);

 Reader.ReadListEnd;
 Reader.Destroy;
 S.Destroy;
end;

 Все компилируется, но при выполнении (когда уже выбран файл) вылетает ошибка с сообщением Invalid property value.
 Предполагаю, что тут объект TReader плохо подходит. А что делать? Мне нужно просто считать в строковую переменную весь набор символов для дальнейшего анализа (можно за несколько циклов, т.е. кусками).


 
Рамиль ©   (2004-12-27 09:27) [1]

Если тебе нужен текст, то читай через Word.


 
Pavelkq   (2004-12-27 09:35) [2]

Знаешь сколько времени ворд открывается? А если файлов 1500? А мне нужно вынуть всего лишь свойства.
 В общем, мне нужен любой метод чтения набора символов (или их кодов) можно даже по одному.


 
Рамиль ©   (2004-12-27 09:58) [3]

Pavelkq   (27.12.04 9:35) [2]
А зачем Word для каждого файла открывать?

А зачем тебе TReader понадобился? Он здесь совсем не к месту.
Используй TFileStream.Read


 
Pavelkq   (2004-12-27 10:01) [4]

Попробовал из справки пример:
procedure TForm1.Button1Click(Sender: TObject);
var
 H: Integer;
 iFileLength: Integer;
 iBytesRead: Integer;
 Buffer: PChar;
 i: Integer;
begin
 if OpenDialog1.Execute then
 begin
   try
     H := FileOpen(OpenDialog1.FileName, fmOpenRead);
     iFileLength := FileSeek(H,0,2);
     FileSeek(H,0,0);
     Buffer := PChar(AllocMem(iFileLength + 1));
     iBytesRead := FileRead(H, Buffer, iFileLength);
     FileClose(H);

     for i := 0 to iBytesRead-1 do
     begin
       Memo1.Lines.Add(String(Buffer[i]));
       Memo1.Lines.Add(IntToStr(Integer(Buffer[i])));
     end;
   finally
     FreeMem(Buffer);
   end;
 end;
end;


 На строке передачи в мемо все вылетает.

TFileStream.Read пробовал, но тоже не пойму до конца, как его юзать. Вот бы кусок живого кода!


 
Рамиль ©   (2004-12-27 10:19) [5]

Pavelkq   (27.12.04 10:01) [4]
Вот бы кусок живого кода!

Пожалуйста:)

var
 F: TFileStream;
 s: string;

 F := TFileStream.Create("C:\1.doc", fmOpenRead);
 SetLength(s, F.Size);
 F.Read(s[1], F.Size);

Но только ответственность за интерпретацию полностью на тебе.


 
Pavelkq   (2004-12-27 10:30) [6]

Сработало без ошибок, но после выполнения переменная S оказалась пустой. Очевидно, то, что попало из файла в память содержит #0, то интерпретируется, как конец. А вот до метода Read там были пустые данные. А без PCharа нельзя? Или как обойти этот #0?


 
Плохиш ©   (2004-12-27 10:41) [7]

array of byte


 
Рамиль ©   (2004-12-27 10:45) [8]

s[i] считает, потеряется до #0 если копировать присвоением в другую строку.
Или как
Плохиш ©   (27.12.04 10:41) [7]


 
Pavelkq   (2004-12-27 12:14) [9]

Ура, получилось и то и другое! Просто если просить вывести переменную S, как string, она выводит пустоту, т.к. не успев начаться заканчивается. А если в цикле выводить по одному символу, то там все на месте!
 Кстати, с байтом тоже все проходит на ура!
 Спасибо!



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.048 c
1-1104692206
TechnoDreamer
2005-01-02 21:56
2005.01.16
Добавление элемента в TreeView без потери сортировки


14-1104165291
iZEN
2004-12-27 19:34
2005.01.16
Оцените дизайн сайта, пожалуйста.


14-1104315639
MAINUSER
2004-12-29 13:20
2005.01.16
ПРОГРАММИСТЫ ОБЪЕДИНЯЙТЕСЬ


1-1104212175
Mate_ru
2004-12-28 08:36
2005.01.16
параметры


6-1098683509
OlegM
2004-10-25 09:51
2005.01.16
Как узнать с какого компа в сети подключаются к ресурсу на машине





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский