IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

 
 Ответить  Открыть новую тему 
> вопрос по текстовым файлам, как перевести запись на нужную строку
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 16
Пол: Мужской
Реальное имя: Михаил

Репутация: -  0  +


так как можно перевести запись на нужную строку?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


только последовательно...
for i:=1 to <куда там ее надо переводить> do
readln(f,s);


---
добавлено:
стоп.
ЗАПИСЬ?
То есть тебе надо в середину файла что-то дописать, например?

Сообщение отредактировано: мисс_граффити -


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Ожидающие
Сообщений: 27
Пол: Мужской
Реальное имя: Юрий

Репутация: -  0  +


Вообще-то для записей лучше использовать файлы с прямым доступом. (типизированные, например)
Правда, просмотр данного файла будет возможен только с использованием специальной программы.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Цитата(maklir @ 3.01.2008 19:18) *

так как можно перевести запись на нужную строку?

Объясни точно, что ты хочешь.
Если заменить одну строку другой не равной длины, то единственный способ - переписать в новый файл с замененной строкой.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


dry.gif

Цитата
Если заменить одну строку другой не равной длины, то единственный способ - переписать в новый файл с замененной строкой.


Интересно, а если нужно одну строку заменить другой, такой-же длины, решение будет иным ?

Если же речь идет о типизированных файлах, то никаких дополнительных фалов вообще не нужно для замены записи.

М

Прекращаем флудить, гадать на кофейной гуще и строить предположения. Если тема еще актуальна для автора он должен уточнить, что конкретно он хочет получить. А уточнить его попросили уже в первом ответе.



--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Цитата(klem4 @ 5.01.2008 21:30) *
Интересно, а если нужно одну строку заменить другой, такой-же длины, решение будет иным ?
В этом случае замену возможно произвести на месте.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Код в студию для текстового файла, в противном случае бан на неделю, надоело уже.



Сообщение отредактировано: klem4 -


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Ультиматум?
Не принимаю.
Изложу лишь алгоритм, а код - если посчитаю, что есть такая необходимость.

Сперва несколько пояснений: текстовым файлом называется не тот, который открыт в Паскале с типом "text", а тот, который содержит текстовыю информацию в не жестком, но вполне определенном формате.
Особенности:
1. Файл содержит только символы с номерами 9, 10, 12, 13, 32-255, в некоторых случаях могут присутствовать также 7, 26 и 27.
2. Файл разделен на строки - последовательности символов произвольной длины, разделенные либо символом с кодом 10, либо парой 13, 10 именно в такой последовательности.
3. Файл может оканчиваться символом 26 или несколькими такими символами. При этом последним символом файла считается символ, предшествующий первому символу 26.
4. Если файл предназначен для вывода на консоль, он может содержать символы 7 и 27.
5. Текстовый файл содержит информацию в виде текста, т.е. в виде пригодном для чтения человеком - глазами. В том числе и числовую информацию.
6. Файлы, не содержащие информацию в пригодном для взгляда человека виде, текстовыми не считаются даже в том случае, если удовлетворяют остальным требованиям по структуре и набору символов.

Это для того, чтобы было понятно, что понимается пд текстовым файлом.

Теперь сам алгоритм (считаем, что надо заменить строку номер n строкой s, имеющей длину l).

1. Открываем текстовый файл как нетипизированный или типизированный "char" или "byte".
2. Сканируем файл до тех пор, пока не обнаружим n-1-й разделитель в виде символа 10 или символьной пары 13,10 или до конца файла.
3. Если обнаружен конец файла, выводим сообщение о том, что выполнить требуемую операцию невозможно, т.к. файл содержит менее n строк. Завершаем программу.
4. Иначе - запоминаем позицию первого символа после n-1-го разделителя.
5. Продолжаем сканировать строку, чтобы убедиться, что между n-1-м и n-ым разделителями или до конца файла находится ровно l символов.
6. Если равенство не выполнено, выводим сообщение о том, что выполнить требуемую операцию невозможно из-за того, что строки имеют различную длину. Завершаем программу.
7. Если равенство выполнено - продолжаем.
8. Позиционируем файл на запомненную позицию первого символа после n-1-го разделителя.
9. Вписываем в тело файла тело строки.
10. Закрываем файл.
11. Сообщаем пользователю об успешно выполненной операции.
12. Завершаем программу.

Примечание: при необходимости вместо завершения программы в п.6 можно осуществить переход на другой алгоритм звмены строки. Аналогично если в файле обнаружено ровно n-2 разделителя (п.3) - на дописывание строки в конец файла (вместе с предшествующим разделителем).


PS. Что тебе надоело - твое личное дело, но на форуме,насколько я знаю, существуют правила, поэтому следует не разбрасываться словами типа "бан на неделю", а указать конкретный пункт правил, который был нарушен. Мы, вроде, не в детской песочнице.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Michael_Rybak
*****

Группа: Пользователи
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

Репутация: -  32  +


Цитата
текстовым файлом называется не тот, который открыт в Паскале с типом "text", а тот, который содержит текстовыю информацию в не жестком, но вполне определенном формате.


Дальше не читал.

На форуме "Все о Паскале", в теме "вопрос по текстовым файлам..." без уточнений, текстовый файл - не тот, который открыт в Паскале с типом "text"? Не смеши, пожалуйста.

Ты еще скажи, что типизированный файл - это не "file of ..", а это такой файл, в котором вся информация однотипная. Например, о футболистах высшей лиги, или о причудах бородатых программистов.

Кстати, для успешного бана ультиматум принимать не обязательно.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Цитата(Michael_Rybak @ 6.01.2008 0:06) *
На форуме "Все о Паскале", в теме "вопрос по текстовым файлам..." без уточнений, текстовый файл - не тот, который открыт в Паскале с типом "text"? Не смеши, пожалуйста.
Есть утверждения, которые верны ВСЕГДА, а не только на каком-то определенном форуме.
Цитата

Ты еще скажи, что типизированный файл - это не "file of ..", а это такой файл, в котором вся информация однотипная. Например, о футболистах высшей лиги, или о причудах бородатых программистов.

Типизированных файлов в природе не существует. "Типизированный файл" - лишь способ, принятый в Паскале для упрощения работы с бинарными файлами. Не более.

Цитата

Кстати, для успешного бана ультиматум принимать не обязательно.
Согласен.
Но для этого все-таки необходимо хотя бы нарушить правила.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Michael_Rybak
*****

Группа: Пользователи
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

Репутация: -  32  +


Цитата
Есть утверждения, которые верны ВСЕГДА, а не только на каком-то определенном форуме.


Да. И твое - не одно из них.

Цитата
Типизированных файлов в природе не существует.


У меня есть один. Как это неестественно.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Цитата
Сперва несколько пояснений: текстовым файлом называется не тот, который открыт в Паскале с типом "text", а тот, который содержит текстовыю информацию в не жестком, но вполне определенном формате.


да что уж там, последовательность бит, зачем же так сильно углубляться ?

Цитата
PS. Что тебе надоело - твое личное дело, но на форуме,насколько я знаю, существуют правила, поэтому следует не разбрасываться словами типа "бан на неделю", а указать конкретный пункт правил, который был нарушен. Мы, вроде, не в детской песочнице.


Надоело не только мне . На тебя уже не раз приходили жалобы от _пользователей_ (достаточно веский аргумент?). Что ты нарушаешь ? По русски это звучит так: "в каждой бочке затычка", ну а если корректно, то ты постоянно флеймишь чуть-ли не в каждой теме и частенько абсолютно ни очем. Ну это ладно, вернемся к первоначальной проблеме.

Цитата
Есть утверждения, которые верны ВСЕГДА, а не только на каком-то определенном форуме.


Так вот _этот_ форум совершенно определенный и называется он "Все о Паскале", называние вроде говорящее ?


ПРИЧЕМ тут ФОРМАТ хранения данных на диске ? Речь идет о реализации конкретной программы на конкретном языке - Pascal. В котором для удобной и корректной работы с текстовыми файлами существует тип Text. Мало того, то что предложил ты, это опять-же извини не по теме, ты привел решение частного случая задачи.

Ну и последнее, для того чтобы отправить тебя в ридонли, мне достаточно не только собственного "надоело" но и нескольких жалоб.

итого: readonly 5 дней.

Сообщение отредактировано: klem4 -


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 24.11.2020 0:23
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name