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

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.008 c
1-14114
delphiguru
2002-08-23 19:30
2002.09.05
WinExec и ShellExecute


1-14057
kofman
2002-08-24 00:11
2002.09.05
Как изменить размер формы если ее BorderStyle= bsNone


3-13892
Luchkin
2002-08-05 16:06
2002.09.05
Отображение/редактирование живых запросов (D6+MSSQL+ADO)


1-14164
^Sanya
2002-08-25 00:43
2002.09.05
StringGrid...


14-14246
Malder
2002-08-07 00:22
2002.09.05
UBPFD





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский