![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Удалить текущую строку в типизированном файле. [D2005, 2000]
pkm © (2006-10-19 15:03:00)Доброе время суток. Подскажите плиз. как удалить текущую строку в типизированном файле? спасибо за внимание.
Slym (2006-10-20 06:36:00) [1]Не удаляй... а помечай как удаленный и при чтении отбрасывай...
при добавлении можно пробежаться по удаленным и перезаписать
Anatoly Podgoretsky (2006-10-19 18:58:00) [2]pkm (19.10.06 15:23) [8]
Без проблем, читай блок из одного места, пиши в другое, далее обрезай файл.
palva (2006-10-19 16:40:00) [3]Можно, конечно, без дополнительного файла, но довольно сложно. Следующий пример удаляет пятую строку в файле sss.txt
{$APPTYPE CONSOLE}
var
f: file of Char;
c: Integer;
b: Char;
ps, p1, p2: Integer;
begin
AssignFile(f, 'sss.txt');
Reset(f);
ps := FileSize(f);
c := 1;
repeat
Read(f, b);
if ord(b) = 10 then inc(c);
until c = 5;
p1 := filepos(f); // позиция начала пятой строки
repeat
Read(f, b);
until ord(b) = 10;
p2 := filepos(f); // позиция начала шестой строки
// затираем пятую строку перенося по одному байту вверх
repeat
Seek(f, p2); Read(f, b); Inc(p2);
Seek(f, p1); Write(f, b); Inc(p1);
until p2 = ps;
truncate(f); // обрезаем файл на диске
CloseFile(f);
end.
Для простоты у нас буфер - один байт. Поэтому программа работает медленно. Правда, это будет заметно только на больших файлах. Можно взять большой буфер, тогда придется сильно усложнять программу. Это уж поробуйте сами.
pkm (2006-10-19 16:19:00) [4]Ну большущее спасибо.
Джо (2006-10-19 15:30:00) [5]> [8] pkm (19.10.06 15:23)
> Я думал есть, хоть один вариант, где не надо создавать дополнительные
> файлы.
Есть. Читаем весь файл в память, в соответствующую структуру. Затем перезаписываем старый файл данными из структуры, опускаю ненужную запись. Как видишь, обошлись без дополнительного файла.
stone (2006-10-19 15:27:00) [6]
> pkm (19.10.06 15:23) [8]
> Я думал есть, хоть один вариант, где не надо создавать дополнительные
> файлы.
По другому не бывает
pkm (2006-10-19 15:23:00) [7]
> Вариантов - туева хуча.
>
> тебе какой ? 8-й ? столохматый ?
Я думал есть, хоть один вариант, где не надо создавать дополнительные файлы.
Джо (2006-10-19 15:21:00) [8]> [6] pkm (19.10.06 15:20)
> Попутался. Я вместо таблиц хотел сказать (написать) файлы.
> Конец рабочего дня голова кругом.
Ну, так ответ был дан еще в посте [1].
pkm (2006-10-19 15:20:00) [9]Попутался. Я вместо таблиц хотел сказать (написать) файлы. Конец рабочего дня голова кругом.
Джо (2006-10-19 15:13:00) [10]Какие таблицы? Какие строки? Ты о типизированных файлах или о чем?
Сергей М. (2006-10-19 15:12:00) [11]
> pkm (19.10.06 15:07) [3]
> таблиц
Упс ...
Чем дальше в лес, тем толще партизаны) ..
Откуда тут, позволь полюбопытствовать, взялись какие-то там "таблицы" ?
Ты читаешь вх.файл, строка за строкой, в порядке прочтения ... Все прочитанное тут же записываешь в вых.файл, за исключением того что записывать не следует по твоей логике
pkm (2006-10-19 15:07:00) [12]мне вариант, где можно обойтись без создания дополнительных таблиц. Если можно.
DrPass (2006-10-19 15:04:00) [13]В типизированных файлах нет строк. Но в общем случае - создать новый файл, переписать в него часть старого до удаляемых данных, потом - часть старого после удаляемых данных, удалить старый файл, переименовать новый
Сергей М. (2006-10-19 15:04:00) [14]Вариантов - туева хуча.
тебе какой ? 8-й ? столохматый ?