Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.05;
Скачать: CL | DM;

Вниз

FileOpen   Найти похожие ветки 

 
Лохматый ©   (2002-08-21 10:13) [0]

Господа! Пардон за назойливость, но очень требуется помощь. Итак... Существует ли возможность построчно читать данные из текстового файла, открытого командой FileOpen(FileName, fmOpenRead)?


 
Tokha ©   (2002-08-21 10:23) [1]


Не проще ли для текстового файла воспользоваться:


procedure ReadByString;
var
F : TextFile;
SomeString : string;
begin
...
AssignFile(F, "filename.txt");
Reset(F);
...
Readln(F, SomeString);
...
end;


 
Лохматый ©   (2002-08-21 10:35) [2]

2Tokha
Не проще. Поскольку файл открыт для записи другой программой :(


 
Turalyon ©   (2002-08-21 10:47) [3]

var
StList : TStringList;

StList := TStringList.create;
try
StList.LoadFromFile("filename");
// здесь берешь построчно что тебе надо из StringList-а
finally
Msg.Free;

На сколько я помню... так можно читать даже из открытого файла..
Посмотри ФАК на этом сайте, там было что то о чтение из открыого фалйа...


 
Лохматый ©   (2002-08-21 11:05) [4]

2Turalyon
Увы...: Project ... raised exception class EFOpenError with message "Cannot open file ..."


 
Turalyon ©   (2002-08-21 11:12) [5]

Вот нашел в ФАКе почитай... может поможет...
http://delphi.mastak.ru/cgi-bin/faq.pl?look=1&id=988620750&n=15


 
Anatoly Podgoretsky ©   (2002-08-21 11:18) [6]

Построчно нет, это для двоичных файлов, надо или писать свою оболочку или загнать все строки в StringList тогда сможешь ими оперировать как со строками


 
Alx2 ©   (2002-08-21 11:33) [7]

Рассмотри подробнее, что сидит в типе text. может быть, удастся подменить хэндл и после этого начать работать с readln...


 
Лохматый ©   (2002-08-21 11:49) [8]

2Turalyon
К сожалению, не помогло. Спасибо за участие.

2Anatoly Podgoretsky
Своя оболочка - это слишком радикальный подход в данном случае ;) А вот каким образом загнать строки в StringList, имея хэндл файла? Будьте любезны чуть подробнее, если не в напряг...


 
Alx2 ©   (2002-08-21 11:55) [9]

За открытие файла отвечает следущее:
function TextOpen(var t: TTextRec): Integer;
ее код можно посмотреть в rtl.

обрати внимание на структуру (то же самое, что и text):

{ Text file record structure used for Text files }
PTextBuf = ^TTextBuf;
TTextBuf = array[0..127] of Char;
TTextRec = packed record (* must match the size the compiler generates: 460 bytes *)
Handle: Integer; (* must overlay with TFileRec *)
Mode: Word;
Flags: Word;
BufSize: Cardinal;
BufPos: Cardinal;
BufEnd: Cardinal;
BufPtr: PChar;
OpenFunc: Pointer;
InOutFunc: Pointer;
FlushFunc: Pointer;
CloseFunc: Pointer;
UserData: array[1..32] of Byte;
Name: array[0..259] of Char;
Buffer: TTextBuf;
end;

Вообще, можно подсунуть свой вариант для TextOpen и открыть файл "по-своему". Либо все-таки подменить handle.


 
Skier ©   (2002-08-21 11:56) [10]

>Лохматый
А зачем хэндл файла?
Достаточно имени StringList.LoadFromFile(...)


 
Лохматый ©   (2002-08-21 12:17) [11]

2Skier
Да не грузится он!!! Поскольку уже открыт


 
Erik Ivanov   (2002-08-21 12:48) [12]

TFileStream.Create(const FileName: string; Mode: Word);
Mode = fmOpenRead


 
Лохматый ©   (2002-08-23 10:14) [13]

Народ! Выручайте!
Файл нормально открывается только командой FileOpen. Соответственно, получаю хэндл файла. Каким образом, используя его, забросить все строки в StringList или Memo?


 
Anatoly Podgoretsky ©   (2002-08-23 10:22) [14]

Загонять надо не методами StringList а любыми другими, которые позволяют указывать режим доступа, а вот результат можно поместить в StringList.Text


 
Alex4444444444   (2002-08-23 11:30) [15]


StringList.Text := FileReadSTring("MyFile");

function FileReadString(const Path: string): string;
var Handle: integer;
Size: integer;
begin
Result := "";
// Size := 0;
Handle := FileOpen(Path, fmOpenRead or fmShareDenyNone);
if Handle <= 0 then Exit;
Size := FileSeek(Handle, 0, 2);
if Size > 0 then begin
SetString(Result, nil, Size);
FileSeek(Handle, 0, 0);
if FileRead(Handle, Result[1], Size) <> Size
then Result := "";
end;
FileClose(Handle);
end;


 
Лохматый ©   (2002-08-23 11:50) [16]

Всем ПАСИ-И-И-БА !!!
Особенно Alex4444444444 ;)



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

Текущий архив: 2002.09.05;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.016 c
1-14071
cutter-pro
2002-08-22 14:19
2002.09.05
КАТАСТРОФА С ОКРУГЛЕНИЕМ !!! :(


1-14131
FarmaZet
2002-08-22 21:32
2002.09.05
Rich Editik ! ?


3-13878
Slaviq
2002-08-16 15:52
2002.09.05
Query


1-14106
den_dnepr
2002-08-23 17:11
2002.09.05
Version Info


1-14145
^Sanya
2002-08-24 17:07
2002.09.05
TStringGrid