Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Бд-парадокс и текстовый файл, Помогите с кодом 
:(
    Опции темы
LIDER
  Дата 31.5.2006, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 31.5.2006

Репутация: нет
Всего: нет



Я тут код замутил но чето беспантово он добавляет в базу
надо чтоб добавлял в таблицу так:
---------
---------
а он так добавляет:
--
..--
.....--
.......--Как это исправить???

вот код:
Код


procedure TForm1.Button4Click(Sender: TObject);
var
  f: textfile;
  s: string;
  ch: char;
  i: integer;
const
  n = 5;
  subs: array[1 .. 5] of string =(
  '* ', '& ', '# ', '$ ', '@ ');
begin
if OpenDialog1.Execute then
begin
assignfile(f, OpenDialog1.FileName);
reset(f);
while not eof(f) do begin
readln(f, s);
for i := 1 to n do
if pos(subs[i], s) = 1 then begin
ch := s[1];
delete(s, 1, 2);
break;
end;
table1.Insert;
case ch of
'*': table1.FieldByName('Professiya').AsString:=s;
'&': table1.FieldByName('Razryad').AsString:=s;
'#': table1.FieldByName('Xar_rab').AsString:=s;
'$': table1.FieldByName('Dolg_znat').AsString:=s;
'@': table1.FieldByName('Primer').AsString:=s;
end;
table1.Post;
end;
closefile(f);
end;
end;
 

прикрепил файл из которого должна выбираться инфа и записываться в базу 

Это сообщение отредактировал(а) LIDER - 31.5.2006, 21:33

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  ffile.txt 2,97 Kb
PM MAIL   Вверх
ShadeSt
Дата 1.6.2006, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 256
Регистрация: 9.8.2005
Где: Россия, г. Ставро поль

Репутация: нет
Всего: 7



сейчас читается значение какого-то одного поля и сразу добавляется запись в таблицу, а надо примерно так:
1. прочитать из файла все 5ть полей
2. добавить запись в таблицу

Зачем заморачиваться с префиксами в файле? может они не нужны, или последовательность
данных может меняться??


Приблизительно должно быть где-то так:
Код

procedure TForm1.Button1Click(Sender: TObject);
type
  TOneRec = record
    Professiya : string;
    Razryad    : string;
    Xar_rab    : string;
    Dolg_znat  : string;
    Primer     : string;
  end;
const
  cChars =  '*&#$@';
var
  f   : textfile;
  s   : string;
  ch  : char;
  Rec : TOneRec;

  procedure ClearRec;
  begin
     Rec.Professiya := '';
     Rec.Razryad    := '';
     Rec.Xar_rab    := '';
     Rec.Dolg_znat  := '';
     Rec.Primer     := '';
  end;

  function isAllData : Boolean;
  begin
    Result :=  (Rec.Professiya <> '') and (Rec.Razryad    <> '') and
               (Rec.Xar_rab    <> '') and (Rec.Dolg_znat  <> '') and
               (Rec.Primer     <> '');
  end;

  procedure TryWriteData;
  begin
    if (not isAllData) then Exit;
    table1.Insert;
    table1.FieldByName('Professiya').AsString := Rec.Professiya;
    table1.FieldByName('Razryad').AsString    := Rec.Razryad;
    table1.FieldByName('Xar_rab').AsString    := Rec.Xar_rab;
    table1.FieldByName('Dolg_znat').AsString  := Rec.Dolg_znat;
    table1.FieldByName('Primer').AsString     := Rec.Primer;
    table1.Post;
    ClearRec;
  end;

begin
  if (not OpenDialog1.Execute) then Exit;

  assignfile(f, OpenDialog1.FileName);
  reset(f);
  ClearRec;
  while (not eof(f)) do
  begin
    readln(f, s);
    if ((s = '') or (Pos(s[1], cChars) < 0)) then continue;
    ch := s[1];
    Delete(s, 1, 2);
    case ch of
      '*': Rec.Professiya := s;
      '&': Rec.Razryad    := s;
      '#': Rec.Xar_rab    := s;
      '$': Rec.Dolg_znat  := s;
      '@': Rec.Primer     := s;
    end;
    TryWriteData;
  end;
  closefile(f);
end;

Недостатки :
-   данные в файле должны быть для всех полей, если пропустить какое либо поле, то  запись будет добавленна некорректно/пропущенна.
 - при использовании длинных строк, приходится их чистить каждую отдельно.

вариант:
Можно сделать четко структурированный файл, в котором будет подряд идти информация о полях (без префиксов):
Код

Значение_Professiya
Значение_Razryad   
Значение_Xar_rab   
Значение_Dolg_znat
Значение_Primer     
Значение_Professiya
Значение_Razryad   
Значение_Xar_rab   
Значение_Dolg_znat
Значение_Primer     
.....


тогда можно значительно упростить код.

 

Это сообщение отредактировал(а) ShadeSt - 1.6.2006, 09:41


--------------------
It's nice to be importand, but it's more importand to be nice © Scooter
PM MAIL ICQ Jabber   Вверх
LIDER
Дата 1.6.2006, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 31.5.2006

Репутация: нет
Всего: нет



Цитата(ShadeSt @ 1.6.2006,  08:57)
сейчас читается значение какого-то одного поля и сразу добавляется запись в таблицу, а надо примерно так:
1. прочитать из файла все 5ть полей
2. добавить запись в таблицу

Зачем заморачиваться с префиксами в файле? может они не нужны, или последовательность
данных может меняться??


Приблизительно должно быть где-то так:
Код

procedure TForm1.Button1Click(Sender: TObject);
type
  TOneRec = record
    Professiya : string;
    Razryad    : string;
    Xar_rab    : string;
    Dolg_znat  : string;
    Primer     : string;
  end;
const
  cChars =  '*&#$@';
var
  f   : textfile;
  s   : string;
  ch  : char;
  Rec : TOneRec;

  procedure ClearRec;
  begin
     Rec.Professiya := '';
     Rec.Razryad    := '';
     Rec.Xar_rab    := '';
     Rec.Dolg_znat  := '';
     Rec.Primer     := '';
  end;

  function isAllData : Boolean;
  begin
    Result :=  (Rec.Professiya <> '') and (Rec.Razryad    <> '') and
               (Rec.Xar_rab    <> '') and (Rec.Dolg_znat  <> '') and
               (Rec.Primer     <> '');
  end;

  procedure TryWriteData;
  begin
    if (not isAllData) then Exit;
    table1.Insert;
    table1.FieldByName('Professiya').AsString := Rec.Professiya;
    table1.FieldByName('Razryad').AsString    := Rec.Razryad;
    table1.FieldByName('Xar_rab').AsString    := Rec.Xar_rab;
    table1.FieldByName('Dolg_znat').AsString  := Rec.Dolg_znat;
    table1.FieldByName('Primer').AsString     := Rec.Primer;
    table1.Post;
    ClearRec;
  end;

begin
  if (not OpenDialog1.Execute) then Exit;

  assignfile(f, OpenDialog1.FileName);
  reset(f);
  ClearRec;
  while (not eof(f)) do
  begin
    readln(f, s);
    if ((s = '') or (Pos(s[1], cChars) < 0)) then continue;
    ch := s[1];
    Delete(s, 1, 2);
    case ch of
      '*': Rec.Professiya := s;
      '&': Rec.Razryad    := s;
      '#': Rec.Xar_rab    := s;
      '$': Rec.Dolg_znat  := s;
      '@': Rec.Primer     := s;
    end;
    TryWriteData;
  end;
  closefile(f);
end;

Недостатки :
-   данные в файле должны быть для всех полей, если пропустить какое либо поле, то  запись будет добавленна некорректно/пропущенна.
 - при использовании длинных строк, приходится их чистить каждую отдельно.

вариант:
Можно сделать четко структурированный файл, в котором будет подряд идти информация о полях (без префиксов):
Код

Значение_Professiya
Значение_Razryad   
Значение_Xar_rab   
Значение_Dolg_znat
Значение_Primer     
Значение_Professiya
Значение_Razryad   
Значение_Xar_rab   
Значение_Dolg_znat
Значение_Primer     
.....


тогда можно значительно упростить код.

Спасибо тебе огромное!!!!! выручил!!! на ДРУГИХ ФОРУМАХ НИКТО НЕМОГ ПОМОЧЬ!!!!!
Даже незнаю как тебя отблагодарить... 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0485 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.