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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2008, 14:44   #1
Nadjuha
Пользователь
 
Регистрация: 27.05.2008
Сообщений: 17
Смущение Нуждаюсь в помощи (Delphi)

Всем пирвет!
у меня есть задание где:
cex: TEdit; // номер цеха
nbr: TEdit; // номер бригады
nmis: TEdit; // номер месяца
rik: TEdit; // год

каталоги D:\dan\c01, D:\dan\c02, D:\dan\c03, D:\dan\c04, D:\dan\c05, D:\dan\c06, D:\dan\c07, D:\dan\c08, D:\dan\c09, D:\dan\c10
D:\dan\cXX // номер цеха, который указывается в cex: TEdit

а так же файлы D:\dan\cXX\fnBBNNDD.dbf где
BB // nbr: TEdit
NN // nmis: TEdit
DD // rik: TEdit

Мне необходимо что бы при вводе даных програма выполняла следущее:
Вибырала правильную директорию, в зависимости от того какой цех выбран, и считывала оттуда файл по введеным в эдиты числам.

Помогите пожайлуста, опытные програмисты, заранее благодарна.
Nadjuha вне форума Ответить с цитированием
Старый 27.05.2008, 15:26   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну предположим по клику кнопки:
НА форме предположим есть ЛистБокс
Код:
var s:string;
begin
s:=' D:\dan\c'+cex.text;
if fileexists(s) then ListBox.Items.LoadFromFile(s)
 else ShowMessage('Такого цеха нет')
end;
А вот насчет баз эт я не понял чего нужно то.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.05.2008, 19:05   #3
Nadjuha
Пользователь
 
Регистрация: 27.05.2008
Сообщений: 17
По умолчанию

D:\dan\cXX\fnBBNNDD
вот, мне надо что бы програма нашла нужный файл по введенным записям
Nadjuha вне форума Ответить с цитированием
Старый 28.05.2008, 01:41   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Надюша, добавляйте такую функцию:
Код:
function StrPadLeft(const S: AnsiString; Len: Integer; C: AnsiChar): AnsiString;
var
  L: Integer;
begin
  L := Length(S);
  if L < Len then
    Result := StringOfChar(C, Len - L) + S
  else
    Result := S;
end;
а дальше код будет выглядеть так:

Код:
MyFileName :=
  'D:\dan\c'+StrPadLeft(Trim(cex.Text),2,'0')+
  '\fn'+
  {BB} StrPadLeft(Trim(nbr.Text),2,'0')+
  {NN} StrPadLeft(Trim(nmis.Text),2,'0') +
  {DD} StrPadLeft(Trim(rik.Text),2,'0')+'.dbf';
что дальше делать с MyFileName разберётесь?
Если нет - пишите, вместе разберёмся :-))
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.05.2008, 02:09   #5
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Код:
//................................
var
    fname   : string;
    cex     : integer;
    nbr     : integer;
    nmis    : integer;
    rik     : integer;
begin
    cex     := StrToIntDef(cex_edit.Text, 0);
    nbr     := StrToIntDef(nbr_edit.Text, 0);
    nmis    := StrToIntDef(nmis_edit.Text, 0);
    rik     := StrToIntDef(rik_edit.Text, 0);

    if ( (cex > 0) AND (nbr > 0) AND (nmis > 0) AND (rik > 0) ) then begin
        fname := format('D:\DAN\C%2.2d\FN%2.2d%2.2d%2.2d.DBF',
                        [cex, nbr, nmis, rik]);
    end
//................................
B_N вне форума Ответить с цитированием
Старый 28.05.2008, 10:43   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

B_N, угу. согласен. Ваше решение функциональнее и красивее.
Самое обидное, что я сначала пытался через Format решить, минут 20 мусолил Format Strings и так и не понял "If the format string contains a precision specifier, it indicates that the resulting string must contain at least the specified number of digits"...
и вот только после Вашего поста дошло.... :-)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.05.2008, 13:25   #7
Nadjuha
Пользователь
 
Регистрация: 27.05.2008
Сообщений: 17
По умолчанию

Еще раз приветики!
Я все еще нуждаюсь в вашей помощи. Мне надо вывести даные из файла, только я низнаю куда и как. Пробывала делать в Мемо и РичьЕдит, а мне про несоответсвие типов писало ошыбку((
Вот есть прямой путь к файлу (из которого и надо взять даные) 'C:\dan\c23\fn230408.dbf' и есть архивный файл (OP_RASL2), вот его структура:
Код:
 RLV2 = record
     zex,br,tbn,kat:integer;
     kdz:integer;          
     sz:real;               
     mn,                   
     kdn,                   
     dn:integer;            
     t,                     
     sn:real;               
     kdu:integer;           
     su:real;               
  end;
Вот код этой програмки реализованый на паскале:
Код:
Uses printer,dos,crt;
Label M1,M55;
Const
  ris15='--------------';   shwo=400;
Type
{$I OP_RASL2.}
Var
  buff,im:string[60];   knt:string[10];
  msom,msum:array[1..13] of real;
  lst:text;
  fpr1:file of rlv2;   fp1:rlv2;
  prz:char;
  th,i,j,l,kstr,wo,k,ka,j1,lp,ip,jp:integer;
  sum,koef:real; 

PROCEDURE 001;
 Begin
 write('Печать(p/c/n/r/s)=');
 readln(prz);
 if(prz='p') then ASSIGN(lst,'PRN');
 if(prz='c') then ASSIGN(lst,'CON');
 if(prz='n') then ASSIGN(lst,'NUL');
 REWRITE(lst);
 end;

{******************************************}
BEGIN
M1:{..}; clrscr;
 write('Введите путь к фаулу=');    ну здесь собственно надо
 readln(buff);                                  этот 'C:\dan\c23\fn230408.dbf'
 l:=LENGTH(buff);
 if((l=0) AND (buff[1]=' ')) then goto M55;
 if(buff[1]='*') then goto M55;
 if(l<>0) then im:=buff;
 write('Длинна стр. в рядках=');
 readln(kstr);
 if(kstr=0) then goto M55;

 ka:=0; lp:=0;
   ZAPECH;
   if(prz='r') then goto M55;
   if(prz='s') then goto M1;
   assign(fpr1,im);  reset(fpr1);
   while not eof(fpr1) do
    begin
    read(fpr1,fp1);
    lp:=lp+1;
    th:=fp1.tbn;
{*    writeln(lst,fp1.zex:3,fp1.br:3,th:5,fp1.kat:3,fp1.kdz:4,fp1.sz:8:2, *}
    writeln(lst,lp:4,'=',fp1.zex:3,fp1.br:3,th:5,fp1.kat:3,fp1.kdz:4,fp1.sz:8:2,
          fp1.mn:3,fp1.dn:3,fp1.t:6:1,fp1.kdn:4,fp1.sn:10:2,
          fp1.kdu:4,fp1.su:10:2);
    ka:=ka+1;
    if(ka>=kstr) then
     begin
     CLOSE(lst);  ka:=0;
     ZAPECH;
     if(prz='s') then begin
                      CLOSE(fpr1);  goto M1;
                      end;
     if(prz='r') then begin
                      CLOSE(fpr1);  EXIT;
                      end;
     end;
    end;
    close(fpr1);
Хелп

Последний раз редактировалось Stilet; 29.05.2008 в 08:23.
Nadjuha вне форума Ответить с цитированием
Старый 29.05.2008, 01:02   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

прежде всего, Вы ТОЧНО уверены, что файл 'C:\dan\c23\fn230408.dbf' (например) является типизированным файлом, а не файлом формата DBF????
Откройте в любой Hex-viewer'е (хотя бы в том же Far Manager по Alt-F3) Ваш файл и посмотрите первые несколько десяткой байт - если вначале стоит байт "03" или "30" (шестнадцатиричное, разумеется!), а дальше идут имена полей (zeh, br ... ) - то это формат DBF - его нужно читать совсем по другому..

Hint: Если файл DBF не очень большой и в нём не содержится секретной информации, то лучше Вам его запаковать и прикрепить к сообщению в данном форуме (это делается через Расширенный режим - Управления вложениями...)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.05.2008, 02:12   #9
Nadjuha
Пользователь
 
Регистрация: 27.05.2008
Сообщений: 17
По умолчанию

Этот файлик типизированый, просто мой куратор подобрал к нему такое розшырение, вот выкладую взгляните сами
Вложения
Тип файла: rar FN230408.rar (8.6 Кб, 8 просмотров)
Nadjuha вне форума Ответить с цитированием
Старый 29.05.2008, 08:32   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
просто мой куратор подобрал к нему такое розшырение
Не очень умный ход.
В каком именно месте выдает ошибку?
Вот пример чтения из твоего файла:
Код:
Uses printer,dos,crt;
Type
RLV2 = record
    zex,br,tbn,kat:integer;
    kdz:integer;
    sz:real;
    mn,
    kdn,
    dn:integer;
    t,
    sn:real;
    kdu:integer;
    su:real;
 end;   Var
  buff,im:string[60];   knt:string[10];
  msom,msum:array[1..13] of real;
  lst:text;
  fpr1:file of rlv2;   fp1:rlv2;
  prz:char;
  th,i,j,l,kstr,wo,k,ka,j1,lp,ip,jp:integer;
  sum,koef:real;

{******************************************}
BEGIN
 clrscr;
   assign(fpr1,'f.dbf');  reset(fpr1);
   while not eof(fpr1) do
    begin
    read(fpr1,fp1);
{*    writeln(lst,fp1.zex:3,fp1.br:3,th:5,fp1.kat:3,fp1.kdz:4,fp1.sz:8:2, *}
    writeln(lp:4,'=',fp1.zex:3,fp1.br:3,th:5,fp1.kat:3,fp1.kdz:4,fp1.sz:8:2,
          fp1.mn:3,fp1.dn:3,fp1.t:6:1,fp1.kdn:4,fp1.sn:10:2,
          fp1.kdu:4,fp1.su:10:2);
    end;
    close(fpr1);
end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как называется программа "дозвон по модему на указаный номер" hardhawker Софт 3 27.12.2011 14:30
Печать водяных знаков на документах при помощи Delphi Pitonio Помощь студентам 6 12.08.2008 10:51
Нуждаюсь в помощи с задачей на Delphi f1n!Sh Помощь студентам 16 04.06.2008 22:14
Delphi прошу помощи у профессионалов Тёмыч Помощь студентам 5 12.05.2008 23:48
Для помощи Антон Шестаков Общие вопросы Delphi 4 23.10.2007 08:19