Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.10.22;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.042 c
15-1159783394
Slider007
2006-10-02 14:03
2006.10.22
С днем рождения ! 30 сенября


2-1159907714
RASkov
2006-10-04 00:35
2006.10.22
Незнаю как назвать. (Заполнение свойства при создании объекта)


15-1159466282
FedorC
2006-09-28 21:58
2006.10.22
Удаленка для Delphi программиста со знанием английского


2-1160031008
den74
2006-10-05 10:50
2006.10.22
ShellExecute и WinRar


4-1149788245
Steplerr
2006-06-08 21:37
2006.10.22
С консолью через хендл





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