program Lab3;
uses crt;
var f, g: text;
y, x :string; i:integer;
begin
clrscr;
assign(f,'C:\bp\bin\t.txt');
reset(f);
writeln('Содержание файла <f>');
repeat
readln(f, y);
writeln(' ', y);
until (eof(f));
close(f);
end.
Задача на файлы. |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Задача на файлы. |
Анисия |
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 25 Пол: Женский Реальное имя: Анисия Репутация: 0 |
Добрый день, помогите решить задачу, есть файл со словами разделенных пробелом, вывести в новый файл все слова отличные от последнего. Первый файл я получила, читаю строки из него. А что дальше делать не знаю, или считать кол-во слов, или удалаять подстроку из строки.
|
bura |
Сообщение
#2
|
Группа: Пользователи Сообщений: 7 Пол: Мужской Репутация: 0 |
Тебе надо найти последнее слово. Потом снова надо будет считывать строки из первого файла. А далее можно будет делать двумя способами.
1-й способ. Из считанной из первого файла строки выделяешь слова и сравниваешь их с последним словом. Если слово не равно последнему слову, то записываешь его во второй файл. Если равно последнему слову, то не записываешь во второй файл. И так до конца первого файла. 2-й способ. Ищешь в считанной из первого файла строке вхождение последнего слова. Если слово присутствует в строке, то удаляешь его из строки. Проверяешь строку до тех пор, пока все слова, одинаковые с последним, не будут удалены из строки. Потом строку записываешь во второй файл. Так поступаешь со всеми строками первого файла. |
Анисия |
Сообщение
#3
|
Новичок Группа: Пользователи Сообщений: 25 Пол: Женский Реальное имя: Анисия Репутация: 0 |
Делаю цикл обратный,
только не могу придумать как сделать условие чтоб выбиралось слово. |
maksimla |
Сообщение
#4
|
Знаток Группа: Пользователи Сообщений: 324 Пол: Мужской Реальное имя: maksim Репутация: 1 |
может сделай так раз отделены слова пробелом то
ну както так я непроверял несмотрел -------------------- Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
|
Unconnected |
Сообщение
#5
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Цитата program Lab3; uses crt; var f, g: text; y, x :string; i:integer; begin clrscr; assign(f,'C:\bp\bin\t.txt'); reset(f); writeln('Содержание файла <f>'); repeat readln(f, y); writeln(' ', y); until (eof(f)); close(f); end. Ты читаешь в переменную у и при следующей итерации затираешь предыдущее значение. Т.е. просто выводишь строки на экран, они нигде не сохраняются. -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
Unconnected |
Сообщение
#6
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Код var f:text; y,y2,y3,y4:string; a:integer; begin assign(f,'input.txt'); reset(f); repeat readln(f,y2); y:=y+y2+' '; until eof(f); close(f); delete(y,length(y),1); for a:=length(y) downto 1 do if y[a]=' ' then begin y3:=copy(y,a+1,length(y)-a); break; end; assign(f,'output.txt'); rewrite(f); for a:=1 to length(y) do if y[a]=' ' then begin y4:=copy(y,1,a-1); if not(y4=y3) then writeln(f,y4); delete(y,1,a); end; close(f); readln; end. Разбиение на слова самое примитивное, не обрабатываются пробелы перед/после дефиса и т.п. -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
Lapp |
Сообщение
#7
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
не обрабатываются пробелы перед/после дефиса и что за пробелы такие перед/после дефиса?.. Unconnected, а ты вообще проверяешь свои решения?.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Lapp |
Сообщение
#8
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Вот простенькое решение. Учти, что я интерпретировал твои слова о том, что слова разделены только пробелами буквально (концы строк не разделяют слова). Если не нравится так - можно поговорить о том, как это исправить.
Программа годится для файлов _любой_ длины, но длина одного слова не должна превосходить длины строки (255). var -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Анисия |
Сообщение
#9
|
Новичок Группа: Пользователи Сообщений: 25 Пол: Женский Реальное имя: Анисия Репутация: 0 |
Спасибо большое за помощь, вот что у меня получилось.
Добавлено через 3 мин. Lapp спасибо за помощь, но два часа ковыряний сегодня у меня не прошли даром. |
Lapp |
Сообщение
#10
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
вот что у меня получилось. Это в высшей степени похвально)). Я немного причесал твою прогу (постарайся разобраться с правильным форматированием - это несложно) и написал несколько замечаний.... два часа ковыряний сегодня у меня не прошли даром. program Lab3; Но требуемым результатом пока не пахнет)). По-хорошему, (если уж хочешь наворотов,) нужно сделать что-то типа функции для чтения следующего слова из текста. Тогда вся программа будет состоять из двух проходов: первый раз до последнего слова, а второй с записью в выходной файл нужных слов. Преимущество моего варианта состоит в минимальности накладываемых ограничений. Вот встретится тебе в файле строка с количеством букв больше 255 - и что делать? Не обращай внимания на мое брюзжание)), делай как делается. Покажи, что получится еще через два часа.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Анисия |
Сообщение
#11
|
Новичок Группа: Пользователи Сообщений: 25 Пол: Женский Реальное имя: Анисия Репутация: 0 |
Правильно сказали, я не то совсем нахожу...... спасибо за подсказку буду дальше делать.
|
Unconnected |
Сообщение
#12
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Цитата не обрабатываются пробелы перед/после дефиса и что за пробелы такие перед/после дефиса?.. Unconnected, а ты вообще проверяешь свои решения?.. Насчёт дефиса - это я имел в виду, что если дать программе word - word например, то '-' будет считаться за слово. А решение я проверял. Входной файл: Цитата abc defg hig klm nopqr Выходной файл: Цитата abc defg hig klm Вот что не в строку пишет это да. -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
Lapp |
Сообщение
#13
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Насчёт дефиса - это я имел в виду, что если дать программе word - word например, то '-' будет считаться за слово. Я извиняюсь за излишние придирки, я хотел сказать, что то, что ты имеешь в виду называется в русском языке "тире" (хлеб - всему голова), а дефис соединяет два слова (как-то, сильно-пресильно) и никаких пробелов при нем в принципе быть не может. Правда, в обычном компьютерном тексте (txt) оба они как правило представлены одним символом (минусом), так что различимы только по контексту. Еще раз извиняюсь, я понимаю, что это форум не филологов..Думаю, то, что тире считается за отдельное слово - совершенно нормальное явление в тех условиях, которые приведены Анисией, так что извиняться тут не за что. А решение я проверял. И еще раз извиняюсь. Я что-то никак не могу врубиться в требования задачи: может ли в файле быть несколько строк? (Анисия, ответь, пожалуйста.) Я проверял на файле с неколькими строками, потому, наверное, и получил не то. Сам не знаю, почему я привязался к многострочным файлам.. наверное, потому, что одной строки в 255 символом слишком уж мало, чтоб носить гордое имя файла)).Ниже - реализация функции GetWord, о которой я говорил раньше. Файл может содержать много строк (каждая не больше 255 символов. Структура основной программы в целом selfexplainable, но могу дать пояснения, если надо. К функции тоже, конечно . var Сообщение отредактировано: Lapp - -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Unconnected |
Сообщение
#14
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Ага, на многострочных не работает, хотя изначально подразумевалось, что заработает
-------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
Текстовая версия | 4.05.2024 22:49 |