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

Вниз

Большие *.тхт   Найти похожие ветки 

 
Данил.Ялта   (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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.044 c
15-1165577567
sergeyst
2006-12-08 14:32
2006.12.31
TCP/IP


2-1166100563
Ольчик
2006-12-14 15:49
2006.12.31
максимальное значение в count


4-1156274077
Dot
2006-08-22 23:14
2006.12.31
поиск hwnd одного из двух окон


1-1163508605
Axis_of_Evil
2006-11-14 15:50
2006.12.31
TListBox: Items разной высоты


2-1165918031
Клара
2006-12-12 13:07
2006.12.31
Поиск





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