Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.093 c
15-1161000666
clickmaker
2006-10-16 16:11
2006.11.05
Вакансии Delphi


15-1160983963
Sseerrgg
2006-10-16 11:32
2006.11.05
Оперативка


4-1150644667
Aragon
2006-06-18 19:31
2006.11.05
Фильтрация процессов от системных


8-1143620068
nik2006
2006-03-29 12:14
2006.11.05
samplegrabber


15-1160814051
*Стажер*
2006-10-14 12:20
2006.11.05
История Делфи





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский