13.02.2011, 15:35 | #1 (permalink) |
Member
Регистрация: 13.02.2011
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Редактирование текстового файла в Pascal
Скажу сразу, опыт программирования минимален и все давно забыто Возникла необходимость отредактировать файл txt большого размера (примерно 300 мб). Нужно из этого файла убрать строки, не содержащие некое слово (или наоборот, перенести строки с этим словом в новый текстовый файл). Вручную это не осилить. Поэтому 3 вопроса: 1. Где лучше пытаться написать программу - в Pascal или Delphi, или это не важно? 2. Сможет ли написанная программа отредактировать такой большой текстовый файл? 3. Написание программы остановилось на этапе указания нужного текстового файла, а дальше не могу придумать. Помогите, плиз, хотя бы направление мыслей задайте... |
13.02.2011, 15:35 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Зачастую проблемы у людей очень похожие, обратите внимание на это Редактирование документа в фотошопе Редактирование InstallShield Wizard Считывание текстового файла команда: Windows Type Редактирование снимков с мобильного (2megapixels) в Photoshop CS3 |
13.02.2011, 16:07 | #3 (permalink) |
Member
Регистрация: 13.02.2011
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
К сожалению, файл я приложить не смогу, но сформировать аналогичный - не проблема.
Вот что получилось. var f: text; s:='удаляемоеслово'; begin assign(f,'test.txt'); reset(f); while SeekEoln(f)=false do begin read(f,s); а дальше не знаю как строку убрать, содержащую это слово. Насколько я помню, там ведь нужно писать, чтобы строка удалялась и следующая строка вставала на ее место. И вообще это реально сделать или мне не пытаться даже? |
13.02.2011, 17:10 | #5 (permalink) |
Member
Регистрация: 13.02.2011
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Как удалить строку я рано или поздно додумаюсь, а вот как создать новый файл - мыслей нет никаких.
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
13.02.2011, 17:27 | #6 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Вместо f: text; s:='удаляемоеслово'; begin assign(f,'test.txt'); reset(f); пишем f,f1: text; s:='удаляемоеслово'; begin assign(f,'test.txt'); reset(f); assign(f1,'test1.txt'); rewrite(f1); Теперь программа создаст файл по имени test1.txt и откроет его для записи. Дальше алгоритм прост: если строка содержит слово, то просто читаем следующую в файле f, а если не содержит - записываем ее копию в файл f1. В конце программы не забудьте обязательно закрыть оба файла командами Close(f) и Close(f1). Кстати, лучше сам алгоритм сделать иначе: объявить строковую переменную (напр. Sx), в нее последовательно считывать строки исходного файла командой Readln(f,Sx) (НЕ read!!!), а уж потом анализировать строку на поиск слова. |
|
13.02.2011, 17:39 | #7 (permalink) |
Member
Регистрация: 13.02.2011
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
я с такой скоростью не выдаю программы.
Я сейчас пробовала написать так: var f,f1:text; s:string; {слово в строке для переноса} begin assign (f, 'D:\file'); {исходный файл} reset (f); assign (f, 'D:\file'); {новый файл} rewrite (f1); write ('s=',); {введу слово} readln (s); if s:='слово' then ... Понимаю, примитив, но я, к сожалению, не программист... |
13.02.2011, 17:44 | #9 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
1. Имена файлов должны быть РАЗНЫМИ. 2. В операторе Assign, который перед rewrite, файловая переменная должна быть f1, а не f. Повнимательнее! Ладно, сейчас нарисую, как это должно примерно выглядеть. |
|
13.02.2011, 17:47 | #10 (permalink) |
Member
Регистрация: 13.02.2011
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Ой, да, простите, это я опечаталась, второй параметр f1.
А еще скажите пожалуйста, если в текстовом файле в строках нет пробелов, это надо оговаривать в программе, или все равно? |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|