Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.22;
Скачать: CL | DM;

Вниз

вставить строку в файл   Найти похожие ветки 

 
majer_rv ©   (2006-10-03 22:10) [0]

Здр!
Помогите, как вставить строку в начало файла, и как удалить строку определенной длины из начала файла?


 
Dmitrij_K   (2006-10-03 22:28) [1]

Если файл не большой или скорость работы алгоритма не критична, то можно использовать TStringList

with TStringList.Create do
begin
 try
   LoadFromFile("textfile.txt");
   Delete(0);  // удалить первую строку
   Strings[0] := "Заменить первую строку";
   Strings[0] := Copy(Strings[0],5,maxint); // удалить первые 4 символа из первой строки
 finally
   Free
 end
end;


Для больших файлов все сложнее.


 
Dmitrij_K   (2006-10-03 22:31) [2]

Забыл, файл надо еще сохранить
...
SaveToFile("file.txt");
finally
Free
end
...


 
Eraser ©   (2006-10-04 01:06) [3]

> [0] majer_rv ©   (03.10.06 22:10)


> как вставить строку в начало файла

см. TStringList.Insert

> как удалить строку определенной длины из начала файла

см. [1]
  Delete(0);  // удалить первую строку
  Strings[0] := "Заменить первую строку";


 
Германн ©   (2006-10-04 01:56) [4]


> Dmitrij_K   (03.10.06 22:28) [1]
>
...
> Для больших файлов все сложнее.
>

В формате сабжа, т.е. при работе с первой строкой текстового файла, не только не сложнее, но и вообще не трудно. Нужно только работать с данным файлом как с бинарным. Имхо.


 
ЮЮ ©   (2006-10-04 08:55) [5]


> т.е. при работе с первой строкой


Если бы речь шла об изменении данных. Но как это поможет для subj-евых желаний?


 
Германн ©   (2006-10-04 14:41) [6]


> Но как это поможет для subj-евых желаний?

Не надо будет загружать весь файл в память.


 
majer_rv ©   (2006-10-05 10:52) [7]

Спасиба! =)
...но что если файл не текстовый и не очень маленький (10Мб)?


 
Dmitrij_K   (2006-10-05 10:55) [8]


> ...но что если файл не текстовый ...?

тогда у него нет строк


 
majer_rv ©   (2006-10-05 10:55) [9]

спасиба! =)
...а что если файл не текстовый и не очень маленький (10Мб) ?


 
majer_rv ©   (2006-10-05 11:02) [10]

ну тогда по как вставить 10 символов в начало файла,
а потом удалить первые 10 символов?


 
han_malign ©   (2006-10-05 11:26) [11]


> ...а что если файл не текстовый и не очень маленький (10Мб) ?

- 10Мб - халява, даже 100Мб - не критично. Вот под 1Гб - это уже только копированием из файла в файл с добавлением данных в нужном месте - просто может пространства виртуальных 32-битных адресов не хватить(4Гб минус 2Гб системный резерв), да и путь файл->swap-файл->файл - менее эффктивен чем rename(файл)->файл. Если конечно не это 64-бит система с террабайтом на борту...

> ну тогда по как вставить 10 символов в начало файла, а потом удалить первые 10 символов?

схематично:
RenameFile(fn1, fn2);
f1:= FileCreate(fn1);
f2:= FileOpen(fn2,  fmOpen);
//"remove"
FileRead(f2, buf, 10);//skip first 10 byte
//"add"
FileWrite(f1, newdata, sizeof(newdata));
//transfer other
while FileWrite(f1, buf, FileRead(f2, buf, sizeof(buf))) > 0 do ;
FileClose(f1);
FileClose(f2);
DeleteFile(fn2);

- ессесно надо бы добавить везде проверки на ошибку...


 
majer_rv ©   (2006-10-05 15:43) [12]

пасиба!
супер!
всё работает! =)



Страницы: 1 вся ветка

Текущий архив: 2006.10.22;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.055 c
2-1159786539
Antoxa2005
2006-10-02 14:55
2006.10.22
Что это за ЗВЕРЬ. После разработки проекта оказалось, что програм


15-1159505220
boriskb
2006-09-29 08:47
2006.10.22
Энциклопедия целочисленных последовательностей.


2-1160244953
learner
2006-10-07 22:15
2006.10.22
Аналог SysErrorMessage для NTSTATUS.


15-1159674869
Fedia
2006-10-01 07:54
2006.10.22
ссылка на рейтинг функций, аналогов Pos


15-1159169977
Тугодум
2006-09-25 11:39
2006.10.22
В чем корни пассивности общества?