![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| -----DelphiMan |
|
|||
|
Unregistered |
Меня интересует как имея текстовый фаил
найти внём нужную ЛИНИЮ по 10-ти начальным символам строки и совершить над этой линией следующие действия: 1) Заменить 2) Переименовать 4) Сместить позицию (Вверх /Вниз) Конечно это можно былобы сделать открыв фаил в Какомнить Memo или RichEdite но поскольку размер файла очень большой то на его загрузку и сохранение уйдёт куча времени. |
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
FileSeek, BlockRead, BlockWrite.
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| -----DelphiMan |
|
|||
|
Unregistered |
Ну и как задать для FileSeek нужную строку ?
|
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
а что, размер линий разный?
тогда for i := 1 to 10 do ReadLn (f, s); после окончания цикла в s будет десятая строка. меняем её как нам надо. потом: for i := 1 to 9 do ReadLn (f, s); WriteLn (f, s); -------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
а, торможу. тебе ж надо не десятую, а по первым символам.
читай строки, для каждой делай Pos. -------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| -----DelphiMan |
|
|||
|
Unregistered |
Ну и как используя WriteLn сделать запись скажем
в серидине файла? |
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
делаешь в цикле ReadLn (f, s), пока не выполнится какое-то условие (не наступит "середина файла", к примеру), а потом делаешь WriteLn.
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| Alex |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 80 Всего: 162 |
А можно узнать, что вы называете большим файлом?
-------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
|||
|
||||
| RA |
|
||||
![]() Брутальный буратина ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3497 Регистрация: 31.3.2002 Где: Лес Репутация: 14 Всего: 115 |
Ошибка будет. Добавлено @ 21:02
Как я понял это когда размер файла больше Оперативной памяти |
||||
|
|||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
RAdmin, ты имеешь в виду Reset/Rewrite? не будет ;)
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 4 Всего: 110 |
открываем два файла (один из них исходный, другой - для результата)
читаем один по кусочкам вносим изменения пишем резуьтат во второй файл Добавлено @ 15:48 кстати, в виду больших объемов информации не помешало бы пользоваться системными функциями работы с файлами (я тестов не проводил, но по идее они должны быть быстрее) -------------------- qqq |
|||
|
||||
| Alex |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 80 Всего: 162 |
Нет ну всетаки какой файл по размеру?
-------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
alex-co, действительно
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| RA |
|
||||
![]() Брутальный буратина ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3497 Регистрация: 31.3.2002 Где: Лес Репутация: 14 Всего: 115 |
Ага, ибо либо одно либо другое. Если Rewrite то придётся весь фаил перезаписывать, а прикинь он весить будет около гига, ну а ресет сам знаешь что даёт Как вот такой вариант ?
|
||||
|
|||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
RAdmin, ты считаешь, что твой вариант будет нормально себя чувствовать при весе файла около гига?
нет, народ, для действительно больших файлов надо либо делать файл-маппинг, либо вообще читать напрямую диск. -------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| RA |
|
|||
![]() Брутальный буратина ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3497 Регистрация: 31.3.2002 Где: Лес Репутация: 14 Всего: 115 |
x77 ТормоjЮ
|
|||
|
||||
| Alex |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 80 Всего: 162 |
У меня такое впечатление, что ответ на вопрос интересует всех кроме автора вопроса
-------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
|||
|
||||
| ------DelphiMan |
|
|||
|
Unregistered |
Да нет я тут слежу за базаром но пока никто толком не ответил.
а насчёт большого размера то около гигабайта фаил. |
|||
|
||||
| Alex |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 80 Всего: 162 |
Если файл у тебя не превышает 2 гигов, то любой из выше приведенных способов тебе подойдет
-------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
|||
|
||||
| RA |
|
|||
![]() Брутальный буратина ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3497 Регистрация: 31.3.2002 Где: Лес Репутация: 14 Всего: 115 |
Да ты что, переписывать гигабайт этож вообще П****
|
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
Что значит:
1) заменить 2) переименовать Чем они отличаются ? и куда делось 3) ? Если имеется в виду, что нужно заменить строку типа: "abcdefg" на "klmnopqwertyiotiw", т.е. длина найденной строки может измениться, то это значит, что всю оставшуюся часть файла надо перемещать. Для больших файлов это будет убийство. Единственный приемлимый вариант в этом случае - создавать второй файл и в него писать новую инфу, а потом первый удалить... -------------------- С уважением, г-н Посол. |
|||
|
||||
| ------DelphiMan |
|
|||
|
Unregistered |
Посол, фаил текстовый так что ущерба не будет.
|
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
да какая нахрен разница, текстовый он или нет. ты что, думаешь, что текстовый файл храниться также, как и выводится - по строчкам? это та же последовательность байтов, в которой периодически встречаются символы возврата картеки и сдвига строки - #13#10. то, что ты видишь по строчно, на самом деле представляет собой непрерывную последовательность символов. в твоём случае, скорее всего, фрагментированную. и эта последовательность будет увеличиваться/уменьшаться.
я бы делал файл-маппинг. по крайней мере, работать будет относительно быстро. но поскольку этот "базар" ты "толковым" не считаешь, сделай, как советует p0s0l - пиши в новый файл. других вариантов я не вижу. работать стандартно, через те же stream'ы, - самоубийство. -------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |