Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.04.2012, 22:09   #1
Lier
Пользователь
 
Регистрация: 21.04.2012
Сообщений: 18
По умолчанию Открытие файла в StringGrid

Добрый вечер. Есть объект StringList из 3 столбцов. Фото прилагается. Есть файл, например 1.txt. Как его открыть так, чтобы до первого пробела текст записался в первую колонку IP, до второго пробела в Сайт и таким же макаром в третий?


Я новичок и если вы просто скажите как такое осуществить, не думаю, что до меня дойдетБуду рад, если кто напишет кусочек кода.
Lier вне форума Ответить с цитированием
Старый 28.04.2012, 06:17   #2
WhiskasTM
Подтвердите свой е-майл
 
Регистрация: 11.04.2012
Сообщений: 85
По умолчанию

мдяя, вот что бывает, если вообще не работать со строками, полчаса пыхтеть, зато довооольный
Код:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,
  Vcl.Grids;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
{I-}
procedure TForm1.Button1Click(Sender: TObject);
var
f:TextFile;
s,s1:string;
letter:string;
i,Column:integer;
begin
 AssignFile(f,'d:\1.txt');
 Reset(f);
 ReadLn(f,s1);
Column:=0;

for i := 1 to length(s1)+1 do
begin
letter:=Copy(s1,i,1);
if ((letter = ' ') or (letter = '')) then
begin
 inc(Column,1);
 StringGrid1.Cells[Column,0]:=s;
 s:='';
end
 else
 begin
  s:=s+letter;
 end;
end;
end;

end.
WhiskasTM вне форума Ответить с цитированием
Старый 28.04.2012, 09:28   #3
Lier
Пользователь
 
Регистрация: 21.04.2012
Сообщений: 18
По умолчанию

Спасибо, приду домой, попробую!
Lier вне форума Ответить с цитированием
Старый 28.04.2012, 09:32   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

через Pos (PoxEx) и Copy подобные задачи парсинга решаются обычно проще и быстрее.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.04.2012, 18:53   #5
Lier
Пользователь
 
Регистрация: 21.04.2012
Сообщений: 18
По умолчанию

WhiskasTM, спасибо, всё работает, но только для первой строки, если в файле 2 таких строчки, в стринг грид идет только первая.
Lier вне форума Ответить с цитированием
Старый 28.04.2012, 21:50   #6
Lier
Пользователь
 
Регистрация: 21.04.2012
Сообщений: 18
По умолчанию

Может кому пригодится, вот как решается задачка:
Код:
procedure TForm1.FormCreate(Sender: TObject);
Var
    n,i:integer;
    s:string;
    f:boolean;
    t:textfile;
begin
assignfile(t,'файл');
reset(t);
n:=0;
while not eof(t) do
 begin
  readln(t,s);
  n:=n+1;
 end;
HS.RowCount:=n+1;
HS.Cols[0].LoadFromFile('файл');
for i:=HS.RowCount-1 downto 1 do
HS.Rows[i].Text:=HS.Rows[i-1].Text ;
HS.Cells[0,0]:='текст';
HS.Cells[1,0]:='текст';
HS.Cells[2,0]:='текст';
for i:=1 to HS.RowCount-1 do
 begin
  HS.Rows[i].Delimiter:=' ';
  HS.Rows[i].DelimitedText:=HS.Cells[0,i];
 end;
end;


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 28.04.2012 в 22:51.
Lier вне форума Ответить с цитированием
Старый 28.04.2012, 22:59   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Может кому пригодится, вот как решается задачка:
то, что Вы написали - это же кошмарная жуть...

не, я вполне допускаю, что это всё будет работать, но только за то, что Вы сначала текстовый файл построчно читаете, а потом его грузите в StringList - это уже само по себе шокирует...
Вас спасает только то, что текстовый файл, судя по всему, очень небольшой.

если есть желание, то я (или другой форумчанин, который прочитает данную тему) могу набросать примерчик кода с однократной загрузкой файла...
А если нет (и ваш код Вас устраивает) - то дело Хозяйское..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.04.2012, 10:58   #8
Lier
Пользователь
 
Регистрация: 21.04.2012
Сообщений: 18
По умолчанию

Буду только рад, я повторю, что я ещё новичок и учусь на примерах.
Lier вне форума Ответить с цитированием
Старый 29.04.2012, 11:03   #9
=master=
Форумчанин
 
Регистрация: 26.03.2012
Сообщений: 665
По умолчанию

Так на своем примере и учитесь, и в первую очередь скажите, цик while - он что делает, и зачем нужен.
=master= вне форума Ответить с цитированием
Старый 29.04.2012, 13:26   #10
Lier
Пользователь
 
Регистрация: 21.04.2012
Сообщений: 18
По умолчанию

Ну, здесь while определяет сколько записей в файле или я ошибаюсь? Буду рад, если напишите более правильный на Ваш взгляд код
Lier вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
открытие файла digital-stream Общие вопросы Delphi 3 09.07.2011 23:07
открытие файла vo_sa Общие вопросы C/C++ 7 25.06.2009 11:23
Открытие файла и создание графика на основе чисел из файла Simon..14 Общие вопросы C/C++ 8 09.06.2009 10:18
Открытие файла Veiron Общие вопросы Delphi 2 27.02.2008 03:12
Открытие файла KillbrumX Помощь студентам 5 02.02.2008 20:50