Главная страница
    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.045 c
11-1137747496
-=Mike=-
2006-01-20 11:58
2006.11.05
Вопрос по ListView


2-1161344333
dest81
2006-10-20 15:38
2006.11.05
XML


3-1157521219
Bwa_JO
2006-09-06 09:40
2006.11.05
Помогите, плиз с кодировкой!


2-1161511329
Riply
2006-10-22 14:02
2006.11.05
EnumResourceTypes типы перебирает, но возвращает ошибку


2-1161516128
m-kirill-2003
2006-10-22 15:22
2006.11.05
Медиаплеер на Delphi





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский