Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

вставить строку в файл [D7]


majer_rv ©   (2006-10-03 22:10:00) 

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


majer_rv   (2006-10-05 15:43:00) [1]

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


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


> ...а что если файл не текстовый и не очень маленький (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 11:02:00) [3]

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


Dmitrij_K   (2006-10-05 10:55:00) [4]


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

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


majer_rv   (2006-10-05 10:55:00) [5]

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


majer_rv   (2006-10-05 10:52:00) [6]

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


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


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

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


ЮЮ   (2006-10-04 08:55:00) [8]


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


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


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


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

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


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

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


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

см. TStringList.Insert

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

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


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

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


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

Если файл не большой или скорость работы алгоритма не критична, то можно использовать 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;


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


Наверх

Титульная страница Поиск, карта сайта Написать письмо