![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите додумать ф-ю открытия txt файла, и все его содерж.
Lexxx © (2004-09-23 08:57:00)Поместить в строковую переменную. Вот что сделал: (работает не коректно, но и ошибки не выдает)
function InsFile(filename : string): string;
var
TF: TextFile;
begin
AssignFile(TF, ExtractFileDir(ParamStr(0))+'\'+filename);
read(TF, Result);
CloseFile(TF);
end;
Заранее спасибо.
Fay (2004-09-23 13:51:00) [1][12]
SergP. (2004-09-23 13:47:00) [2]function LoadFromFile(const Filename:string):string;
var
SizeStr:integer;
begin
with TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite) do
try
SizeStr := Size - Position;
SetString(Result, nil, SizeStr);
Read(Pointer(Result)^, SizeStr);
finally
Free;
end;
end;
Zhekson (2004-09-23 13:30:00) [3]Удалено модератором
Примечание: на три часа
app (2004-09-23 13:17:00) [4]Zhekson (23.09.04 13:10) [30]
Он не хамит, а правильно говорит, а вот ты последнее время очень часто не по теме в разных ветках.
Рискуешь.
П7 (2004-09-23 13:15:00) [5]Удалено модератором
Примечание: офтопик
Zhekson (2004-09-23 13:10:00) [6]Удалено модератором
Примечание: офтопик
Solo (2004-09-23 13:08:00) [7]Зачем через Assign или StringList? Тем более, что эти варианты не позволят прочитать заблокированный другим софтом файл. Сделай лучше через API.
var
iFileHandle,iFileLength,iBytesRead:integer;
pszBuffer:PChar;
begin
try
iFileHandle := FileOpen('имя файла', fmShareDenyNone);
iFileLength := FileSeek(iFileHandle,0,2);
FileSeek(iFileHandle,0,0);
GetMem(pszBuffer, iFileLength+1);
iBytesRead := FileRead(iFileHandle, pszBuffer^, iFileLength);
//дальше работай, как с обычным pchar
//Например: LastLine:=Copy(pszBuffer,LastDelimiter(#10,pszBuffer)+1,Length(pszBuffer));
finally
FileClose(iFileHandle);
end;
end;
можешь вместо iFileLength использовать другое число считываемых байт.
что возвращать смотри сам (хоть размер файла, хоть содержимое, хоть кусок данных)
Удачи.
Zhekson (2004-09-23 13:01:00) [8]Удалено модератором
Примечание: офтопик
П7 (2004-09-23 13:01:00) [9]
> Anatoly Podgoretsky © (23.09.04 12:56) [26]
Бездарно вообще придумывать такую функцию. Малоли какие файлы попадутся... А если точно знаешь, что размер файла не большой, то очень даже нормально.
И вообще:
Нехватка памяти происходит не мотому, что у меня нет дара писать ненужные функции, а потому, что эта функция сама в себе очень глупая и поддерживает эту самую нехватку по определению...
Anatoly Podgoretsky (2004-09-23 12:56:00) [10]П7 (23.09.04 12:54) [25]
Очень не эффективно и можно нарваться на нехватку памяти, поскольку бездарно.
П7 (2004-09-23 12:54:00) [11]
function GetFileData( FileName : string ) : string;
var
f : TextFile;
buf : string;
begin
AssignFile( f, FileName );
Reset( f );
while not EOF( f ) do
begin
ReadLn( f, buf );
if Result <> '' then Result := Result + #13#10; // или #10#13 уже не помню
Result := Result + buf;
end;
CloseFile( f );
end;
Это?
Anatoly Podgoretsky (2004-09-23 12:53:00) [12]А отвечать не на что, неясно что хочет сделать автор, по коду прочитать первую строку, как далее будут использоваться данные, а от этого зависит какой метод чтения оптимальнее не использовать, а например посмотрю как пример [1] отработает на моем лог файл в 1 гб.
Единственно что можно сказать по тому примеру так это то, что так писать не надо, а надо вместо
List.LoadFromFile(ExtractFileDir(ParamStr(0))+'\'+filename);
писать
List.LoadFromFile(ExtractFilePath(Application.ExeName + Filename);
или
List.LoadFromFile(ExtractFilePath(ParamStr(0)} + Filename);
Zhekson (2004-09-23 12:49:00) [13]Удалено модератором
Примечание: офтопик
Zhekson (2004-09-23 12:22:00) [14]Anatoly Podgoretsky, panov - Видать авторитеты.
Я им уже вопросов трыдцать задал, хоть бы почитали, что я там навозюкал.
kukuikar (2004-09-23 12:22:00) [15]все, опустили вы меня, мастера
(пойду пообедаю)
panov (2004-09-23 12:17:00) [16]>Anatoly Podgoretsky © (23.09.04 12:09) [17]
Нет, не удалось-)
Zhekson (2004-09-23 12:15:00) [17]>Anatoly Podgoretsky, panov
спасибо, что поддержали мой вопрос, хоть и с целью задать новый kuikar_у. А ответ на мой вопрос имеет место на достойное существование или он звучит примерно так:
"Ламерюга пришел, книги не читает, что ли? Такуюересть я не спрашивал даже до начала изучения Делфи."
Erik1 (2004-09-23 12:15:00) [18]Дожили, используем класс чтобы загузить содержание файла в переменую. А если он больше 64К то небудет работать твой код kukuikar! С любой точки зрения использование BlockRead предпочтительнее.
Anatoly Podgoretsky (2004-09-23 12:09:00) [19]panov © (23.09.04 12:06) [16]
Ты лучше признайся удалось его откомпилировать или нет?
panov (2004-09-23 12:06:00) [20]>kukuikar © (23.09.04 11:58) [14]
Могу выслать исходник,
ufMain.pas - 963M
-)