41 Востаннє редагувалося misha_beginner (15.01.2014 01:06:18)

Re: Таблиці - відфільтрувати записи з данними про холодильники (продовж.)

Bartash написав:
misha_beginner написав:

за допомогою append(f). пишеться замысть rewrite

Це ви про що? 0_о

З.І: мене цікавив скріншот output, а не помилок.

функція append(f ) наскыльки я памятаю, що читав дозволяэ вносити дані в кінець файлу, тобто редагувати його. я е можу вам показати output при закінченні вводу даних вибивають такі помилки я виправив программу так:

read(f,tabl[i].virobn, tabl[i].nazvanie, tabl[i].kamera, tabl[i].rik,  tabl[i].misce,  tabl[i].cina , tabl[i].kilkist);
  write(f,tabl[i]);

я вже не знаю шо робити, ну як ше можна записати.

42

Re: Таблиці - відфільтрувати записи з данними про холодильники (продовж.)

ну от ще таке знайшов http://borland.ru/write-files/zapis-tab … fayl-i-ih/ , проте кажу ж не розумію наприклад

write (f, n : 4)

оцього. в тій программі ясно от а в моїй я не розумію ну написав я

write(f,tabl[i].nazva ы т.д.)

  ну а з зчитуванням, ну не розумію я , не розумію я

43

Re: Таблиці - відфільтрувати записи з данними про холодильники (продовж.)

Добре, якщо такі і не надумали, то скажу, що read не читає знак нового рядка, його readln читає. А потім eoln бачить, що рядок не скінчився, а read його не читає... і це в циклі.

44

Re: Таблиці - відфільтрувати записи з данними про холодильники (продовж.)

misha_beginner
Я бачу, у вас виникла проблема зі зчитуванням інформації з файлу. Я пропоную вам писати дані у файл не у вигляді таблиці, а окремими рядками. Тобто у файлі у вас буде не так:

Nord IceCool2000 50 ...

а отак:

Nord
IceCool2000
50
...

Тоді записувати інформацію ви будете таким чином:

writeln(f,tabl[i].virobn);
writeln(f,tabl[i].nazvanie);
writeln(f,tabl[i].kamera);
//...

І зчитувати її також буде дуже просто

for i := 1 to n do
begin
  readln(f,tabl[i].virobn);
  readln(f,tabl[i].nazvanie);
  readln(f,tabl[i].kamera);
  //...
end;

А на екран виводити ви й надалі можете таблицею.

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

45 Востаннє редагувалося misha_beginner (16.01.2014 00:58:07)

Re: Таблиці - відфільтрувати записи з данними про холодильники (продовж.)

трышки розыбравшись зробив отак:

 const 
      n=4;
 type
    xolod = record
      virobn:string[50];
      nazvanie:string[45];
      kamera:real;
      rik:integer;
      misce:string[45];
      cina:real;
      kilkist:real;
    end;
   var
   f:text;
   i:integer;
  procedure stvor;
  var
     i:integer;
     tabl:xolod;
     begin
           Assign(f,'d:\xolod.txt');
           rewrite(F);
           close(F);
           Assign(f,'d:\xolod.txt');
           append(F);
           for i:=1 to n do
           begin
            Write('virobn:');
            readln(tabl.nazvanie);
            Write('nazvanie:'); 
            readln(tabl.nazvanie);
            Write('kamera:');  
            readln(tabl.kamera);
             Write('rik:'); 
             readln(tabl.rik);
     Write('misce:'); 
     readln(tabl.misce);
     Write('cina:'); 
     readln(tabl.cina);
     Write('kilkist:'); 
     readln(tabl.kilkist);
     
      writeln(f,tabl.virobn:10,'|' ,tabl.nazvanie:15,'|',tabl.kamera:16,'|', tabl.rik:4,'|', tabl.misce:9,'|' , tabl.cina:9,'|' , tabl.kilkist:9,'|');
      end;
      close(F);
      End;
      
      Procedure Vuvid;
      var
         sss:string;
         begin
         assign(f, 'd:\xolod.txt');
         reset(F);
         while not  eof (F) do begin
         read(f,sss);
          If  (sss='1993') then
          begin
        
         writeln(sss);
         end;
         end;
         Close(F);
         
      End;
      
      begin
      
      stvor;
      vuvid;
      end.

все добре пише в файл, проте пише лише  основну таблицю, таку відфільтровану не пише. Що пробував? ПРобував просто тупо пысля

 If  (sss='1993') then
          begin

ставити

write(tabl[i]

і т.д. Тепер думка проте шо десь треба знову перед чимось правильно відкрити запис? я знову не так думаю?

46

Re: Таблиці - відфільтрувати записи з данними про холодильники (продовж.)

Якщо на початку write не стоїть файловий вказівник (у вашому випадку f), то це вивід на екран. Тому так, треба знову відкрити файл на запис, перш ніж намагатися щось у нього записати. Проблема у тому, що файловий вказівник у вас один, тому робити це у процедурі Vuvid трохи проблемно. Потрібно або заводити другий файловий вказівник, або робити це у іншому місці.

47

Re: Таблиці - відфільтрувати записи з данними про холодильники (продовж.)

Torbins написав:

Якщо на початку write не стоїть файловий вказівник (у вашому випадку f), то це вивід на екран. Тому так, треба знову відкрити файл на запис, перш ніж намагатися щось у нього записати. Проблема у тому, що файловий вказівник у вас один, тому робити це у процедурі Vuvid трохи проблемно. Потрібно або заводити другий файловий вказівник, або робити це у іншому місці.

останнє питання, шоб вже не перероблювати, хай вже буде в процедурах, де приьлизно втсулити, новий запис у файл?? перед 

 If  (sss='1993') then


Вибачте, трошкі не зрозумів вас, поняв го треба запис відкрити но де не зрозумів. Дякую, наперед вибачте

48

Re: Таблиці - відфільтрувати записи з данними про холодильники (продовж.)

misha_beginner
Краще за все буде зберегти усе зчитане з файлу у tabl (доречі куди він подівся?) А потім записати тільки необхідне за допомогою якоїсь третьої процедури.
Можна навіть чотири процедури зробити:

  • для зчитування з єкрану у tabl

  • для запису tabl у файл

  • для зчитування з файлу у tabl

  • для видалення з tabl усіх холодильників крім вироблених у 1993 році

P.S. Можете звертатися доки у вас не закінчаться питання.

49

Re: Таблиці - відфільтрувати записи з данними про холодильники (продовж.)

Краще за все буде зберегти усе зчитане з файлу у tabl (доречі куди він подівся?)


read(f,sss);
          If  (sss='1993') then
          begin
        
         writeln(sss);

можливо це??
чи це

writeln(f,tabl.virobn:10,'|' ,tabl.nazvanie:15,'|',tabl.kamera:16,'|', і т.д.

добре давайте так :) скажыть яку процедуру мені треба дописати, судячи з того шо в мене є :)

50 Востаннє редагувалося Torbins (16.01.2014 20:37:08)

Re: Таблиці - відфільтрувати записи з данними про холодильники (продовж.)

misha_beginner
Підставте у свою процедуру Vuvid другий шматок коду з повідомлення 44 цієї теми. Правда замість трьокрапки там треба буде іще дописати зчитування решти полів запису xolod. Після цього Vuvid перетвориться на "процедуру зчитування з файлу у tabl".
Кінець процедури stvor також треба буде переробити за прикладом із 44 повідомлення.
Те, що вийде, кидайте сюди, будемо думати над відсіюванням потрібних холодильників.

P.S. Бачу в останньому варіанті коду tabl перетворився з масиву на запис всередині процедури stvor. У 44 повідомленні я мав на увазі масив, такий як у першому повідомленні.

51

Re: Таблиці - відфільтрувати записи з данними про холодильники (продовж.)

поки отак

 const 
      n=4;
 type
    xolod = record
      virobn:string[50];
      nazvanie:string[45];
      kamera:real;
      rik:integer;
      misce:string[45];
      cina:real;
      kilkist:real;
    end;
   var
   f:text;
   i:integer;
  procedure stvor;
  var
     i:integer;
     tabl:xolod;
     begin
           Assign(f,'d:\xolod.txt');
           rewrite(F);
           close(F);
           Assign(f,'d:\xolod.txt');
           append(F);
           for i:=1 to n do
           begin
            Write('virobn:');
            readln(tabl.nazvanie);
            Write('nazvanie:'); 
            readln(tabl.nazvanie);
            Write('kamera:');  
            readln(tabl.kamera);
             Write('rik:'); 
             readln(tabl.rik);
     Write('misce:'); 
     readln(tabl.misce);
     Write('cina:'); 
     readln(tabl.cina);
     Write('kilkist:'); 
     readln(tabl.kilkist);
     writeln(f,tabl[i].virobn);
writeln(f,tabl[i].nazvanie);
writeln(f,tabl[i].kamera);
//...
  
      end;
      close(F);
      End;
      
      Procedure Vuvid;
      var
         sss:string;
         begin
         assign(f, 'd:\xolod.txt');
         reset(F);
         while not  eof (F) do begin
         read(f,sss);
          If  (sss='1993') then
          begin
        
         writeln(sss);
         writeln(f,tabl[i].virobn);
writeln(f,tabl[i].nazvanie);
writeln(f,tabl[i].kamera);
writeln(f,tabl[i].kamera);
writeln(tabl[i].rik);
writeln(tabl[i].misce);
writeln(tabl[i].cina);
 writeln(tabl[i].kilkist);
 for i := 1 to n do
begin
  readln(f,tabl[i].virobn);
  readln(f,tabl[i].nazvanie);
  readln(f,tabl[i].kamera);
end;
         end;
         end;
         Close(F);
         
      End;
вибачте якщо неправильно зрозумів вас
      
      begin
      
      stvor;
      vuvid;
      end.

52

Re: Таблиці - відфільтрувати записи з данними про холодильники (продовж.)

скажіть, що треба прибрати чи добавити.... дякую вам дуже :)

53

Re: Таблиці - відфільтрувати записи з данними про холодильники (продовж.)

Гм, поясніть мені, що таке tabl[i ]?

54 Востаннє редагувалося misha_beginner (16.01.2014 23:40:06)

Re: Таблиці - відфільтрувати записи з данними про холодильники (продовж.)

Torbins написав:

Гм, поясніть мені, що таке tabl[i ]?

напевно просто tabl.nazvanie треба, ну ви ж  в казали з 44 поста скопфювати у вас теж 

tabl[i].

P.S. у вас нема  скайпу, чи ше шось давайте може там списуватись шоб форум не засоряти ?
просто в мене пару строк  з

 tabl[i]

  :)

55

Re: Таблиці - відфільтрувати записи з данними про холодильники (продовж.)

tabl[i ] - це масив. Ви не зможете одночасно і читати і писати інформацію в один файл всередині процедури Vuvid. Тому вам спочатку треба зчитати інформацію про усі холодильники у масив, а потім записати інформацію про деякі із них назад у файл.

56

Re: Таблиці - відфільтрувати записи з данними про холодильники (продовж.)

Torbins написав:

tabl[i ] - це масив. Ви не зможете одночасно і читати і писати інформацію в один файл всередині процедури Vuvid. Тому вам спочатку треба зчитати інформацію про усі холодильники у масив, а потім записати інформацію про деякі із них назад у файл.

ви маэтн на увазі

 read(f,tabl[i].nazvaniе і т.д.)

то так роюити не можна бо це не  типізований файл

57

Re: Таблиці - відфільтрувати записи з данними про холодильники (продовж.)

Правильно, нетипізований. Тому отак робити не можна, бо елемент масиву має тип xolod:

read(f, tabl[i]);

А отак робити можна, бо  xolod.nazvaniе має тип string[45]:

readln(f, tabl[i].nazvaniе);

58 Востаннє редагувалося misha_beginner (18.01.2014 13:12:31)

Re: Таблиці - відфільтрувати записи з данними про холодильники (продовж.)

ідеї закінчились

const 
      n=4;
 type
    xolod = record
      virobn:string[50];
      nazvanie:string[45];
      kamera:real;
      rik:integer;
      misce:string[45];
      cina:real;
      kilkist:real;
    end;
   var
   f:text;
   i:integer;
   procedure vvod;
  var
     i:integer;
     tabl:xolod;
     begin
           Assign(f,'d:\xolod.txt');
           rewrite(F);
           for i:=1 to n do begin
           Write('virobn:');
            Write('nazvanie:'); 
            Write('kamera:');  
             Write('rik:'); 
     Write('misce:'); 
     Write('cina:'); 
     Write('kilkist:'); 
writeln(f,tabl.virobn);
writeln(f,tabl.nazvanie);
writeln(f,tabl.kamera);
writeln(tabl.rik);
writeln(tabl.misce);
writeln(tabl.cina);
writeln(tabl.kilkist);
end;
Close(f);
End;

Procedure vivod;
var 
   s:string;
   begin
   writeln('-----------------------------------------------------------------------');
   writeln(' | Виробництво | Назва | Обэм Камери | Рік | Місце | Ціна | Кількість|');
   writeln('-----------------------------------------------------------------------');
assign(f,'d:\xolod.txt');
Reset(f);
 while not eof(f) do 
 begin
 readln(f,tabl[i].virobn , tabl[i].nazvanie , tabl[i].kamera  , tabl[i].rik  , tabl[i].misce , tabl[i].cina , tabl[i].kilkist );
 writeln(tabl.virobn:10,'|' ,tabl.nazvanie:15,'|',tabl.kamera:16,'|', tabl.rik:4,'|', tabl.misce:9,'|' , tabl.cina:9,'|' , tabl.kilkist:9,'|');
end;
Close(f);
End;

Procedure obrobka;
begin
assign(f, 'd:\xolod.txt');
Reset(f);
while not eof(f) do begin
    readln(f,tabl[i].virobn , tabl[i].nazvanie , tabl[i].kamera  , tabl[i].rik  , tabl[i].misce , tabl[i].cina , tabl[i].kilkist   );
     If (tabl[i].rik = 1993) then 
     write(tabl[i].nazvanie:15,'|',tabl[i].kamera:16,'|', tabl[i].rik:4,'|', tabl[i].misce:9,'|' , tabl[i].cina:9,'|' , tabl[i].kilkist:9,'|');
     end;
     Close(f);
     End;
     
     BEGIN
     vvod;
     vivod;
     obrobka;
     End.

що ж робити воно ругається не існує tabl на строке

 readln(f,tabl[i].virobn 

:( вообще не знаю  чи правильно переробив  код .гляніть пліз

59 Востаннє редагувалося misha_beginner (18.01.2014 14:36:02)

Re: Таблиці - відфільтрувати записи з данними про холодильники (продовж.)

ще так попробував:

const 
     n=4;
     virobn:array[1..n] of string[45]=('Samsung' , 'Atlant' , 'Lg' , 'Boshch');
     nazva:array[1..n] of string[50]=('Samsung-3400' , 'Atlant-200' , 'Lg-120' , 'Boshch-9000');
     kamera:array[1..n] of real=(1,2,3,3);
     rik:array[1..n] of integer=(1993,1993,1999,2000);
     misce:array[1..n] of string[45]=('Korea' , 'Russia' , 'Japan' , 'Japan');
     cina:array[1..n] of integer=(13000 , 19000 , 12500 , 14500);
     kilkist:array[1..n] of real=(1,1,1,1);
     type
    xolod = record
      vr:string[50];
      nv:string[45];
      kr:real;
      rk:integer;
      misc:string[45];
      cn:real;
      kst:real;
    end;
    var
      i:integer;
      f:text;
      sh:xolod;
      
      Procedure stvor;
      var 
         j:integer;
       begin
       Assign(f,'zadolbalo.txt');
       Rewrite(f);
       for j:=1  to n do
writeln(f , virobn[j]:10,'|' ,nazva[j]:15,'|',kamera[j]:16,'|', rik[j]:4,'|', misce[j]:9,'|' , cina[j]:9,'|' , kilkist[j]:9,'|');   
Close(f);
End;

Procedure vvid;

begin
Assign(f, 'zadolbalo.txt');
Append(f);
Writeln('Vvedenna dannix');
with sh do
begin
Write('virobn:'); 
readln(vr);
     Write('nazvanie:'); 
     readln(nv);
     Write('kamera:'); 
     readln(kr);
     Write('rik:'); 
     readln(rk);
     Write('misce:'); 
     readln(misc);
     Write('cina:'); 
     readln(cn);
     Write('kilkist:'); 
     readln(kst);
     
     writeln(f , vr:10 , nv:15 , kr:16 , rk:4 , misc:9 , cn:9 , kst:9);
     end;
     Close(f);
     End;
     
     Procedure Zagol;
     begin
   writeln('-----------------------------------------------------------------------');
   writeln(' | Виробництво | Назва | Обэм Камери | Рік | Місце | Ціна | Кількість|');
   writeln('-----------------------------------------------------------------------');
   End;
   
   Procedure Vuvid;
   var
      sss:string;
      begin
      
       assign(f , 'zadolbalo.txt' );
       Reset(f);
       while not eof(f) do
       begin
       readln(f,sss);
       writeln(sss);
       end;
       Close(f);
  
        writeln('-----------------------------------------------------------------------');
        
        End;
        
        Procedure obrobka;
        var
            sss:string;
        begin
        Zagol;
   Assign(f ,  'zadolbalo.txt');
   Reset(f);
   while not eof(f) do 
   begin
   readln(f,sss);
   If (rik[j] = 1993) then
   writeln(sss);
   end;
   Close(f);
   End;
   
   BEGIN
   stvor;
   vvid;
   vuvid;
   obrobka;
   End.

теж нічого не вийшло

60

Re: Таблиці - відфільтрувати записи з данними про холодильники (продовж.)

misha_beginner
А що це Ви на російську перейшли?