Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как в StringGrid забросить данные из *.txt файла ? [D5, Win95/98, NT4, Win2k]


IronHawk ©   (2002-03-15 22:46:00) 

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


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


IronHawk   (2002-03-18 14:07:00) [1]


> MBo © (18.03.02 12:48)

Спасибо !

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


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

по идее 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 11:33:00) [3]

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


IronHawk   (2002-03-17 21:53:00) [4]


> 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 у Вас какая ???


olookin   (2002-03-17 18:20:00) [5]

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

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

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

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


IronHawk   (2002-03-17 17:24:00) [6]


> olookin © (16.03.02 15:42)

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

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


MBo   (2002-03-17 06:54:00) [7]

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


IronHawk   (2002-03-16 22:27:00) [8]


> olookin ©

Спасибо !



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


olookin   (2002-03-16 15:42:00) [9]

Например:

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;

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


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

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


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

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

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

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

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


olookin   (2002-03-16 13:57:00) [12]

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

а

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

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


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

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


Спасибо !


Song   (2002-03-16 12:50:00) [14]

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

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);


lipskiy   (2002-03-16 11:53:00) [15]

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


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

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

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:21:00) [17]

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


MBo   (2002-03-16 07:43:00) [18]

проще всего так
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-15 23:27:00) [19]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо