Форум: "Начинающим";
Текущий архив: 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