Форум: "Начинающим";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];
ВнизУдалить текущую строку в типизированном файле. Найти похожие ветки
← →
pkm (2006-10-19 15:03) [0]Доброе время суток. Подскажите плиз. как удалить текущую строку в типизированном файле? спасибо за внимание.
← →
DrPass © (2006-10-19 15:04) [1]В типизированных файлах нет строк. Но в общем случае - создать новый файл, переписать в него часть старого до удаляемых данных, потом - часть старого после удаляемых данных, удалить старый файл, переименовать новый
← →
Сергей М. © (2006-10-19 15:04) [2]Вариантов - туева хуча.
тебе какой ? 8-й ? столохматый ?
← →
pkm (2006-10-19 15:07) [3]мне вариант, где можно обойтись без создания дополнительных таблиц. Если можно.
← →
Сергей М. © (2006-10-19 15:12) [4]
> pkm (19.10.06 15:07) [3]
> таблиц
Упс ...
Чем дальше в лес, тем толще партизаны) ..
Откуда тут, позволь полюбопытствовать, взялись какие-то там "таблицы" ?
Ты читаешь вх.файл, строка за строкой, в порядке прочтения ... Все прочитанное тут же записываешь в вых.файл, за исключением того что записывать не следует по твоей логике
← →
Джо © (2006-10-19 15:13) [5]Какие таблицы? Какие строки? Ты о типизированных файлах или о чем?
← →
pkm (2006-10-19 15:20) [6]Попутался. Я вместо таблиц хотел сказать (написать) файлы. Конец рабочего дня голова кругом.
← →
Джо © (2006-10-19 15:21) [7]> [6] pkm (19.10.06 15:20)
> Попутался. Я вместо таблиц хотел сказать (написать) файлы.
> Конец рабочего дня голова кругом.
Ну, так ответ был дан еще в посте [1].
← →
pkm (2006-10-19 15:23) [8]
> Вариантов - туева хуча.
>
> тебе какой ? 8-й ? столохматый ?
Я думал есть, хоть один вариант, где не надо создавать дополнительные файлы.
← →
stone © (2006-10-19 15:27) [9]
> pkm (19.10.06 15:23) [8]
> Я думал есть, хоть один вариант, где не надо создавать дополнительные
> файлы.
По другому не бывает
← →
Джо © (2006-10-19 15:30) [10]> [8] pkm (19.10.06 15:23)
> Я думал есть, хоть один вариант, где не надо создавать дополнительные
> файлы.
Есть. Читаем весь файл в память, в соответствующую структуру. Затем перезаписываем старый файл данными из структуры, опускаю ненужную запись. Как видишь, обошлись без дополнительного файла.
← →
pkm (2006-10-19 16:19) [11]Ну большущее спасибо.
← →
palva © (2006-10-19 16:40) [12]Можно, конечно, без дополнительного файла, но довольно сложно. Следующий пример удаляет пятую строку в файле 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.
Для простоты у нас буфер - один байт. Поэтому программа работает медленно. Правда, это будет заметно только на больших файлах. Можно взять большой буфер, тогда придется сильно усложнять программу. Это уж поробуйте сами.
← →
Anatoly Podgoretsky © (2006-10-19 18:58) [13]pkm (19.10.06 15:23) [8]
Без проблем, читай блок из одного места, пиши в другое, далее обрезай файл.
← →
Slym © (2006-10-20 06:36) [14]Не удаляй... а помечай как удаленный и при чтении отбрасывай...
при добавлении можно пробежаться по удаленным и перезаписать
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.042 c