Форум: "Основная";
Текущий архив: 2003.09.15;
Скачать: [xml.tar.bz2];
ВнизКак обратиться к заархивированному файлу Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.017 c