Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.04.2013, 18:28   #1
SeregaVili
Пользователь
 
Регистрация: 07.01.2013
Сообщений: 45
По умолчанию Как вывести текстовый файл в виде таблицы??

Здравствуйте) Подскажите как можно вывести из текстового файла информацию в виде таблицы типа:ИМЯ | Фамилия | или что то типа того.
До этого только паскаль изучал а курсовик решил сделать на делфи.Пробовал сделать с типизированным файлом но возникала ошибка поэтому решил с текстовым попробовать).Вот мой код.

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, Menus;

type
  TForm1 = class(TForm)
    grp1: TGroupBox;
    btn1: TButton;
    grp2: TGroupBox;
    strngrd1: TStringGrid;
    btn2: TButton;
    btn3: TButton;
    btn4: TButton;
    cbb1: TComboBox;
    lbl1: TLabel;
    cbb2: TComboBox;
    lbl2: TLabel;
    btn5: TButton;
    procedure btn1Click(Sender: TObject);
    procedure btn2Click(Sender: TObject);
    procedure btn3Click(Sender: TObject);
    procedure btn4Click(Sender: TObject);
    procedure btn5Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);

begin
strngrd1.Cells[1,0]:='Имя';
strngrd1.Cells[2,0]:='Фамилия';
strngrd1.Cells[3,0]:='Автомобиль';
strngrd1.Cells[4,0]:='Гос.номер';
grp2.Visible:=True;

end;

procedure TForm1.btn2Click(Sender: TObject);
var f:TextFile;
    i,j:Byte;
    str:string[40];
    str1:string[20];
begin
AssignFile(f, 'c:\graf\baza.txt');
Append(f);



if cbb1.ItemIndex=0 then str:='Проезд на запрещающий сигнал светофора';
if cbb1.ItemIndex=1 then str:='Не уступил(а) дорогу пешеходу';
if cbb1.ItemIndex=2 then str:='Несоблюдение дорожной разметки';
if cbb1.ItemIndex=3 then str:='Несоблюдение знаков';
if cbb1.ItemIndex=4 then str:='Несоблюдение приоритета';

if cbb2.ItemIndex=0 then str1:='Лишение прав';
if cbb2.ItemIndex=1 then str1:='Штраф';
if cbb2.ItemIndex=2 then str1:='Лишение свободы';

j:=1;
for i:=1 to 4 do begin
  write(f, strngrd1.cells[i,j]+' ');
  strngrd1.cells[i,j]:='';

  end;
  write(f,str+' '+str1);
  Writeln(f);
  Closefile(f);
  ShowMessage('сведения успешно добавлены');
  grp2.Visible:=False;
end;

procedure TForm1.btn3Click(Sender: TObject);
begin
Close;
end;

procedure TForm1.btn4Click(Sender: TObject);
var f:TextFile;
    str: string;
begin
AssignFile(f, 'c:\graf\baza.txt');
Reset(f);
while not eof(f) do
  while not eoln(f) do
  begin
  readln(f,str);
  ShowMessage(str);
  end;
end;

procedure TForm1.btn5Click(Sender: TObject);
begin
grp2.Visible:=False;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin

end;

end.


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 19.04.2013 в 09:21.
SeregaVili вне форума Ответить с цитированием
Старый 19.04.2013, 09:25   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

парсить нужно текстовый файл.
Это не очень сложно, т.к. Вы же сами в этот файл и пишете.
Вопрос только - а зачем Вам для хранения данных текстовый файл?
удобнее использовать или бинарный файл своей структуры, или XML.
А вообще, это типичная задача, которая подразумевает использование БД.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.04.2013, 12:05   #3
skad0
Пользователь
 
Регистрация: 07.04.2013
Сообщений: 11
По умолчанию

Если ты точно знаешь какие разделители в исходном файле, то совсем легко.
Н-р, файл подается в виде:
Цитата:
Pupkin Vasya Ivanovic
Ignatov Ognat Akukivovic
...
Тогда, в цикле когда бежишь по строке, когда добегаешь до пробела начинаешь запись в другую переменную, после цикла пробега по строке осуществляешь вывод и обнуляешь переменные. Удобно реализовать с помощью массива строк.
var s = array [1..3] of string;
где, например, 1 - фамилия, 2 - имя, 3 - отчетство
skad0 вне форума Ответить с цитированием
Старый 19.04.2013, 13:31   #4
SeregaVili
Пользователь
 
Регистрация: 07.01.2013
Сообщений: 45
По умолчанию

Ну я сначала пробовал работать с записями с помощью динамической очереди и файлом db но как то не заработало))поэтому решил для начала что нибудь попроще попробовать.
А насчет разделителей то точно сколько пробелов я знаю только в нескольких частях текста, а например если кто нибудь введет в поле автомобиль два слова то тогда уже будет ошибка)
Может кто нибудь кинет ссылку где есть примеры создания базы данных с записями??
SeregaVili вне форума Ответить с цитированием
Старый 20.04.2013, 09:59   #5
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
но как то не заработало))
По этому поводу вспоминается случай.
Вечер. Общежитие факультета радиоэлектроники. Захожу в комнату - человек паяет усилитель. Дожидаться 2-3 часа, пока закончит, не хочется. Мешать ему - тоже. Обещаю зайти на следующий день и посмотре5ть, как будет работать.

Захожу следующим вечером.
- ну, как усилитель?
- А он плохо работал, - я его распаял (обратно на детали).
- А как плохо?
- Ну, он должен 15 Вт выдавать, а работал где-то на 1 Вт.
- А сигнал откуда брал?
- С выхода магнитофона.
- А какая чувствительность входа?
- 1 В.
Занавес!

Для тех, кто не силен в радиотехнике, поясню:
На выходе магнитофона 0.25 В.
Мощность пропорциональна квадрату напряжения.
Значит, подавая на вход 1/4 номинального напряжения, на выходе получим 1/16 номинальной мощности. Что в данном случае равно 15/16 = 0.94 Вт.
Т.е. усилитель работает так, как должен, человек на слух оценил его мощность достаточно верно, но сделал неправильные выводы.
А усилитель уже распаян на детали.

2ТС: Вам для начала нужно выполнить декомпозицию задачи. Т.е. отделить те блоки, которые строят таблицу от тех, которые осуществляют ввод/вывод. Причем сделать это нужно так, чтобы к выводящей таблицу части можно было без ее переделки подключить блок ввода вывода вне зависимости от того, что последний использует: БД, типизированные или текстовые файлы.
А затем проверять работу каждого из блоков независимо - подавая на вход заранее известные данные, и смотреть, что получается на выходе.
s-andriano вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вывести список файлов в текстовый файл assch Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 20.12.2010 22:36
как в си++ вывести массив в виде таблицы? Великолепная Помощь студентам 2 17.12.2010 00:45
Как настроить эксель, чтобы он открывал в виде таблицы тхт файл с разделителем в виде точки с запятой xhour Microsoft Office Excel 1 05.05.2009 14:17
Как вывести содержимое StringGrid на принтер именно в виде таблицы program123 Компоненты Delphi 4 14.02.2009 16:24
как определить какие файлы есть в папке и вывести их имена в текстовый файл Tdoctor Паскаль, Turbo Pascal, PascalABC.NET 3 04.11.2008 05:18