Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.51 MB
Время: 0.029 c
2-1166112610
Khabibulin
2006-12-14 19:10
2006.12.31
Выделить нужную ячейку в StringGrid


15-1165740768
Cyrax
2006-12-10 11:52
2006.12.31
Системное/низкоуровневое программирование: C vs C++


15-1165981717
Slider007
2006-12-13 06:48
2006.12.31
С днем рождения ! 13 декабря


6-1154989722
Rembo
2006-08-08 02:28
2006.12.31
интернет радио: сервер


15-1166058481
Бугага
2006-12-14 04:08
2006.12.31
«Черную дыру» поймали с поличным