|
|
Регистрация | << Правила форума >> | 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; Вопрос снят. Ответ - только что написан )) Спасибо всем, кто дернулся ) |