Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Blayder
Зарегистрирован: 11.03.2006 Сообщения: 4
|
Добавлено: Сб Мар 11 2006 00:58 Заголовок сообщения: Как перезаписать строки в Текстовом файле??? |
|
|
Вот столкнулся с задачкой...
Прога считывает данные из текстовой базы в StringGrid.
Потом пользователь чтото изменяет в данных и потом этуже таблицу надо записать назд в тот же текстовый документ, перезаписав старые данные....
вот пример файла:
[loottemplate 100]
loot=2140 0.223214
loot=9753 0.223214
loot=6268 0.223214
loot=1210 0.223214
loot=15933 0.223214
loot=9748 0.223214
loot=4569 0.669643
loot=818 0.223214
loot=6555 0.223214
loot=9758 0.223214
loot=1307 75.2232
loot=9750 0.223214
loot=2589 21.875
loot=118 0.223214
loot=6521 0.223214
loot=159 2.90179
loot=3013 0.446429
loot=1181 0.892857
loot=9745 0.223214
loot=9743 0.223214
loot=3643 0.223214
loot=117 4.6875
loot=3374 0.446429
loot=1498 0.223214
loot=1499 0.669643
loot=2778 0.446429
loot=1511 0.223214
loot=2777 0.669643
loot=1513 0.446429
loot=1515 0.446429
loot=1514 0.223214
loot=1505 0.223214
loot=1502 0.223214
loot=1503 0.223214
loot=1504 0.446429
loot=1509 0.223214
loot=1730 0.223214
loot=1731 0.223214
loot=1732 0.446429
loot=1734 0.223214
loot=1735 0.446429
[loottemplate 1001]
loot=2589 50
loot=2592 16.6667
[loottemplate 10016]
loot=13464 5.00
[loottemplate 10036]
loot=14047 24.8276
loot=13818 0.689655
loot=8085 0.689655
[loottemplate 10037]
loot=4338 0.658328
loot=4306 21.5273
loot=2592 4.73996
loot=3781 0.197498
loot=3808 0.0658328
loot=3809 0.131666
loot=3813 0.131666
loot=3814 0.0658328
loot=3811 0.197498
loot=3803 0.131666
loot=3800 0.263331
loot=3804 0.0658328
loot=3806 0.131666
loot=3792 0.197498
loot=3794 0.0658328
loot=3798 0.197498
loot=3785 0.197498
loot=3782 0.0658328
loot=3780 0.131666
loot=3784 0.197498
loot=3816 0.0658328
loot=3786 0.197498
loot=3787 0.131666
loot=3778 0.131666
Пробовал использовать Writeln, но почемуто эррор вылетает...
Вот код на запись:
procedure TfrmLSET.Button1Click(Sender: TObject);
var
j: integer;
begin
AssignFile(FL, 'loottemplates.scp');
reset(FL);
repeat
readln(FL,ltch);
until (ltch = '[loottemplate '+lootTID+']') or eof(FL);
For j:=1 to i do
begin
Writeln(FL, 'loot='+stgLoot.Cells[1,j]+' '+stgLoot.Cells[2,j]);
end;
closefile(FL);
end;
Вылетает эррор:
Project Projest1.exe raised exception class ElnOutError with message 'I/O error 105'...
и выделяется строка WriteLn.
Мож я просто чет не так делаю???
Delphi7 используем |
|
Вернуться к началу |
|
|
GoodmanSemen
Зарегистрирован: 10.06.2005 Сообщения: 9
|
Добавлено: Сб Мар 11 2006 20:54 Заголовок сообщения: |
|
|
Функция reset открывает файл только для чтения!!! А ты пытаешься туда что-то записать, вот система тебе и выдает ошибку!
Придется тебе создать временный файл (rewrite), загнать в него все до нужной строки, потом загонять туда новые данные, а потом снова все что осталось из старого. Далее старый закрываешь и удаляешь, а временный переименовываешь как старый и опять-таки закрываешь! Как тебе такая идея? Конечно можно попытаться открыть файл для дополнения и работать с файловым указателем по строкам, но тут тебе придется сначала выяснять сколько строк сначала, да еще не запариться в установке позиции указателя для записи новых значений, да и еще всякая лабуда может произойти! Я думаю, что это оптимальный вариант! |
|
Вернуться к началу |
|
|
GoodmanSemen
Зарегистрирован: 10.06.2005 Сообщения: 9
|
Добавлено: Сб Мар 11 2006 20:58 Заголовок сообщения: Как перезаписать строки в Текстовом файле??? |
|
|
Функция reset открывает файл только для чтения!!! А ты пытаешься туда что-то записать, вот система тебе и выдает ошибку!
Придется тебе создать временный файл (rewrite), загнать в него все до нужной строки, потом загонять туда новые данные, а потом снова все что осталось из старого. Далее старый закрываешь и удаляешь, а временный переименовываешь как старый и опять-таки закрываешь! Как тебе такая идея? Конечно можно попытаться открыть файл для дополнения и работать с файловым указателем по строкам, но тут тебе придется сначала выяснять сколько строк сначала, да еще не запариться в установке позиции указателя для записи новых значений, да и еще всякая лабуда может произойти! Я думаю, что это оптимальный вариант! |
|
Вернуться к началу |
|
|
Blayder
Зарегистрирован: 11.03.2006 Сообщения: 4
|
Добавлено: Сб Мар 11 2006 22:28 Заголовок сообщения: |
|
|
Если так, то прога будет жутко долго работать...
Как никак база весьма большая - 12 мегов текста...
А нельзя ли как-то поменять режим файла???
Чтоб можно было записать туда данные - я вроде где-то читал, что есть толи FileMode толи еще как-то которым меняют режим файла...
Может кто-то что-то знает насчет этого? |
|
Вернуться к началу |
|
|
Делф1Ст
Зарегистрирован: 28.02.2006 Сообщения: 24
|
Добавлено: Пн Мар 13 2006 11:50 Заголовок сообщения: |
|
|
Пробуй через BDE, только используй базу не Paradox, а текст ANSI |
|
Вернуться к началу |
|
|
Blayder
Зарегистрирован: 11.03.2006 Сообщения: 4
|
Добавлено: Пн Мар 13 2006 21:14 Заголовок сообщения: |
|
|
Я по другому сделал...
Загнал содержимое базы в массив
Загружается прога дольше, зато потом работает гораздо быстрее
И проблем с записью меньше |
|
Вернуться к началу |
|
|
|