![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Здравствуйте, уважаемые программисты вся форума! Да, это снова я и снова с тупым вопросом
Написал программку для переноса данных из текстового файла в таблицу типа 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
|
|||
|
|||
|
Код:
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;Вопрос снят. Ответ - только что написан )) Спасибо всем, кто дернулся ) |