Тема: Читання з файлу

Доброго дня, шановні!

ось моя проблема

написав код для відкриття двох файлів

запускаю...

дані з першого зчитались а з другого   ні

натискаю другий раз все ок

а треба щоб з першого разу

procedure TMainForm.OpenFileClick(Sender: TObject);
var I,L:integer;
begin
if OpenDialog1.Execute then begin //Âèêîíàííÿ ä³àëîãó â³äêðèòòÿ
 fname:=opendialog1.FileName; //çáåðåæåííÿ øëÿõó äî ôàéëó
 str:=ExtractFileName(fname); //çáåðåæåííÿ ³ìåí³ ôàéëó
 l:=length(str);
 for i:=1 to l do begin
  if (str[i]='_') and (str[i+1]='0') then begin
   fname_ukl0:=ExtractFilePath(Application.Exename)+'ukl\'+str; //readreshO;
   StatusBar1.Panels[0].Text:='Îäèíàðí³ ðåø³òêè'; // виводимо «ім’я моделі» в назву активної сторінки
                                          end;
  if (str[i]='_') and (str[i+1]='1') then begin
   fname_ukl1:=ExtractFilePath(Application.Exename)+'ukl\'+str; readreshP;
   StatusBar1.Panels[0].Text:='Ïîäâ³éí³ ðåø³òêè'; // виводимо «ім’я моделі» в назву активної сторінки
   reshmode:=true; showreshp;
                                          end;
  if str[i]='_' then begin
   delete(str,i,6); fname_dgt:=ExtractFilePath(Application.Exename)+'dgt\'+str+'.dgt';
   StatusBar1.Panels[2].Text:='Äåòàë³';
   readdets; showdets;
                     end;
                  end;
                            end; //кінець якщо діалог виконуєть
end;

2

Re: Читання з файлу

Спробуйте ²Ð¸Ð²Ð¾Ð´Ð¸Ð¼Ð¾ æåíí  ä³àëîãó â³äê, мені колись допомогло

All you want is a dingle,
What you envy's a schwang,
A thing through which you can tinkle,
Or play with, or simply let hang...
Подякували: DOP, koala, LoganRoss, ostap34PHP, P.Y.5

3

Re: Читання з файлу

1. Вирівняйте код. Не

   reshmode:=true; showreshp;
                                          end;

а приблизно

        reshmode:=true; 
        showreshp;
    end;

бо 90% помилок в такому коді виникає через те, що ви самі не можете його прочитати. Після крапки з комою - новий рядок. Після begin - відступ на 4 пробіли більший, починаючи з end - на 4 менший.
2. Щось зробіть з кодуванням.
3. Ви абсолютно точно певні, що проблема тут, а не в readreshP чи showreshp? Чому?
4. Що значить "дані не зчитались"? У вас табличка виникає з написом "дані не зчитались"? Описуйте не те, чого не відбувається, а те, що відбувається - наприклад "я очікую, що в змінній x буде значення 10, взяте з файлу, але там 0".
5. У вас цикл (рядок 8 ) до довжини str, але str змінюється всередині циклу (рядок 19), через це можливе читання за межами рядку.

Подякували: tarasgavrilov, Torbins, LoganRoss, DOP, ostap34PHP5

4

Re: Читання з файлу

koala написав:

3. Ви абсолютно точно певні, що проблема тут, а не в readreshP чи showreshp? Чому?
4. Що значить "дані не зчитались"? У вас табличка виникає з написом "дані не зчитались"? Описуйте не те, чого не відбувається, а те, що відбувається - наприклад "я очікую, що в змінній x буде значення 10, взяте з файлу, але там 0".

ось процедура

procedure TMainForm.showreshp;
var XminP,YminP,XmaxP,YmaxP:array[1..6] of real;
    alpha,beta,mashY:real;
    i,j:integer;
    det:figure;
begin
//readdets;
for j:=1 to KilkuklP do begin
 with shmUklP[j] do begin
  for i:=1 to 6 do begin
  if i=1 then begin alpha:=0; beta:=0; end;
  if i=2 then begin alpha:=xa1; beta:=ya1; end;
  if i=3 then begin alpha:=xq; beta:=yq; end;
  if i=4 then begin alpha:=xa1+xq; beta:=ya1+yq; end;
  if i=5 then begin alpha:=xa2; beta:=ya2; end;
  if i=6 then begin alpha:=xa1+xa2; beta:=ya1+ya2; end;
  XminP[i]:=-dldet[ndet]/2+alpha;
  XmaxP[i]:=dldet[ndet]/2+alpha;
  YminP[i]:=-shdet[ndet]/2+beta;
  YmaxP[i]:=shdet[ndet]/2+beta;
                  end;
 dlP[j]:=maxR(6, XmaxP)-minR(6, XminP);
 XcP[j]:=(maxR(6, XmaxP)+minR(6, XminP))/2;
 shP[j]:=maxR(6, YmaxP)-minR(6, YminP);
 YcP[j]:=(maxR(6, YmaxP)+minR(6, YminP))/2;
                    end;
                        end;
 dlUkl_max:=maxR(KilkuklP, dlP);
 shUkl_max:=maxR(KilkuklP, shP);
 StatusBar1.Panels[1].Text:=floattostr(dlUkl_max)+' '+floattostr(shUkl_max);
  //for j:=1 to KilkuklP do
  //edit1.Text:=edit1.Text+FormatFloat('0.00',kilkpointdet_r[j]);
 //for j:=1 to KilkuklP do
  //edit2.Text:=edit2.Text+FormatFloat('0.00',YcP[j]);
 mashim4P:=95/dlUkl_max;
 mashy:=95/shUkl_max;
 StatusBar1.Panels[1].Text:=floattostr(XcP[1])+' '+floattostr(YcP[1]);
 StatusBar1.Panels[1].Text:=inttostr(shmUklP[1].ndet);
 if mashim4P>mashy then mashim4P:=mashy;
 for i:=1 to KilkuklP do
  with shmUklP[i] do begin
  graphim('Ukl',kilkpointdet_r[ndet],dets_r[ndet],mashim4P,XcP[i]+52,YcP[i]+52+105*(i-1));
 for j:=0 to kilkpointdet_r[ndet]-1 do begin
  det[j].x:=dets_r[ndet,j].x+Xa1;
  det[j].y:=dets_r[ndet,j].y+Ya1;
                                   end;
  graphim('Ukl',kilkpointdet_r[ndet],det,mashim4P,XcP[i]+52,YcP[i]+52+105*(i-1));
  for j:=0 to kilkpointdet_r[ndet]-1 do begin
  det[j].x:=det_P[ndet,j].x+Xq;
  det[j].y:=det_P[ndet,j].y+Yq;
                                   end;
  graphim('Ukl',kilkpointdet_r[ndet],det,mashim4P,XcP[i]+52,YcP[i]+52+105*(i-1));
   for j:=0 to kilkpointdet_r[ndet]-1 do begin
  det[j].x:=det_P[ndet,j].x+Xq+Xa1;
  det[j].y:=det_P[ndet,j].y+Yq+Ya1;
                                   end;
  graphim('Ukl',kilkpointdet_r[ndet],det,mashim4P,XcP[i]+52,YcP[i]+52+105*(i-1));
   for j:=0 to kilkpointdet_r[ndet]-1 do begin
  det[j].x:=dets_r[ndet,j].x+Xa2;
  det[j].y:=dets_r[ndet,j].y+Ya2;
                                   end;
  graphim('Ukl',kilkpointdet_r[ndet],det,mashim4P,XcP[i]+52,YcP[i]+52+105*(i-1));
   for j:=0 to kilkpointdet_r[ndet]-1 do begin
  det[j].x:=dets_r[ndet,j].x+Xa1+Xa2;
  det[j].y:=dets_r[ndet,j].y+Ya1+Ya2;
                                   end;
  graphim('Ukl',kilkpointdet_r[ndet],det,mashim4P,XcP[i]+52,YcP[i]+52+105*(i-1));

і

procedure TMainForm.readreshp;
var i:integer;
begin
 assignfile(f,fname_ukl1);
 Reset(f);
 Readln(f,KilkuklP);
for i:=1 to KilkuklP do
 with shmUklP[i] do begin
 Read(f,ndet);
 read(f,xa1,ya1,xa2,ya2,xq,yq);
 readln(f,ang);
                     end;
 CloseFile(f);
 ramka('Ukl',KilkuklP);
end;

запускаю програму (мал.1) відкриваю файл (мал.2) і очікую з двох сторін фігури але отримую (мал.3)
пробую знов відкрити файл і вуаля (мал.4)
як зробити щоб з першого разу показувались?

5

Re: Читання з файлу

Малюнки не видно. І я у вас не бачу зчитування двох файлів, тільки одного.

6

Re: Читання з файлу

Щоб файли прикріпилися, треба після "Вибрати файл" натиснути "Add file". Трохи неочевидно, так.

7

Re: Читання з файлу

Ви навмисно ігноруєте те, що я написав (пп. 1 та 2)?
І що дає нам цей новий код? Я спитав, чи певні ви, що проблема в тій функції, і навів пару прикладів інших функцій з вашого коду, де вона може також бути - а ви, замість того, щоб сказати "певен/не певен", навели код. Я так розумію, що не певні, раз наводите код? Але тоді я бачу ще з півдесятка інших функцій, код яких ви не навели. В них ви певні? Чи теж будете кидати їхній код?
Ви вмієте працювати з дебагером? Підозрюю, що так, код досить великий. То що вам заважає самостійно відстежити проблему до місця виникнення і тільки потім питати, якщо незрозуміло? Ми цей код не скомпілюємо, ви ж самі розумієте - якби навіть мали бажання.

Подякували: tarasgavrilov1

8

Re: Читання з файлу

прикріпляю а вони не завантажуються

9

Re: Читання з файлу

Ну то викладіть на зовнішній хостинг типу http://picua.org/

Подякували: tarasgavrilov1

10

Re: Читання з файлу

запускаю програму http://picua.org/img/2017-07/19/0vmeljp … g5wz7a.jpg відкриваю файл http://picua.org/img/2017-07/19/xq7c87y … vdt0r7.jpg і очікую з двох сторін фігури але отримую http://picua.org/img/2017-07/19/fmt6jtz … y1n7c9.jpg
пробую знов відкрити файл і вуаля http://picua.org/img/2017-07/19/0v8qsd4 … 1thfi8.jpg
як зробити щоб з першого разу показувались?

Подякували: koala1

11

Re: Читання з файлу

Той код, котрий ви уже навели, відкриває тільки один файл. Але там у вас іще є підозріла процедура readreshO, яку хтось закоментував.

12 Востаннє редагувалося koala (19.07.2017 21:01:16)

Re: Читання з файлу

О, тепер вже стає зрозумілішим. А то ми ж узагалі вашої форми не бачили.
А тепер - у якій процедурі заповнюються ліві фігури, а в якій - праві?

13

Re: Читання з файлу

Torbins написав:

Той код, котрий ви уже навели, відкриває тільки один файл. Але там у вас іще є підозріла процедура readreshO, яку хтось закоментував.

Він спершу наплутав - у нього проблема не з відкриттям двох файлів, а з тим, що файл треба два рази відкривати, щоб все спрацювало як слід. Здається.

Подякували: tarasgavrilov1

14

Re: Читання з файлу

Torbins написав:

Той код, котрий ви уже навели, відкриває тільки один файл. Але там у вас іще є підозріла процедура readreshO, яку хтось закоментував.

так я ж її закоментував і вона не працює.

koala написав:

Він спершу наплутав - у нього проблема не з відкриттям двох файлів, а з тим, що файл треба два рази відкривати, щоб все спрацювало як слід. Здається.

правильно. так які припущення, чого з першого разу не працює.

15

Re: Читання з файлу

У мене поки що основне припущення, що ви читаєте рівно половину того, що я пишу.

16

Re: Читання з файлу

koala
Тому він прочитає тільки оце:

koala написав:

У мене поки що основне припущення

Спробуйте отак:

У мене поки що основне припущення, що ви читаєте рівно половину того, що я пишу. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero.

:D

Подякували: koala, LoganRoss2

17

Re: Читання з файлу

tarasgavrilov
А якщо по темі, то ми не можемо робити ніяких припущень, поки ви не покажете решту коду. Lorem ipsum dolor sit amet, et sit quas disputationi, impetus detracto perpetua cum te. Libris admodum fabellas cum ex.

Подякували: koala, tarasgavrilov2

18

Re: Читання з файлу

koala написав:

У мене поки що основне припущення, що ви читаєте рівно половину того, що я пишу.

вибачте, але пункти 1 і 2 про стиль програмування і у мене такий. ТО ЯКІ думки по головному  питанню?

19

Re: Читання з файлу

Так, вчорашні мої повідомлення прочитали. Тепер давайте сьогоднішні, зокрема, від 16:34:21.

20

Re: Читання з файлу

з правим все добре, а за ліві якраз і відповідає showreshp.