Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.03.28;
Скачать: CL | DM;

Вниз

Как в StringGrid забросить данные из *.txt файла ?   Найти похожие ветки 

 
IronHawk ©   (2002-03-15 22:46) [0]

Пиветствую Мастеров !
Как правильно и без багов сбросить из *.тхт файла данные в StringGrid учитывая разделитель "|"
между столбцами !
примерное содержание *.тхт файла:
123|мама|один
.....
456|папа|двадцать
......
789|я|последний


.... заранее благодарен !


 
lipskiy ©   (2002-03-15 23:27) [1]

А в чем проблема?
Читаешь строку из файла, пробегаешь циклом по ней, по признаку разделителя получаешь текст ячейки, кидаешь в грид.


 
MBo ©   (2002-03-16 07:43) [2]

проще всего так
sl:TStringList;
i:integer;
begin
sl:=TStringList.Create;
sl.LoadFromFile("e:\qq.txt");
//SG.RowCount:=sl.Count
//ColCount должен быть правильным, если есть сомнения, на каждом шаге можно проверять
for i:=0 to sl.Count-1 do
SG.Rows[i].CommaText:=StringReplace(sl[i], "|" , "," ,[rfReplaceAll]);
Если читаешь файл другим способом, этот прием все равно можно применить для строк.


 
lipskiy ©   (2002-03-16 11:21) [3]

А если полезный текст содержит запятые?


 
MBo ©   (2002-03-16 11:44) [4]

тогда ой. расчет на приведенный формат
в таком случае надокак ты сказал или можно извратно

if Pos(",",sl[i])>0 then begin
S:=StringReplace(sl[i], "," , "`" ,[rfReplaceAll]);
SG.Rows[i].CommaText:=StringReplace(s, "|" , "," ,[rfReplaceAll]);
SG.Rows[i].Text:=StringReplace(SG.Rows[i].Text, "`" , "," ,[rfReplaceAll]);
end;


 
lipskiy ©   (2002-03-16 11:53) [5]

2 MBo
Ну уж точно изврат! :)
А если в полезном тексте есть "`" :)))
Шутка.
Но вообще, для приведенного формата CommaText конечно проще.


 
Song ©   (2002-03-16 12:50) [6]

Не знаю, я б такой вариант предложил бы:

AssignFile(ff,"text.dat");
Reset(ff);
r:=1;
With StringGrid1 Do
Begin
While not Eof(ff) Do
Begin
ReadLn(ff,S);
With TStringList.Create Do
try
Text:=S;
Text:=StringReplace(Text,"|",#13#10,[rfReplaceAll]);
Rows[r]:=Text;
finally
Free;
end;
Inc(r);
End;
RowCount:=r;
End;
CloseFile(ff);


 
IronHawk ©   (2002-03-16 13:05) [7]

Всем огромное спасибо
Особые благодарности :
MBo ©
Song ©


Спасибо !


 
olookin ©   (2002-03-16 13:57) [8]

А по моему гораздо проще добавить символ "|" в конце строки, т.е. не
папа|мама|бабушка

а

папа|мама|бабушка|

Тогда все решительно проще (как я и делаю с текстовыми файлами)


 
Oleg_K   (2002-03-16 15:19) [9]

А как быть если в столбце нужно записать несколько слов? Метод, предложенный МВо, после пробела пропусакет символы.

Наприемр нужно:

11111|здесь несколко слов|sdsdsd
222|здесь тоже| wewwe

Второй столбец StrihgGrid"а должен содержать не только слов "здесь", а все словосочетание.


 
olookin ©   (2002-03-16 15:40) [10]

Поиском по "|" все у меня читается и с пробелами. Причем в while.


 
olookin ©   (2002-03-16 15:42) [11]

Например:

while a<>"" do begin s:=Copy(a,1,Pos("|",a)-1);
SetLength(IniFile.EqapFile,i+1); IniFile.EqapFile[i]:=s;
Delete(a,1,Pos("|",a)); i:=i+1; end;

У меня все работает.


 
IronHawk ©   (2002-03-16 22:27) [12]


> olookin ©

Спасибо !



А каким образом подхватывать из файла количество строк и присваивать это количество StrihgGrid-у
???


 
MBo ©   (2002-03-17 06:54) [13]

7 строчка 16.03.02 07:43
этим и удобен TSTringList


 
IronHawk ©   (2002-03-17 17:24) [14]


> olookin © (16.03.02 15:42)

А зачем мне через IniFile работать мне без него надо !

Как так сотворить и с пробелами ???


 
olookin ©   (2002-03-17 18:20) [15]

Это не более чем пример. Вместо IniFile используйте просто массив типа String.

Что касается пробелов, то действуйте также (само собой разумеется, что полезные символы не содержат пробела). Например:

"папа мама бабушка "

ищите в этой строке симвло " " и все будет в порядке.


 
IronHawk ©   (2002-03-17 21:53) [16]


> olookin © (16.03.02 15:42)
> Например:
>
> while a<>"" do begin s:=Copy(a,1,Pos("|",a)-1);
> SetLength(IniFile.EqapFile,i+1); IniFile.EqapFile[i]:=s;
> Delete(a,1,Pos("|",a)); i:=i+1; end;
>
> У меня все работает.

Извините !
А версия Delphi у Вас какая ???


 
IronHawk ©   (2002-03-18 11:33) [17]

to ALL Oleg_K прав !
Пробелы мешают !
Как лечить ???


 
MBo ©   (2002-03-18 12:48) [18]

по идее Song-а
за ColCount сам следи

procedure TForm1.Button1Click(Sender: TObject);
var sl:TStringList;
i:integer;
begin
sl:=TStringList.Create;
sl.LoadFromFile("e:\aa.txt");
With StringGrid1 Do Begin
RowCount:=sl.Count;
for i:=0 to sl.Count-1 do begin
sl[i]:=StringReplace(sl[i],"|",#13#10,[rfReplaceAll]);
Rows[i].Text:=sl[i];
end;
end;
sl.Free;
end;


 
IronHawk ©   (2002-03-18 14:07) [19]


> MBo © (18.03.02 12:48)

Спасибо !

Всё работает !
БЛАГОДАРЮ ВАС, УВАЖАЕМЫЙ !
Всех благ !



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

Текущий архив: 2002.03.28;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.017 c
3-90801
LEKSYS
2002-03-04 16:50
2002.03.28
TreeView


6-91019
Vasya
2002-01-14 15:35
2002.03.28
По поводу подключения к интернет сказано много но..


1-90993
harismatik
2002-03-15 13:22
2002.03.28
Позиционирование курсора в компоненте TEdit


1-90819
Ryser
2002-03-14 13:43
2002.03.28
Замена символов в строке.


1-90868
Juckser
2002-03-05 20:53
2002.03.28
Как сделать, чтобы при открытии Wave-файла запускалась моя программа, и MediaPlayer в ней, воспроизвел этот файл?