Здравствуйте, уважаемые программисты вся форума! Да, это снова я и снова с тупым вопросом
Написал программку для переноса данных из текстового файла в таблицу типа 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. - Заранее спасибо всем откликнувшимся! !