Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 26.06.2012
Сообщений: 26
1

Считывание txt в StringGrid через OpenDialog

06.12.2014, 18:01. Просмотров 2160. Ответов 9
Метки нет (Все метки)

Вечер добрый, начал делать прогу и что то застрял. Задача такая: нужно сделать считывания таблицы из txt(таблица 5*5 без заголовков) файла в StringGrid через OpenDialog. Сделала MainMenu, в нем кнопка, а в кнопка "открыть", а в ней уже процедура открытия файла и добавление содержимого txt в StringGrid. Уже сижу часа 2 и не могу понять что делаю не так. Что бы заполнить StringGrid нужен цикл:
Delphi
1
2
for i=1 to 5 do
for j=1 to 5 do
А вот дальше засада, потому что находил примеры только с сохранением Grida в файл.

На форуме нашел ссылку, сделал под свой вариант, но теперь есть вопрос:
1. Как правильно отделить элементы друг от друга? В файле они у меня представлены так:

1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
20 21 22 23 24
25 26 27 28 29

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

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
procedure TForm1.Open1Click(Sender: TObject);
  var
   f:          TextFile;
   i, k: Integer;
   S : String;
   strTemp: string;
 begin
    if not OpenDialog1.Execute then Exit else S := OpenDialog1.Filename;
   AssignFile(f, S);
   Reset(f);
   with StringGrid1 do
   begin
     
    
    for i := 0 to 4 do
       for k := 0 to 4 do
       begin
         Readln(f, S);
         Cells[i, k] := S;
       end;
   end;
   CloseFile(f);
0
Миниатюры
Считывание txt в StringGrid через OpenDialog  
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.12.2014, 18:01
Ответы с готовыми решениями:

Считывание из txt в компонент StringGrid
В txt такой текст Фамилия Имя класс Буква Иванов Иван 1 А Петров Петр 1 Б Сидоров Сидор...

Импорт из Excel в StringGrid через OpenDialog
В приложении нужно данные из Excel импортировать в StringGrid. Код вроде как нашёл, но везде, где...

Занесение базы данных в StringGrid через OpenDialog
Как занести базу данных Access в StringGrid через OpenDialog? И как сохранить через SaveDialog?

Как записать данные в StringGrid через OpenDialog из файла?
Доброго времени суток! Как записать данные в StringGrid через OpenDialog из файла? Есть кнопка...

9
56 / 56 / 29
Регистрация: 01.01.2014
Сообщений: 214
06.12.2014, 18:27 2
Это без использования opendialog
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 var
  i,j,k : integer;
  txt : TextFile;
begin
  assignfile(txt,'input.txt');
  reset(txt);
  j := 1;
 
   while not(EOF(txt)) do
    Begin
     i := 1;
 
     While not(Eoln(txt)) do
      begin
 
       read(txt,k);
       StringGrid1.Cells[i-1,j-1] := inttostr(k);
       i := i + 1;
      end;
       j := j + 1;
       readln(txt);
    end;
 
  closefile(txt);
0
Модератор
60572 / 45566 / 31447
Регистрация: 18.05.2008
Сообщений: 109,517
06.12.2014, 19:43 3
Не нужно читать числа как строки.
Delphi
1
2
3
4
5
6
7
with StringGrid1 do
for i := 0 to 4 do
for k := 0 to 4 do
 begin
  Read(f,a);
  Cells[k,i]:=inttostr(a);
 end;
0
0 / 0 / 0
Регистрация: 26.06.2012
Сообщений: 26
06.12.2014, 20:51  [ТС] 4
Спасибо! Подскажите пожалуйста, в чем ошибка? Нужно найти максимальный элемент. Переписываю StringGrid в массив, ищу максимальное число в таблице, но не могу его вывести. По идеи мне нужно вывести элемент массива(максимальный элемент) и вывести в другой label(Edit, memo) i и j(координаты элемента)
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var
i,j: integer;
jmax, imax: integer;
 
h : array [0..5, 0..5] of string;
begin
  For i:=1 to 5  do
  For j:=1 to 5  do
  h[j,i]:=StringGrid1.Cells[i,j];
 
    //нахождения максималки
    imax:=1;
    jmax:=1;
  For i:=1 to 5  do
  For j:=1 to 5  do
  if h[j,1] > h[jmax,imax] then
  begin
    imax:=i;
    jmax:=j;
  end;
  label1.Caption:='Максимальный элемент:'+(h[imax, jmax];
0
Модератор
60572 / 45566 / 31447
Регистрация: 18.05.2008
Сообщений: 109,517
06.12.2014, 21:00 5
Delphi
1
if h[i,j] > h[imax,jmax] then
0
0 / 0 / 0
Регистрация: 26.06.2012
Сообщений: 26
06.12.2014, 22:53  [ТС] 6
Черт. Вроде всё работало, начал менять цифры местами, понял что где то ошибка.
Кликните здесь для просмотра всего текста

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
procedure TForm1.N3Click(Sender: TObject);
var
i,j, koord: integer;
jmax, imax: integer;
 
h : array [0..5, 0..5] of string;
begin
  For i:=1 to 5  do
  For j:=1 to 5  do
  h[j,i]:=StringGrid1.Cells[i,j];
 
    //íàõîæäåíèÿ ìàêñèìàëêè
    imax:=1;
    jmax:=1;
  For i:=1 to 5  do
  For j:=1 to 5  do
  if h[i,j] > h[jmax,imax] then
     begin
      imax:=i;
      jmax:=j;
      end;
 
      Label1.Caption:='Max ' + (h[imax,jmax]);
      Label2.Caption:='Строка' + IntToStr(jmax+1);
      Label3.Caption:='Столбец' + IntToStr(imax+1);

Если я изменяю файл так:
Кликните здесь для просмотра всего текста
1 2 3 4 5
6 7 8 9 10
11 60 13 75 15
16 17 18 19 20
21 22 23 24 0

то число 75 программа не видит, а выдает 60 за максимальное.
С координатами столбца и строки максимального элемента я что то перемудрил, как я понимаю нужно будет сделать по другому.
0
Модератор
60572 / 45566 / 31447
Регистрация: 18.05.2008
Сообщений: 109,517
07.12.2014, 08:24 7
Delphi
1
2
3
4
5
if h[i,j] > h[imax,jmax] then//поменять
  begin
   imax:=i;
   jmax:=j;
  end;
0
0 / 0 / 0
Регистрация: 26.06.2012
Сообщений: 26
07.12.2014, 10:45  [ТС] 8
Сделал так, теперь программа считает не пойми что.
Кликните здесь для просмотра всего текста

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
procedure TForm1.N3Click(Sender: TObject);
var
i,j, koord: integer;
jmax, imax: integer;
 
h : array [0..5, 0..5] of string;
begin
  For i:=1 to 5  do
  For j:=1 to 5  do
  h[j,i]:=StringGrid1.Cells[i,j];
 
    //íàõîæäåíèÿ ìàêñèìàëêè
    imax:=1;
    jmax:=1;
  For i:=1 to 5  do
  For j:=1 to 5  do
 if h[i,j] > h[imax,jmax] then
  begin
   imax:=i;
   jmax:=j;
  end;
 
      Label1.Caption:='Max ' + (h[imax,jmax]);
      Label2.Caption:='Ñòðîêà' + IntToStr(jmax+1);
      Label3.Caption:='Ñòîëáåö' + IntToStr(imax+1);
 
    end;
0
Модератор
60572 / 45566 / 31447
Регистрация: 18.05.2008
Сообщений: 109,517
07.12.2014, 10:58 9
Да не путайте вы сами себя с индексами
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var h : array [1..5, 1..5] of string;
begin
For i:=1 to 5  do //строки матрицы
For j:=1 to 5  do //столбцы
h[i,j]:=StringGrid1.Cells[j,i];//в таблице наоборот
//нахождения максималки
imax:=1;
jmax:=1;
For i:=1 to 5  do
For j:=1 to 5  do
if h[i,j]>h[imax,jmax] then
 begin
  imax:=i;
  jmax:=j;
 end;
Label1.Caption:='Max ' + (h[imax,jmax]);
Label2.Caption:='Строка' + IntToStr(imax);
Label3.Caption:='Столбец' + IntToStr(jmax);
end;
Добавлено через 1 минуту
Если и это не дойдет до Вас, прикладывайте архив проекта, будем исправлять горбатость с помощью могилы...
0
Mawrat
08.12.2014, 02:19     Считывание txt в StringGrid через OpenDialog
  #10

Не по теме:

Цитата Сообщение от Puporev Посмотреть сообщение
Если и это не дойдет до Вас, прикладывайте архив проекта, будем исправлять горбатость с помощью могилы...
Добавлю в цитатник. :D

0
08.12.2014, 02:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.12.2014, 02:19
Привет! Вот еще темы с ответами:

Загрузить данные из файла Excel в StringGrid через OpenDialog
Доброго времени суток! Нужно загрузить данные из Excel файла в StringGrid через OpenDialog. ...

Через OpenDialog открыть txt и удалить в нем дубликаты
Помогите с данными вопросами: Первый вопрос: через OpenDialog открыть txt и удалить в нем...

OpenDialog + StringGrid
Здравствуйте, у меня такая проблемка не могу открыть текстовой файл в стринггриде... возможно дело...

SaveDialog и OpenDialog в StringGrid.
В одной программе SaveDialog в другой OpenDialog. Первая должна сохранять данные из StringGrid в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.