Форум: "Основная";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];
ВнизПомогите додумать ф-ю открытия txt файла, и все его содерж. Найти похожие ветки
← →
Lexxx (2004-09-23 08:57) [0]Поместить в строковую переменную. Вот что сделал: (работает не коректно, но и ошибки не выдает)
function InsFile(filename : string): string;
var
TF: TextFile;
begin
AssignFile(TF, ExtractFileDir(ParamStr(0))+"\"+filename);
read(TF, Result);
CloseFile(TF);
end;
Заранее спасибо.
← →
kukuikar © (2004-09-23 09:05) [1]var
List: TStringList;
List: TStringList.Create;
List.LoadFromFile(ExtractFileDir(ParamStr(0))+"\"+filename);
А дальше List.Text и есть содержимое твоего текстового файла.
Не подойдет?
← →
Lexxx (2004-09-23 09:09) [2]Подойдет :)
так и делал до этого, а никак нельзя откалаться от TStringList? Или это ужасно сложно, и приходится считывать файл по символу до EOF?
← →
Gero © (2004-09-23 09:13) [3]
> Lexxx (23.09.04 08:57)
Ты из файла всегда четыре байта считываешь.
Если хочешь все, используй BlockRead + FileSize.
← →
kukuikar © (2004-09-23 09:19) [4]
> а никак нельзя откалаться от TStringList
А чем тебе StringList неугодил?
Сравни объем твоего кода и моего.
Борись за уменьшение объема исходных кодов.
Проще самому будет.
Или если кажется проще то делай так -->> Gero © [3]
← →
Lexxx (2004-09-23 09:29) [5]Тогда спасибо!!
Получилась так:function InsFile(filename : string): string;
var
List: TStringList;
begin
List:= TStringList.Create;
List.LoadFromFile(ExtractFileDir(ParamStr(0))+"\"+filename);
Result := List.Text;
List.Free;
end;
← →
Gero © (2004-09-23 09:35) [6]
> Борись за уменьшение объема исходных кодов.
А я-то раньше думал, что основным критерием является скорость, а не размер исходного кода.
Видимо, я ошибался...
← →
kukuikar © (2004-09-23 09:57) [7]
> А я-то раньше думал, что основным критерием является скорость,
> а не размер исходного кода.
> Видимо, я ошибался...
Основным критерием является оптимальный объем и оптимальная же скорость.
← →
Мастер © (2004-09-23 10:10) [8]> kukuikar © (23.09.04 09:57) [7]
Основным критерием является оптимальный объем и оптимальная
же скорость.
Да ну?
Объем исходников никак не влияет на оптимальность.
Основной критерий качества исходников - читабельность, структурированность.
Основной критерий качества исполняемых файлов - правильное выполнение предусмотренных техзаданием функций.
← →
kukuikar © (2004-09-23 10:26) [9]
> Мастер © (23.09.04 10:10) [8]
Верно!
← →
TUser © (2004-09-23 10:30) [10]
> Объем исходников никак не влияет на оптимальность.
>
> Основной критерий качества исходников - читабельность, структурированность.
В данном случае этот спор совершенно не нужен. Спосов [1] и понятнее, и чтабельнее, и исходник меньше, и работает быстрее, чем BlockRead"ы всякие.
← →
Romkin © (2004-09-23 10:32) [11]ЭЭЭ!!! А вдруг ошибка?!
function InsFile(filename : string): string;
var
List: TStringList;
begin
List:= TStringList.Create;
try
List.LoadFromFile(ExtractFileDir(ParamStr(0))+"\"+filename);
Result := List.Text;
finally
List.Free;
end;
end;
← →
Fay © (2004-09-23 10:53) [12]2 [11] Romkin © (23.09.04 10:32)
Если файл был создан (для примера) с флагом FILE_FLAG_DELETE_ON_CLOSE, то этот код не прокатит 8)
← →
Zhekson (2004-09-23 11:08) [13]Абалдеть. А есть ограничения на обьём StringList_a и стринговую переменную? Всмыле влезет туда предположим 500 MB текстовый файл?
← →
kukuikar © (2004-09-23 11:58) [14]
> туда предположим 500 MB текстовый файл?
Ты создавал такие файлы, или где-то видел?
Покажи!
← →
Anatoly Podgoretsky © (2004-09-23 12:03) [15]kukuikar © (23.09.04 11:58) [14]
К меня такие есть, логи моего домашнего апач сервера, иногда доходят до 1 гб в месяц
← →
panov © (2004-09-23 12:06) [16]>kukuikar © (23.09.04 11:58) [14]
Могу выслать исходник,
ufMain.pas - 963M
-)
← →
Anatoly Podgoretsky © (2004-09-23 12:09) [17]panov © (23.09.04 12:06) [16]
Ты лучше признайся удалось его откомпилировать или нет?
← →
Zhekson (2004-09-23 12:15) [18]>Anatoly Podgoretsky, panov
спасибо, что поддержали мой вопрос, хоть и с целью задать новый kuikar_у. А ответ на мой вопрос имеет место на достойное существование или он звучит примерно так:
"Ламерюга пришел, книги не читает, что ли? Такуюересть я не спрашивал даже до начала изучения Делфи."
← →
Erik1 © (2004-09-23 12:15) [19]Дожили, используем класс чтобы загузить содержание файла в переменую. А если он больше 64К то небудет работать твой код kukuikar! С любой точки зрения использование BlockRead предпочтительнее.
← →
panov © (2004-09-23 12:17) [20]>Anatoly Podgoretsky © (23.09.04 12:09) [17]
Нет, не удалось-)
← →
kukuikar © (2004-09-23 12:22) [21]все, опустили вы меня, мастера
(пойду пообедаю)
← →
Zhekson (2004-09-23 12:22) [22]Anatoly Podgoretsky, panov - Видать авторитеты.
Я им уже вопросов трыдцать задал, хоть бы почитали, что я там навозюкал.
← →
Zhekson (2004-09-23 12:49) [23]Удалено модератором
Примечание: офтопик
← →
Anatoly Podgoretsky © (2004-09-23 12:53) [24]А отвечать не на что, неясно что хочет сделать автор, по коду прочитать первую строку, как далее будут использоваться данные, а от этого зависит какой метод чтения оптимальнее не использовать, а например посмотрю как пример [1] отработает на моем лог файл в 1 гб.
Единственно что можно сказать по тому примеру так это то, что так писать не надо, а надо вместоList.LoadFromFile(ExtractFileDir(ParamStr(0))+"\"+filename);
писать
List.LoadFromFile(ExtractFilePath(Application.ExeName + Filename);
илиList.LoadFromFile(ExtractFilePath(ParamStr(0)} + Filename);
← →
П7 (2004-09-23 12:54) [25]
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:56) [26]П7 (23.09.04 12:54) [25]
Очень не эффективно и можно нарваться на нехватку памяти, поскольку бездарно.
← →
Zhekson (2004-09-23 13:01) [27]Удалено модератором
Примечание: офтопик
← →
П7 (2004-09-23 13:01) [28]
> Anatoly Podgoretsky © (23.09.04 12:56) [26]
Бездарно вообще придумывать такую функцию. Малоли какие файлы попадутся... А если точно знаешь, что размер файла не большой, то очень даже нормально.
И вообще:
Нехватка памяти происходит не мотому, что у меня нет дара писать ненужные функции, а потому, что эта функция сама в себе очень глупая и поддерживает эту самую нехватку по определению...
← →
Solo (2004-09-23 13:08) [29]Зачем через 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:10) [30]Удалено модератором
Примечание: офтопик
← →
П7 (2004-09-23 13:15) [31]Удалено модератором
Примечание: офтопик
← →
app © (2004-09-23 13:17) [32]Zhekson (23.09.04 13:10) [30]
Он не хамит, а правильно говорит, а вот ты последнее время очень часто не по теме в разных ветках.
Рискуешь.
← →
Zhekson (2004-09-23 13:30) [33]Удалено модератором
Примечание: на три часа
← →
SergP. (2004-09-23 13:47) [34]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;
← →
Fay © (2004-09-23 13:51) [35][12]
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.032 c