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

Delphi Sources



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

Закрытая тема
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 15.11.2009, 20:06
Ztrel Ztrel вне форума
Прохожий
 
Регистрация: 10.08.2009
Сообщения: 25
Репутация: 10
Сообщение Текстовой файл и таблица

Здравствуйте, уважаемые программисты вся форума! Да, это снова я и снова с тупым вопросом


Написал программку для переноса данных из текстового файла в таблицу типа StringGrid. Но работает она неправильно... ((

В текстовом файле все данные представлены построчно. Вот таким образом:
{ 1, 2... - номера строчек в файле }

1. ФИО
2. 0
3. 0
4. 0
5. 0
6. *
7. ФИО
8. 0
9. 0
10. 0
11. 0
12. *
и т. д. и т. п...

В StringGride - неопределенное количество строк, зато 6 столбцов. Один столбец и одна строка - фиксированные...

Задачка следующая:
Предположим есть три ученика, данные которых содержаться в файле с таким видом (см. выше).
Нужно чтобы при нажатии на кнопку на одной форме, высвечивалась другая форма, на которой есть уже StringGrid и однотипные данные этих учеников попали в определенные колонки и в определенные строчки. Ну например - ФИО учеников попали в 1 столбец ( незафиксированный который), но по разным строчкам
Написал код. Но он работает неправильно ( Код компилируется, но выдает неправильный результат - вместо заполненной таблички, он в клетке [ 1, 1 ] ставит один-единственный ноль (
Помогите пожалуйста с кодом... Не получается исправить... ((

Код:
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  Row: integer;   // переменная для количества строк в таблице
 
implementation
uses Unit5;
 
{$R *.dfm}
 
procedure TForm1.Button1Click (Sender: TObject);
var
F: TextFile;                         // переменная текстового файла
stroka: string;                     // переменная для считывания строк из текстового файла
k, l : integer;                      // переменные для организации циклов
begin
Row:= 1; // количество строк в таблице (изначальное)
 
// проверяем наличие файла с данными учеников
 
If FileExists('Ученики.txt') = false then         // Если файла нет, то...
begin
 
Form5.Label2.Visible:= True;          // показали надпись " У вас нет пока учеников :)) "
Form5.StringGrid1.Visible:= False;   // Скрыли табличку с данными 
 
end
else                                         // Если файл есть, то...
begin
 
AssignFile(F, 'Ученики.txt');       // связали имя файла с файловой переменной
Reset(F);                               // Открыли файл на чтение
While not Eof(F) do                // пока не дошли до конца файла
begin
 
readln(F, stroka);          // Читаем файл по строчке
if stroka = '*' then         // если строка - это символ "*", то...
Row:= Row + 1;            // количество строчек в будущей таблице + 1
 
end;
CloseFile(F);                                           // закрыли файл
Form1.Visible:= False;                            //   Скрыли исходную форму
Form5.Visible:= True;                             //  Показали форму с таблицей
Form5.Label2.Visible:= False;                     // скрыли надпись " У вас нет пока учеников :)) "
Form5.StringGrid1.Visible:= True;               // показали таблицу
Form5.StringGrid1.RowCount:= Row;          // установили количество строк в таблице
 
{ Опять открываем файл на чтение - извините меня за такое издевательство над Delphi,
но я до сих пор не понимаю, как в текстовом файле переместить указатель на нужную мне
строчку! На "Seek" компилятор почему-то ругается... Наверное этот " Seek " только с типизированными
файлами работает, да? }
 
Reset(F);
 
For k:= 1 to Row do    // от первой (незафиксированной)
                              //  строчки таблицы к последней - начни цикл
begin
 
For l:= 1 to 6 do       // от первого ( незафиксированного ) столбца
                            // к последнему - начни цикл
begin
while not eof(F) do  // пока не дошли до конца файла...
begin
readln(F, stroka);         // читай файл по строчке
if stroka = '*' then       // если строка - это символ " * " , то...
continue             // переходи к следующей итерации цикла
else                  // иначе...
 
Form5.StringGrid1.Cells[l, k]:= stroka;   // присвой ячейке таблицы значение прочитанной строки
 
end;
end;
end;
end;
end;
 
end. 
Вот... Прокомментировал все, что смог... Надеюсь вам это хоть чем-то поможет...
Помогите пожалуйста исправить...

P.S. - Заранее спасибо всем откликнувшимся! !

Последний раз редактировалось Ztrel, 16.11.2009 в 23:59. Причина: Неточная постановка задачи
  #2  
Старый 17.11.2009, 16:20
Ztrel Ztrel вне форума
Прохожий
 
Регистрация: 10.08.2009
Сообщения: 25
Репутация: 10
Сообщение

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  f:textfile;
  tmp_str:string;
  tmp_lst:TStrings;
  i,j,k:integer;
begin
Form5.Visible:= True;
Form1.Visible:= False;
  tmp_lst:=TStringList.Create;
  If FileExists('Ученики.txt') then
    begin
      Form5.StringGrid1.Visible:=true;
      AssignFile(f, 'Ученики.txt');
      Reset(f);
      While not Eof(f) do
        begin
          readln(f,tmp_str);
          if tmp_str = '*' then
          continue
          else
          tmp_lst.Add(tmp_str);
        end;
      Form5.StringGrid1.RowCount:=((tmp_lst.Count) div 6)+1;
      k:=0;
      for j:=1 to Form5.StringGrid1.RowCount-1 do
        for i:=1 to Form5.StringGrid1.ColCount-1 do
          begin
            Form5.StringGrid1.Cells[i,j]:=tmp_lst[k];
            inc(k)
          end;
 
    end
  else ShowMessage('File is not exist')
end;


Вопрос снят. Ответ - только что написан )) Спасибо всем, кто дернулся )
Закрытая тема


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter