Другие языки программирования и технологии

Примитивная работа с файлами. PASCAL.

program SomeProg; uses crt; var texts:text; begin assign(texts,'C:\inout.txt'); apperd(texts); writeln(texts,'wroten'); - как определить, какая это будет строчка в документе? close(apperd); end. Вопрос №2: как в документе перейти, к той, или иной строчке? Вопрос №3: как стереть определённую строку?
AU
Aktam Uzakov
1 454
Какая строчка в текстовом файле - только просмотром всего файла и счетом строчек.
Перейти - надо знать, к какому по номеру байту, опять же нужен просмотр всего документа и запомнаение номеров байтов начал строчек.
Стереть строку - проще всего переписать в другой файл с исключением этой строки, но можно и сдвигом каждой прочитанной после стираемой строки к началу файла с учетом смещения на длину стираемой строки - быстрее, но несколько сложнее в реализации.
Kenje Kk-In
Kenje Kk-In
32 266
Лучший ответ
Aktam Uzakov как можете предложить реализацию "СЧЁТА СТРОЧЕК". Нутром чую, что repeat, а доказать немогу.
Aktam Uzakov а в Until указать EOF?
Доброго времени суток.

1. Во-первых, не apperd, а Append, а во-вторых, читаем хелп.

Append открывает существующий внешний файл с
именем, определенным в файловой переменной F.
Если внешний файл с данным именем не
существует, то происходит ошибка ввода/вывода.
Если F уже открыт, то он закрывается и вновь
открывается. Текущая позиция файла
устанавливается на конец файла.

Если в последнем 128-байтовом блоке файла
присутствует символ Ctrl+Z (символ, с кодом
26), то текущая позиция файла устанавливается,
так чтобы перезаписать первый встретившийся
Ctrl+Z в блоке. Таким образом, к файлу,
который завершается символом Ctrl+Z может быть
добавлен текст.

Следовательно, 'wroten' будет последней строчкой в документе после выполнения оператора записи.

2. Так можно прочитать строку из файла.

i := 0;
while (i < N) and not Eof(F) do begin
i := i + 1;
ReadLn(F, S);
end;

Цикл while потому, что файл может быть и пустым. При таком раскладе repeat приведет к ошибке. Проверив после цикла i = N можно убедиться, что прочитана нужная строчка, а не последняя (при i < N).

3. Стереть строку действительно проще путем использования временного файла.

Удачи!

PS И не close(apperd); а Close(texts); коль соро вы дали такое имя файловой переменной.
Витя Анисимов
Витя Анисимов
59 613
Aktam Uzakov Благодарю за ответ. Я уже сам сделал(
ОСталась токо одна проблема - как перейти к определённой стрчке файла,при записи(т.е. записи строки, пока EOLN не сообщит). у меня же уже есть значение)))