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

Вниз

Помогите додумать ф-ю открытия 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;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.046 c
1-1095695552
volser
2004-09-20 19:52
2004.10.10
Редактирование ресурсов exe


8-1089992678
^FH^
2004-07-16 19:44
2004.10.10
размер файла JPEG


4-1093959708
Jiurasrasr
2004-08-31 17:41
2004.10.10
Как отключить эффект сворачивания окна?


4-1094025255
Alex870
2004-09-01 11:54
2004.10.10
Командный процессор


14-1095768383
SergeySEM
2004-09-21 16:06
2004.10.10
Какое сегодня число