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

Вниз

Как использовать потоки для быстрого чтения текстового файла?   Найти похожие ветки 

 
TInteger   (2013-09-17 12:16) [0]

Привет мастера! Подскажите плиз как быстро прочитать текстовый файл построчно в StringGrid(одна колонка)? Нагуглил что использование потоков ускорит дело, но понятного мне примера не нашел :( И еще не пониманию что лучше применить TFileStream или TSringStream?


 
sniknik ©   (2013-09-17 12:21) [1]

> Нагуглил что использование потоков ускорит дело
врут. сами по себе потоки ничего не ускоряют...

вот, что реально ускорит, так это отказ от визуальных компонент для чтения в них... разделяй в общем данные и отображение.


 
TInteger   (2013-09-17 12:41) [2]

>sniknik Вначале прочитать все из файла а потом заполнить данными таблицу?


 
sniknik ©   (2013-09-17 12:59) [3]

причитать и НЕ заполнять таблицу... отображать только нужное по мере необходимости. (аналоги DBGrig - дфтасеты, TreeView - виртуальный режим)


 
TInteger   (2013-09-17 13:25) [4]

А как быстрее прочитать построчно текстовый файл используя потоки? И куда кинуть данные чтобы потом когда нужны прочитать в грид?


 
[ВладОшин] ©   (2013-09-17 13:31) [5]


>  как быстрее прочитать построчно текстовый файл используя
> потоки?

А как читаешь на данный момент?


 
TInteger   (2013-09-17 13:48) [6]

Пробовал так:
procedure LoadingGrid(s:String);
var
fileList:TStringList;
i:Integer;
begin
 fileList:= TStringList.Create;
 try
   fileList.LoadFromFile(s);
   for i:= 0 to fileList.Count-1 do Form1.StringGrid1.Cells[0,i]:= fileList[i];
 finally
   fileList.Free;
 end;
end;

LoadingGrid("text.txt");

Вобще ничего не читает :(


 
Anatoly Podgoretsky ©   (2013-09-17 14:26) [7]

> TInteger  (17.09.2013 13:48:06)  [6]

В текущем положение нет файла "text.txt"


 
[ВладОшин] ©   (2013-09-17 14:30) [8]

Странно, у меня читает. А как определил, что не читает?

А можно так
  StringGrid1.RowCount := fileList.Count;
  StringGrid1.Cols[0] :=  fileList;
вместо
//   for i:= 0 to fileList.Count-1 do Form1.sg1.Cells[0,i]:= fileList[i];

TC := GetTickCount;
fileList:= TStringList.Create;
try
  fileList.LoadFromFile("D:\a.txt"); // файло 4 метра
  StringGrid1.RowCount := fileList.Count;
  StringGrid1.Cols[0] :=  fileList;
finally
  fileList.Free;
end;
ShowMessage( IntToStr(GetTickCount - TC) );

47 тиков


 
TInteger   (2013-09-17 14:34) [9]

Файл точно есть. Не читает потому что не заполняется грид. (ХЕ5,андроид приложение) Как применить чтение потоком из файла в грид?


 
TInteger   (2013-09-17 14:39) [10]

StringGrid1.Cols[0] :=  fileList;
[DCC Error] Unit1.pas(338): E2003 Undeclared identifier: "col"
:(


 
TInteger   (2013-09-17 14:40) [11]

StringGrid1.Cols[0] :=  fileList;
[DCC Error] Unit1.pas(338): E2003 Undeclared identifier: "cols"
вернее :)


 
[ВладОшин] ©   (2013-09-17 14:45) [12]

S :=  format("%d %d %d %d",[ StringGrid1.RowCount, StringGrid1.ColCount,    StringGrid1.FixedCols, StringGrid1.FixedRows]);

перед
 >> for i:= 0 to fileList.Count-1 do Form1.StringGrid1.Cells[0,i]:= fileList[i];

чему равно S?


 
[ВладОшин] ©   (2013-09-17 14:48) [13]


> ХЕ5,андроид

И что, там нет ?

 TStringGrid = class(TDrawGrid)

 public

   property Cols[Index: Integer]: TStrings read GetCols write SetCols;

мда..


 
Ega23 ©   (2013-09-17 14:52) [14]

Для начала я бы порекомендовал не забывать про BeginUpdate - EndUpdate
Порой на порядок-два ускорение даёт.


 
TInteger   (2013-09-17 14:53) [15]

9999 17 0 0


 
TInteger   (2013-09-17 14:57) [16]

Похоже нет, раз компилятор ругается :(


 
Anatoly Podgoretsky ©   (2013-09-17 14:58) [17]

> TInteger  (17.09.2013 14:34:09)  [9]

А чем докажешь, что в текущем месте есть этот файл?


 
[ВладОшин] ©   (2013-09-17 15:01) [18]

а вообще, что -то видно, в любых других ячейках, если писать хоть что-нибудь?
for i:= 0 to 9 do Form1.StringGrid1.Cells[random(10),random(10)]:= "qwert";


 
TInteger   (2013-09-17 15:05) [19]

>Anatoly Podgoretsky Чесное пионерское! :)
>[ВладОшин] Вручную пишу данные,тогда отображает: StringGrid1.Cells[0,0]:="1";


 
[ВладОшин] ©   (2013-09-17 15:06) [20]


> А чем докажешь, что в текущем месте есть этот файл?

кстати, да

try
  if not(FileExists(s)) then
  begin
    ShowMessage("!!");
    Exit;
  end;
  fileList.LoadFromFile(s);

хотя LoadFromFile( из несуществующего, должен дать Exception


 
[ВладОшин] ©   (2013-09-17 15:08) [21]

а подшовь-ка мессагу на предмет  fileList.Count = ?


 
TInteger   (2013-09-17 15:09) [22]

Вот так читает, но долго:
procedure LoadingGrid(s:String);
var
f: TextFile;
n:Integer;
q:String;
begin
AssignFile(f,s);
Reset(f); n:=0;
Form1.StringGrid1.BeginUpdate;
 while not EOF(f) do
 begin
   readln(f, q);
   Form1.StringGrid1.Cells[0,n]:=q;
   n:=n+1;
 end;
 CloseFile(f);
 Form1.StringGrid1.EndUpdate;
end;


 
TInteger   (2013-09-17 15:10) [23]

Файл 321кб, fileList.Count =2070


 
Anatoly Podgoretsky ©   (2013-09-17 15:34) [24]

Это далеко не чтение файла, убери Form1.StringGrid1.Cells[0,n]:=q; и n:=n+1;


 
[ВладОшин] ©   (2013-09-17 15:39) [25]

А тут написано, что есть св-во
http://docwiki.embarcadero.com/Libraries/XE5/en/Vcl.Grids.TStringGrid.Cols


 
Anatoly Podgoretsky ©   (2013-09-17 15:40) [26]

Пионерское уже не в почете, нужно документально подтвердить и желательно при разных запусках.


 
TInteger   (2013-09-17 15:41) [27]

>Anatoly Podgoretsky А как присвоить прочитанное значение и увеличить пор.номер след присваиваемой строки? inc?


 
TInteger   (2013-09-17 15:42) [28]

>[ВладОшин]  Похоже Андроидский грид отличается :( иначе чего бы компилятору возмущатся?


 
[ВладОшин] ©   (2013-09-17 16:18) [29]

а почему постоянно упоминается
Form1.
?

procedure LoadingGrid(s:String); она где объявлена?


 
TInteger   (2013-09-17 16:28) [30]

Форма одна, в процедуре если не писать Form1 тогда не узнает компоненты на форме :( Процедура LoadingGrid нигде не объявлена, сама по себе :) А где надо объявить?


 
[ВладОшин] ©   (2013-09-17 16:56) [31]

да это так, уточняю.. По идее не важно.
А так - в разделе Public формы, например, я бы объявил

А весь код модуля можно глянуть?
Что-то странное творится :)



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2014.07.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.017 c
15-1388223885
Asi
2013-12-28 13:44
2014.07.20
Что с MP3 ?


2-1379180657
Сергеев Саня
2013-09-14 21:44
2014.07.20
XE5 SpeedButton Как присвоить Image?


15-1388121833
Jeer
2013-12-27 09:23
2014.07.20
Все - дед!


2-1379272373
vasa777
2013-09-15 23:12
2014.07.20
unrar


15-1388304091
Мишаня
2013-12-29 12:01
2014.07.20
Ищу книгу





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