Текущий архив: 2006.12.31;
Скачать: CL | DM;
ВнизБольшие *.тхт Найти похожие ветки
← →
Данил.Ялта (2006-12-12 08:18) [0]У меня есть текстовый файл, размером не больше 10 мегабайт. Помогите нормально реализовать три функции:
1) получить из этого файла строку символов, начинающуюся с i и длиной L (
L<5000)
2) вырезать из этого файла какой то участок
3) вставить в каком нибудь месте файла кусок текста
==
Помогите, потому что единственное, что мне приходит в голову, это весь file читать в array of char
← →
Данил.Ялта (2006-12-12 08:21) [1]Но если так делать, то из file of char очень медленно будут данные читаться :-(
← →
Elen © (2006-12-12 08:21) [2]
> это весь file читать в array of char
Лучше в TFileStream. Я правда не знаю потянет ли TListBox такие файлы, но можно и его попробвать.
← →
Elen © (2006-12-12 08:24) [3]
> о если так делать, то из file of char очень медленно будут
> данные читаться :-(
Смотря как читать. Например BlockRead очень быстрая функция, а анализ содержимого уже в памяти проводи. Ну может еще подкачку придется делать
← →
Думкин © (2006-12-12 08:26) [4]Можно и обычный string - тянет в легкую. Единственно изменять надо аккуратно - тут могут и тормоза вылезти. Или TstringList.
← →
Думкин © (2006-12-12 08:35) [5]
> Данил.Ялта (12.12.06 08:21) [1]
Почему медленно? ты попробал, раз утверждаешь?
← →
Barloggg (2006-12-12 09:42) [6]да, как массив букв с загрузкой поштучно это долго. это очень долго.
Нужно загружать как можно большим куском и уже в памяти проводить анализ. Тогда хорошо.
Так что либо уже указанный blockread куском в массив либо тоже уже указанный FileStream куском в массив.
← →
Игорь Шевченко © (2006-12-12 10:58) [7]Грузить в TListBox и не париться. Все равно в Delphi других методов чтения текстовых файлов нету.
Насоветуют...
← →
Dmitrij_K (2006-12-12 11:04) [8]
> размером не больше 10 мегабайт
TStringList нормально с этим справиться.
← →
Думкин © (2006-12-12 11:09) [9]
> Игорь Шевченко © (12.12.06 10:58) [7]
? Кто-то говорил о визуализации? Чем TStringList не устраивает?
Насоветуют...
← →
Игорь Шевченко © (2006-12-12 11:20) [10]Думкин © (12.12.06 11:09) [9]
Единственный метод чтения текстовых файлов в Delphi, это загрузка их в TListBox. Если визуализация не нужна - в невидимый TListBox
← →
Dmitrij_K (2006-12-12 11:24) [11]
> Игорь Шевченко © (12.12.06 11:20) [10]
> Единственный метод чтения текстовых файлов в Delphi, это
> загрузка их в TListBox. Если визуализация не нужна - в невидимый
> TListBox
Не единственный, еще есть Tmemo, Trichedit. Еще можно установить на компьютер MS Word и грузить с помощью TWordApplication+TWordDocument
:)
← →
Игорь Шевченко © (2006-12-12 11:26) [12]Dmitrij_K (12.12.06 11:24) [11]
Это не для начинающих
← →
Gydvin © (2006-12-12 11:50) [13]
> Игорь Шевченко © (12.12.06 11:20) [10]
Типа шутка? )))
← →
Игорь Шевченко © (2006-12-12 12:21) [14]Gydvin © (12.12.06 11:50) [13]
Типа ответ в стиле delphimaster
← →
MetalFan © (2006-12-12 12:26) [15]зачем невидимый TListBox??? чем StringList не угодил?
← →
AndreyRu (2006-12-12 13:02) [16]Реализуй чтение файла старым добрым способом!
....
....
private
a : array of string;
....
....
var
f : TextFile;
FSize, i : Cardinal;
tmp : string;
begin
AssignFile(f, FileName); //FileName - Имя твоего могучего файла
Reset(f);
fSize := FileSize(f); //Размер файла
while not Eof(f) do
begin
ReadLn(f, tmp);
SetLength(a, Length(a)+1); //величиваем размерность массива на 1
a[Length(a)-1] := tmp;
end;
CloseFile(f);
//Все массив строк получили теперьможно над ними работать.
> 1) получить из этого файла строку символов, начинающуюся
> с i и длиной L (
> L<5000)
> 2) вырезать из этого файла какой то участок
> 3) вставить в каком нибудь месте файла кусок текста
1) Для копирования части строки предусмотренна функция Copy
Copy(Строка, Начало, Длинна);
s := a[n]; //n-Номер строки
i := 5; //Номер символа с которого начинается наша строка
l := 20; //Длинна нашей строки;
Res := copy(s, i, l); //Все переменная Res содержит нужный кусок строки.
2) Для вырезки куска строки есть процедура Delete
Delete(Строка, Начало, Длинна);
i := 5; //Номер символа с которого начинаем вырезать
l := 20; //Длинна
a[n]; //Строка нашего массива, где n-Номер строки
Delete(a[n], i, l);
3) s := a[n]; //n-Номер строки
i := 5; //Номер символа с которого начинается вставка промежуточного текста.
Res := copy(s, 1, i) + "ЛЮБОЙ ТЕКСТ" + copy(s, i+1, Length(s));
a[n] := Res; //Все строка обновленна
Сохраняем обратно
var
f : TextFile;
s : string;
i : integer;
begin
AssignFile(f, FileName); //FileName - Имя файла в который сохраняем
Rewrite(f);
for i := 0 to Length(a)-1 do
begin
s := a[i];
WriteLn(f, s);
end;
CloseFile(f);
end;
Все..
← →
Игорь Шевченко © (2006-12-12 13:17) [17]AndreyRu (12.12.06 13:02) [16]
Где бы взять столько времени...
Страницы: 1 вся ветка
Текущий архив: 2006.12.31;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.051 c