Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-1096272465
Serge
2004-09-27 12:07
2004.10.10
Design-Time controling


3-1094803058
Snip
2004-09-10 11:57
2004.10.10
DLL и IB


1-1095781449
SergeyRu
2004-09-21 19:44
2004.10.10
Подключение справки от компоненты к Делфи 6


3-1094836526
BigError
2004-09-10 21:15
2004.10.10
MySQL: VarChar -> Decimal


14-1095918599
Lexxx
2004-09-23 09:49
2004.10.10
Мастера, подскажите, можно ли в XP Home поставить IIS 5.0?





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