1. Заголовок или название темы должно быть информативным ! 2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code]. 3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК ! 4.НЕ используйте форум для личного общения! 5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
здра все. подскажите пжалста, как записать данные в текстовый файл, если неизвестно кол-во его элементов, а дан признак конца ввода? в моём случае-точка. и ещё вопрос. как текстовый файл разделять на строки?
ReadLn(f, s); где f - файловая переменная, s - строковая переменная
спасибо, теперь въехала в разницу в read/readln у файлов))
Цитата(Archon @ 3.12.2006 23:22)
Разве то, что не известно кол-во элементов мешает записывать данные?
мне мешает) не могу сформулировать условие, по выполнению которого надо переставать вводить символы. если просто со строкой, то всё нормально. а как с файлом это сотворить - не соображу. опишу на своём примитивном "я ему.. а он мне..". так вот. я ему:ReadLn(f, s). он мне: ок, давай сюда свою строчку. я ему: держи*вводит строку, нажимает enter* он мне:всё, файл создан. и давай дальше там строку преобразовывать так, как я его до этого просила. а я ещё не весь файл ввела! и теперь глупый вопрос:что я делаю не так? нужно ReadLn(f, s) столько раз, сколько строк? так я ж не знаю, сколько их. while not eof? вроде тоже нет, у файла и конца-то нет пока, я ж его только создаю.. блин
пс. я не блондинка))я сплю по 3 часа в сутки.. результат прямо отражается на мозгах)
svetkom, тебя не очень просто понять. Иногда ты говоришь о записи файла (сначала), иногда о вводе его с клавиатуры.. Похоже, тебе действительно не помешало бы побольше спать Попробую сказать, как я понял. Предположим, что твоя программа должна читать текстовые данные (то есть алфавитно-цифровые и знаки препинания, разделенные на строки). Ввод при этом можно осуществлять с разных устройств (например, с диска), но в данном случае возьмем клавиатуру.
Введенную информацию надо где-то сохранять (как правило). Сохранять можн, например, в массиве строк (заведомо большего размера, чем возможное количество строк). Можно в списке (это такая структура с последовательным доступом к элементам), можно еще сотней разных способов. Но самое простое - сохранить их в файл на диске (мне кажется, ты этого и хотела).
Если ты заранее не знаешь количество вводимых строк, то ввод нужно осуществлять в цикле типа while или repeat. Вот один из возможных вариантов:
var f:text; {заводим переменную типа текстовый файл для сохранения результатов} ... {затем, уже в теле программы} Assign(f,'svetkom.txt'); ReWrite(f); repeat ReadLn(s); WriteLn(f,s) until s='.' {условие окончания ввода} Close(f)
Обрати внимание, что признаком конца ввода тут является отдельностоящая точка, то есть строка ничего больше не содержит, кроме этой точки. (Кстати, забавно, именно такой признак конца ввода данных в протоколе SMTP, который пересылает твои e-mail'ы )
Кстати, можно использовать и EoF. Признком конца текстового файла является Ctrl-Z. То есть, можешь использовать вот такую структуру: while not EoF do ReadLn; - этот ввод завершится по нажатии Ctrl-Z, а за ним Enter. Прояснилось немного?..
--------------------
я - ветер, я северный холодный ветер я час расставанья, я год возвращенья домой
lapp,ага!!прояснилось! насчёт конца файла всё поняла, урра) и ты мой вопрос тоже правильно понял) хотя я сама там запуталась ) сделала по последнему варианту, с EoF, всё сработало. пасиибо!