Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 13.02.2011, 15:35   #1 (permalink)
Hayeng
Member
 
Регистрация: 13.02.2011
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Редактирование текстового файла в Pascal

Всем привет!
Скажу сразу, опыт программирования минимален и все давно забыто
Возникла необходимость отредактировать файл txt большого размера (примерно 300 мб). Нужно из этого файла убрать строки, не содержащие некое слово (или наоборот, перенести строки с этим словом в новый текстовый файл). Вручную это не осилить.
Поэтому 3 вопроса:
1. Где лучше пытаться написать программу - в Pascal или Delphi, или это не важно?
2. Сможет ли написанная программа отредактировать такой большой текстовый файл?
3. Написание программы остановилось на этапе указания нужного текстового файла, а дальше не могу придумать.
Помогите, плиз, хотя бы направление мыслей задайте...
Hayeng вне форума   Ответить с цитированием

Старый 13.02.2011, 15:35
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Зачастую проблемы у людей очень похожие, обратите внимание на это

Редактирование документа в фотошопе
Редактирование InstallShield Wizard
Считывание текстового файла команда: Windows Type
Редактирование снимков с мобильного (2megapixels) в Photoshop CS3

Старый 13.02.2011, 15:40   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Hayeng Посмотреть сообщение
Помогите, плиз, хотя бы направление мыслей задайте...
Нет уж, давайте лучше так: Вы выкладываете свои наработки, а мы Вам помогаем завершить сей титанический труд. Желательно иметь и сам файл, и конкретизацию отбора (если, конечно, не секрет).
Vladimir_S вне форума   Ответить с цитированием
Старый 13.02.2011, 16:07   #3 (permalink)
Hayeng
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);
а дальше не знаю как строку убрать, содержащую это слово.
Насколько я помню, там ведь нужно писать, чтобы строка удалялась и следующая строка вставала на ее место.
И вообще это реально сделать или мне не пытаться даже?
Hayeng вне форума   Ответить с цитированием
Старый 13.02.2011, 16:46   #4 (permalink)
rft2
Member
 
Регистрация: 24.07.2010
Сообщений: 25
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Цитата:
Сообщение от Hayeng Посмотреть сообщение
не знаю как строку убрать, содержащую это слово
А не проще создать новый файл без ненужных строк?
rft2 вне форума   Ответить с цитированием
Старый 13.02.2011, 17:10   #5 (permalink)
Hayeng
Member
 
Регистрация: 13.02.2011
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Как удалить строку я рано или поздно додумаюсь, а вот как создать новый файл - мыслей нет никаких.
Hayeng вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 13.02.2011, 17:27   #6 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Hayeng Посмотреть сообщение
Как удалить строку я рано или поздно додумаюсь, а вот как создать новый файл - мыслей нет никаких.
Да элементарно!
Вместо
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!!!), а уж потом анализировать строку на поиск слова.
Vladimir_S вне форума   Ответить с цитированием
Старый 13.02.2011, 17:39   #7 (permalink)
Hayeng
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 ...
Понимаю, примитив, но я, к сожалению, не программист...
Hayeng вне форума   Ответить с цитированием
Старый 13.02.2011, 17:42   #8 (permalink)
Hayeng
Member
 
Регистрация: 13.02.2011
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

то есть хотела сделать так, чтобы слово воодить с клавиатуры, когда программа запросит...
Hayeng вне форума   Ответить с цитированием
Старый 13.02.2011, 17:44   #9 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Hayeng Посмотреть сообщение
я с такой скоростью не выдаю программы.
Я сейчас пробовала написать так:
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 ...
Понимаю, примитив, но я, к сожалению, не программист...
Стоп, стоп - уже сразу две грубейших ошибки:
1. Имена файлов должны быть РАЗНЫМИ.
2. В операторе Assign, который перед rewrite, файловая переменная должна быть f1, а не f.
Повнимательнее!

Ладно, сейчас нарисую, как это должно примерно выглядеть.
Vladimir_S вне форума   Ответить с цитированием
Старый 13.02.2011, 17:47   #10 (permalink)
Hayeng
Member
 
Регистрация: 13.02.2011
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Ой, да, простите, это я опечаталась, второй параметр f1.
А еще скажите пожалуйста, если в текстовом файле в строках нет пробелов, это надо оговаривать в программе, или все равно?
Hayeng вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 17:52.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.