Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Изменение n-ой строки файла, n>1, разные способы реализации 
:(
    Опции темы
VingradFan
  Дата 28.5.2007, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 477
Регистрация: 30.1.2006
Где: Москва

Репутация: нет
Всего: 3



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

ДЛЯ ТЕКСТОВЫХ
единственный способ до которого додумался: открыть для чтения, считать n-1 строк в массив, открыть для записи, записать из массива n-1 строк, дописать ту которубю надо было исправить.
Если есть еще варианты расскажите пожалуйста

ДЛЯ ТИПИЗИРОВАННЫХ
там как я понимаю можно считывать строку, и тут же ее записывать, тоесть без массива, но с буферной переменной.

Вобщем подскажите как будет лучше всего...
может можно переходить сразу к нужной строке?


--------------------
Когда-нибудь я стану богатым и куплю себе столько Ролтонов, сколько захочу...
PM MAIL WWW ICQ   Вверх
valedol
Дата 28.5.2007, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 13.10.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Цитата

ДЛЯ ТЕКСТОВЫХ
единственный способ до которого додумался: открыть для чтения, считать n-1 строк в массив, открыть для записи, записать из массива n-1 строк, дописать ту которубю надо было исправить.

а разве при этом файл не обрежется по n-ную строку?
было бы легко и просто использовать временный файл вместо массива, и память не забивается...

если у файла слишком хитрая структура, то можно открывать его как файл типа byte



Это сообщение отредактировал(а) valedol - 28.5.2007, 18:39
PM MAIL ICQ   Вверх
VingradFan
Дата 28.5.2007, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 477
Регистрация: 30.1.2006
Где: Москва

Репутация: нет
Всего: 3



Цитата(valedol @  28.5.2007,  18:35 Найти цитируемый пост)
а разве при этом файл не обрежется по n-ную строку?

что ты имееш в виду?
на каком шаге это произойдет?


--------------------
Когда-нибудь я стану богатым и куплю себе столько Ролтонов, сколько захочу...
PM MAIL WWW ICQ   Вверх
valedol
Дата 28.5.2007, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 13.10.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



ты допишешь n-ную строку, после этого ты сразу закрываешь файл или переписываешь все остальное? Ты же rewrite-ом переписываешь файл, т.е. все строки повторять надо
PM MAIL ICQ   Вверх
VingradFan
Дата 28.5.2007, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 477
Регистрация: 30.1.2006
Где: Москва

Репутация: нет
Всего: 3



Цитата(valedol @ 28.5.2007,  19:29)
ты допишешь n-ную строку, после этого ты сразу закрываешь файл или переписываешь все остальное? Ты же rewrite-ом переписываешь файл, т.е. все строки повторять надо

неееееееее....
я пишу writeln-ом строки из массива: строка за строкой


--------------------
Когда-нибудь я стану богатым и куплю себе столько Ролтонов, сколько захочу...
PM MAIL WWW ICQ   Вверх
valedol
Дата 29.5.2007, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 13.10.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



VingradFan, ну это понятно.
файл ты открываешь для записи только одной из 2х команд:
 rewrite(file); - перезаписывает весь файл
 append(file); - добавляет в конец 
т.е. надо либо считывать в массив все строки, изменять какую надо и записывать обратно опять-таки все строки, или же использовать времменный файл: переписывать сразу туда исходный файл строка за строкой, изменив нужную, потом есть 2 пути
 - удалить исходный и переименовать времменный (процедуры модуля dos, щас не помню какие конкретно)
 - переписать все обратно в исходный

если у файла есть хоть какая-то структура (одинаковый р-р строки) то используй типизированый файл, будет удобней

опиши ситуацию конкретнее, что за файл?
PM MAIL ICQ   Вверх
VingradFan
Дата 29.5.2007, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 477
Регистрация: 30.1.2006
Где: Москва

Репутация: нет
Всего: 3



файл текстовый, в каждой его строке хранится различная информация об элементе БД.


а разве, когда мы записываем n-2 строк файла с помошью ВрайтЛайн последние 2 стираются?
тогда дествитно

Цитата(valedol @  29.5.2007,  16:27 Найти цитируемый пост)
 надо либо считывать в массив все строки, изменять какую надо и записывать обратно опять-таки все строки




--------------------
Когда-нибудь я стану богатым и куплю себе столько Ролтонов, сколько захочу...
PM MAIL WWW ICQ   Вверх
valedol
Дата 29.5.2007, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 13.10.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



VingradFan, субд пишешь? А файл с описанием записи, использовать не пробовал?
PM MAIL ICQ   Вверх
VingradFan
Дата 30.5.2007, 01:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 477
Регистрация: 30.1.2006
Где: Москва

Репутация: нет
Всего: 3



Цитата(valedol @  29.5.2007,  21:46 Найти цитируемый пост)
VingradFan, субд пишешь?

ага, время на работе коротаю... smile


Цитата(valedol @  29.5.2007,  21:46 Найти цитируемый пост)
 А файл с описанием записи, использовать не пробовал?

а зачем усложнять программу еще и записями? какие будут преимущества?
кстати как ты предлагаеш организовать все? Для каждой записи 1 файл, для каждого поля 1 строка? 
какой тип файла взять?  текстовый\типизированный?

Это сообщение отредактировал(а) VingradFan - 30.5.2007, 01:36


--------------------
Когда-нибудь я стану богатым и куплю себе столько Ролтонов, сколько захочу...
PM MAIL WWW ICQ   Вверх
KuZyagroup
Дата 30.5.2007, 02:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


magento solution
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 16.4.2007
Где: Kiev

Репутация: нет
Всего: 4



Оба в поиск
Подсказка можно
Подсказка BlockRead BlockWrite Seek SeekOf Сдвиг - вообщем  что-то в этом духе.
П.С. Я не злой и не жадный smile просто сам уже не помню как это делается ;)
П.П.С. Можно попытатся через ж. открыть файл и на чтение и на запись переменными InPut OutPut и пользоваться GotoXY();
П.П.П.С. Злая штука склероз
PM MAIL   Вверх
Farmazon
Дата 30.5.2007, 07:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Разработчик
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 7.7.2006

Репутация: нет
Всего: 5



если длина исправленной строки будет = длине исходной строки, то можно и BlockRead BlockWrite Seek SeekOf заюзать, а если нет - придётся переписывать файл...


--------------------
Таково моё общее мнение.
PM MAIL WWW   Вверх
valedol
Дата 30.5.2007, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 13.10.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Цитата(VingradFan @  30.5.2007,  01:34 Найти цитируемый пост)
а зачем усложнять программу еще и записями? какие будут преимущества?кстати как ты предлагаеш организовать все? Для каждой записи 1 файл, для каждого поля 1 строка? какой тип файла взять?  текстовый\типизированный?

отвечаю по порядку:
описание записи, сиречь структуры БД, позволит тебе подзаюзать типизированый файл. А это уже куча преимуществ. Самое основное, что ты сможешь с помощью seek, read,write изменять нужный тебе параметр, не переписывая всего файла. 
Я предлагаю создать один текстовый файл в котором будет количество полей,  записи о имени/типе поля, открывать его впервую очередь. На его основе посчитать размер записи и открыть файл с таблицей как не типизированый с рассчитаным размером (там работают команды BlockRead, BlockWrite). Считываешь блок и раздираешь его на части в цикле 

От излишней дури делал такую штуку с редактируемой структурой (т.е. ты при создании таблицы мог выбирать из 2х типов полей: строка или число), но дальше создания таблицы/просмотра записей дело не пошло, если найду могу показать...

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0493 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.