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

Вниз

Как обратиться к заархивированному файлу   Найти похожие ветки 

 
AndreySoft ©   (2003-09-03 00:41) [0]

У меня такой вопрос: Например, есть какой-то текстовый файл 1.txt в нём находится некоторое количество строк. Программно считать из этого файла строки например в компонент RichEdit1 можно таким образом:
...
AssignFile(F, "1.txt");
Reset(F);
while not EOF(F) do
begin
Readln(F, S);
RichEdit1.Lines.Add(S);
end;
CloseFile(F);

...
Меня же интересует как обратиться к этому же файлу предварительно его упаковав, и вообще возможно ли такое?


 
Zergling ©   (2003-09-03 05:58) [1]

В FAQ или статьях есть пример использования UnRar.DLL. А в кладовке кажися гдето есть простенький алгоритм паковки.


 
Song ©   (2003-09-03 08:31) [2]


> ...
> AssignFile(F, "1.txt");
> Reset(F);
> while not EOF(F) do
> begin
> Readln(F, S);
> RichEdit1.Lines.Add(S);
> end;
> CloseFile(F);
> ...


:)

RichEdit1.Lines.LoadFromFile("1.txt");


 
Song ©   (2003-09-03 08:31) [3]


> ...
> AssignFile(F, "1.txt");
> Reset(F);
> while not EOF(F) do
> begin
> Readln(F, S);
> RichEdit1.Lines.Add(S);
> end;
> CloseFile(F);
> ...


:)

RichEdit1.Lines.LoadFromFile("1.txt");


 
AndreySoft ©   (2003-09-03 10:35) [4]

>Song ©
Ну, и зачем мне надо было узазывать на то, что загрузить текстовый файл можно одной строчкой. Вы решили меня этим удивить? А мне не сгодится такой вариант, т.к. я считываю не весь файл, а пока не встретится определённая строка. Может научите одной строкой осуществить такую операцию?


 
Palladin ©   (2003-09-03 10:37) [5]

Что то не видно тут у тебя что ты до определенной строки считываешь.


 
AndreySoft ©   (2003-09-03 10:42) [6]

А вот так видно?

...
AssignFile(F, "1.txt");
Reset(F);
while not EOF(F) do
begin
Readln(F, S);
RichEdit1.Lines.Add(S);
if S="Всё что написано дальше, не читать" then begin
CloseFile(F); exit; end;
end;
CloseFile(F);
end;

...


 
Palladin ©   (2003-09-03 10:49) [7]

Так видно, очень даже. Просто детализировать в начале надо, а не в конце. Маленький совет: досрочный выход из цикла можно осуществить посредством break; тогда
if S="Всё что написано дальше, не читать" then begin
CloseFile(F); exit; end;

превращается в
if S="Всё что написано дальше, не читать" then break;
что является более корректным и избавит от последующей, трудно уловимой для начинающих, ошибки, когда вставляешь операторы после CloseFile(F), а они не исполняются.
По поводу чтения из архивов. Ну я скажу так: есть два способа. Читатать и распаковывать на лету или же пользоватся внешними утилитами для разархивации в какой-нибудь временный файл. После чтения его можно будет удалить. Второй вариант попроще. Хотя кому как. Первый вариант можно осуществить использованием компонента ZipTV. Ищи. По моему есть на www.torry.net


 
AndreySoft ©   (2003-09-03 10:53) [8]

OK! Спасибо!


 
AndreySoft ©   (2003-09-03 10:53) [9]

OK! Спасибо!


 
Андрей Сенченко ©   (2003-09-03 11:09) [10]

Palladin © (03.09.03 10:49) [7]

Стоит наверное упомянуть, что ZipTV - платный набор компонентов.
И использование его фриварной версии имеет определенные ограничения.
Можно конечно найти кряк, но именно в этом случае это ну очень нехорошо по отношению к разработчикам. Уж очень приятный набор.

Song © (03.09.03 08:31) [3]

Давно хотел спросить:
А в чем разница между

RichEdit1.Lines.LoadFromFile("1.txt");

и

AssignFile(F, "1.txt");
...
CloseFile(F);


Кроме того, что LoadFromFile - это фактически LoadFromStream ( по исходникам ). Использование или неиспользование FileStream - так ли уж существенно при элементарных операциях типа заполнения полей RichEdit-а и прочих компонентов.


 
Palladin ©   (2003-09-03 11:16) [11]


> Андрей Сенченко © (03.09.03 11:09) [10]

Угу, просто я натыкался на старую версию, она помоему тогда еще бесплатной была.


> А в чем разница между

Разница в количестве написанного кода :) Вот именно в таком случае, когда нужно читать не все, LoadFromFile не пройдет. А так этот метод за счет именно FileRead и фактически примитивного парсинга на строки читает быстрей чем Readln. Но на копейки. Даже на сотые доли копеек. А для чтения огромных массивов текста это, даже можно сказать, вредно. Ибо это уже издевательство на машиной и пользователем. При больших файлах оптимальней читать в память фрагментами. А еще лучше при первом проходе по файлу создать индекс строк и при последующем чтении уже работать с индексом для доступа к строкам.



Страницы: 1 вся ветка

Текущий архив: 2003.09.15;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.019 c
1-48524
Марат
2003-09-04 14:49
2003.09.15
Формы


1-48496
jack128
2003-09-02 19:11
2003.09.15
Инициализация переменных


1-48510
____Илья
2003-09-02 16:25
2003.09.15
Переход от begin к end


1-48599
StrinGrid
2003-09-03 16:36
2003.09.15
Программно выделим ячейку


3-48450
Nestor
2003-08-26 14:44
2003.09.15
Проблема при выводе в Label