Главная страница
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.036 c
15-1159418753
Climber
2006-09-28 08:45
2006.10.22
sql-запросы


15-1159470172
EkZot
2006-09-28 23:02
2006.10.22
Как прервать цикл for


15-1159643531
Ученик чародея.
2006-09-30 23:12
2006.10.22
Чем вы пользуетесь для выбора папок?


2-1159793101
thvfrjd
2006-10-02 16:45
2006.10.22
элемент управления


15-1159783657
Slider007
2006-10-02 14:07
2006.10.22
С днем рождения ! 29 сентября