Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 05.02.2011, 22:01
juggle juggle вне форума
Прохожий
 
Регистрация: 12.12.2010
Сообщения: 24
Репутация: -20
Стрелка Разделить строку данных на отдельные числа

Народ, подскажите, пожалуйста, как мне реализовать заполнение данных из txt фаила в SrtingGrid.
Фаил заполнен так:
2 3 4
5 6 7
.....
Когда я пытаюсь подгрузить такой фаил, то у меня заполняется первый столбец данными всей строки, а мне надо чтобы каждое число в своей ячейке было. Что нужно поменять?
Код:
//DownLoad the file
procedure TForm1.Button2Click(Sender: TObject);
 
  var
  i,j,m,n:integer;
  s:string;
  input:TextFile;
 
begin
 
if OpenDialog1.Execute then
      begin
 
    AssignFile(input, OpenDialog1.FileName);
    Reset(input);
  
     m:=strtoint(Edit1.Text);
     n:=strtoint(Edit2.Text);
 
    for i := 0 to m - 1 do
    begin
       for j := 0 to n - 1 do
       begin
         Readln(input, s);
         StringGrid1.Cells[i,j] := s;
       end;
       Readln(input);
    end;
       CloseFile(input);
  end;
Ответить с цитированием
  #2  
Старый 05.02.2011, 22:12
Аватар для GriLab
GriLab GriLab вне форума
Начинающий
 
Регистрация: 26.11.2010
Адрес: Минск
Сообщения: 190
Версия Delphi: XE 15.0.3890
Репутация: 415
По умолчанию

Цитата:
Сообщение от juggle
Народ, подскажите, пожалуйста, как мне реализовать заполнение данных из txt фаила в SrtingGrid.
Фаил заполнен так:
2 3 4
5 6 7
.....
Когда я пытаюсь подгрузить такой фаил, то у меня заполняется первый столбец данными всей строки, а мне надо чтобы каждое число в своей ячейке было. Что нужно поменять?
Код:
//DownLoad the file
procedure TForm1.Button2Click(Sender: TObject);
 
  var
  i,j,m,n:integer;
  s:string;
  input:TextFile;
 
begin
 
if OpenDialog1.Execute then
      begin
 
    AssignFile(input, OpenDialog1.FileName);
    Reset(input);
  
     m:=strtoint(Edit1.Text);
     n:=strtoint(Edit2.Text);
 
    for i := 0 to m - 1 do
    begin
       for j := 0 to n - 1 do
       begin
         Readln(input, s);
         StringGrid1.Cells[i,j] := s;
       end;
       Readln(input);
    end;
       CloseFile(input);
  end;

Я бы это делал по другому

Код:
    
for i := 0 to m - 1 do
begin
  for j := 0 to n - 1 do
  begin
    Read(input, s);
    StringGrid1.Cells[i,j] := s;
  end;
end;
Ответить с цитированием
  #3  
Старый 05.02.2011, 22:47
juggle juggle вне форума
Прохожий
 
Регистрация: 12.12.2010
Сообщения: 24
Репутация: -20
По умолчанию

В этом случае у меня считывается только первая строка и заполняется только первая верхняя ячейка.
Нужны еще идеи
Ответить с цитированием
  #4  
Старый 05.02.2011, 23:28
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

Структура такая:
2 3 4
5 6 7
.....

и не иначе?

Тоесть не может быть?:
23 3 4
55 56 7 6 7
3
45 54 65

Просто как вопрос задаш - такой и ответ получишь.
Ответить с цитированием
  #5  
Старый 05.02.2011, 23:51
juggle juggle вне форума
Прохожий
 
Регистрация: 12.12.2010
Сообщения: 24
Репутация: -20
По умолчанию

Дана матрица m x n, т.е. во всех строках одинаковое количество цифр (m цифр), со стобцами аналогично.
Цифры могут быть как одно-, так и двузначиными, но все положительные!)

m и n задаются мною через ГУИ (Edit поля) и именно столько значений я хочу видеть в итоге (а не столько сколько есть в фаиле).

Последний раз редактировалось juggle, 05.02.2011 в 23:54.
Ответить с цитированием
  #6  
Старый 06.02.2011, 00:04
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

числа от 0 до 9 записываются 0,1,2 или 00,01,02,03 ?
Ответить с цитированием
  #7  
Старый 06.02.2011, 00:13
juggle juggle вне форума
Прохожий
 
Регистрация: 12.12.2010
Сообщения: 24
Репутация: -20
По умолчанию

числа записываются вот так: 3 4 23 43 2 (например)
т.е. без нулей в начале и без запятых, разделяются пробелами.
Ответить с цитированием
  #8  
Старый 06.02.2011, 00:19
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

Цитата:
Сообщение от juggle
числа записываются вот так: 3 4 23 43 2 (например)
т.е. без нулей в начале и без запятых, разделяются пробелами.

Ну тогда придется разбирать каждую строку.

Тоесть в
"3 4 23 43 2"
ищешь 1-й пробел, копируешь число от начала до 1-го пробела,
далее между 1-м и 2-м и т.д. до конца строки.
Далее переходим на 2-ю, потом 3-ю и т.д. до конца файла.


Правда есть более изощренный способ, с оптимизацией, но он явно не для твоего уровня знаний.

Последний раз редактировалось Konrad, 06.02.2011 в 00:42.
Ответить с цитированием
  #9  
Старый 06.02.2011, 02:24
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Так попробуйте:
Код:
Var
  Cells: TStringList;
  T: TextFile;
  S: String;
  C,R: Integer;
begin
 Cells := TStringList.Create;
 AssignFile(T, 'UserData.txt');
 Reset(T);
 R := 0;
 while not Eof(T)
 do begin
    ReadLn(T, S);
    Cells.Text := StringReplace(S,#32,#13#10,[rfReplaceAll]);
    for C := 0 to Cells.Count - 1
    do StringGrid1.Cells[R,C] := Cells.Strings[C];
    Inc(R);
    end;
 CloseFile(T);
end.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #10  
Старый 06.02.2011, 14:11
juggle juggle вне форума
Прохожий
 
Регистрация: 12.12.2010
Сообщения: 24
Репутация: -20
По умолчанию

Страдалецъ, у меня вылетает ошибка:
Project Project1.exe raised exception class EStringListError with message 'List index out of bounds (6)'. Process stopped. Use Step or Run to continue.

на строке
for C := 0 to Cells.Count - 1
Ответить с цитированием
  #11  
Старый 06.02.2011, 18:35
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Не должно вообще-то. Я хоть и перепутал там строки со столбцами при записи в грид (должно быть так):
Код:
StringGrid1.Cells[C,R] := Cells.Strings[C]; 
но ошибки это не должно давать.
Проверил на тестовом файле - все ок.
Киньте ваш файлик с данными.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #12  
Старый 06.02.2011, 22:56
juggle juggle вне форума
Прохожий
 
Регистрация: 12.12.2010
Сообщения: 24
Репутация: -20
По умолчанию

Вот, пожалуйста.
В файлик добавлен input1.txt, его подгружаю.
Вложения
Тип файла: rar LR_7_3 - FILE -for_forum.rar (8.3 Кбайт, 2 просмотров)
Ответить с цитированием
  #13  
Старый 07.02.2011, 03:10
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

вот ваш код:
Код:
 while not Eof(input)
 do begin
    ReadLn(input, S);
    Cells.Text := StringReplace(S,#32,#13#10,[rfReplaceAll]);
    for j := 0 to n - 1
    do StringGrid1.Cells[j,i] := Cells.Strings[j];
    Inc(i);
    end;
вот мой:
Код:
while not Eof(T)
 do begin
    ReadLn(T, S);
    Cells.Text := StringReplace(S,#32,#13#10,[rfReplaceAll]);
    for C := 0 to Cells.Count - 1
    do StringGrid1.Cells[R,C] := Cells.Strings[C];
    Inc(R);
    end;
Разницу в границах цикла не замечаете?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #14  
Старый 07.02.2011, 10:15
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

Мда...
http://www.cyberforum.ru/delphi-begi...ead238678.html

Заметте с какого кода он начал там пост..

Ведь с кодом помогут охотнее))))
Неважно чей он, и на каком форуме получен))))))

Последний раз редактировалось Konrad, 07.02.2011 в 10:24.
Ответить с цитированием
  #15  
Старый 07.02.2011, 11:14
juggle juggle вне форума
Прохожий
 
Регистрация: 12.12.2010
Сообщения: 24
Репутация: -20
По умолчанию

Страдалецъ, да нашла ошибку, спасибо за наставничество. Все заработало.

Konrad, код с которого я начала пост был собран из разных мест и написан мной. И да, я сюда пришла потому что сама не могу полностью разобраться в Делфи, а Вы зачем сюда пришли? Показать что самый умный? Жалкое зрелище.
И я свой вопрос постила в 3 форума, и что???

Страдалецъ, спасибо еще раз, если бы у меня был человек, который бы объяснил мне основы, я бы не беспокоила Вас.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:43.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter