1 Востаннє редагувалося Torbins (14.01.2014 21:22:50)

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

Всі привіт.! Знову я зі своїми недохолодильниками. Программу треба було записати в текстовий файл.
Ось мій код:

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
      i:integer;
      tabl:array[1..n] of xolod;
      
      f:text;
      s:string;
      procedure lin(m:integer);
      var
         i:integer;
  begin
  for i:=1 to m do
  write('-');
  writeln;
  end;
  
  begin
  
  assign(f,'xolodilnik.txt');
  
  append(f);
  Writeln('Vvedi danni');
  For i:=1 to n do
  begin
   Write('virobn:'); readln(tabl[i].virobn);
     Write('nazvanie:'); readln(tabl[i].nazvanie);
     Write('kamera:');  readln(tabl[i].kamera);
     Write('rik:'); readln(tabl[i].rik);
     Write('misce:'); readln(tabl[i].misce);
     Write('cina:'); readln(tabl[i].cina);
     Write('kilkist:'); readln(tabl[i].kilkist);
     writeln(f,tabl[i].virobn,' ',tabl[i].nazvanie,' ', tabl[i].kamera, ' ', tabl[i].rik, ' ' , tabl[i].misce, ' ' , tabl[i].cina , ' ' , tabl[i].kilkist);
  end;
  Close(f);
  reset(f);
  
  while not eof(f) do begin
       while not eoln(f) do begin
  read(f,s);
  write(s);
  end;
  end;
  close(f);
  Lin(69);
  writeln(' | Виробництво | Назва | Обэм Камери | Рік | Місце | Ціна | Кількість|');
  Lin(69);
  For i:=1 to n do
  begin
   write(' |', tabl[i].virobn:10,'|');
write(tabl[i].nazvanie:10,'|',tabl[i].kamera:13,'|', tabl[i].rik:4,'|', tabl[i].misce:9,'|' , tabl[i].cina:9,'|' , tabl[i].kilkist:9,'|');
writeln;
Lin(69);
end;
  writeln;
  writeln('vidsortovano');
  Lin(69);
  For i:=1 to  n do
  begin
  If  (tabl[i].rik = 1993) then
  begin
write(' |', tabl[i].virobn:10,'|');
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,'|');
  writeln;
  Lin(69);
  end;
  end;
  End.

помилка  була на рядку 

writeln(f,tabl[i].virobn,' ',tabl[i].nazvanie,' ', tabl[i].kamera, ' ', tabl[i].rik, ' ' , tabl[i].misce, ' ' , tabl[i].cina , ' ' , 

. убрав після цього close(f), тепер взагалі не фільтрує таблицю. будь ласка вкажіть у чому я напартачив, знаю помилок може бути багато,  проте не можу їх знайти

2

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

Недумаю що правий але , в стрінговий тип переводити не потрібно ?

3

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

Panda написав:

Недумаю що правий але , в стрінговий тип переводити не потрібно ?

думаю з типом все нормально, десь помилка в самих процедруах створення файлу :(

4

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

Пане, дуже вас прошу - перечитуйте свої запитання перед тим, як їх викладати. Ставте примітивні питання до окремих речень, щонайменше. А ще краще - спробуйте самі відповісти на ті питання, що ви ставите. Всім буде значно легше - ви швидше і точніше отримаєте відповідь, якщо питання буде притомним.

misha_beginner написав:

Знову я зі своїми недохолодильниками.

Дуже радий, мені весь архів форуму піднімати треба, щоб знайти, хто ви і що то за недохолодильники? Мені буде легше закрити сторінку. А от якби тут було посилання - мова була б інша.

misha_beginner написав:

Программу треба було записати в текстовий файл.

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

misha_beginner написав:

Ось мій код:

Цей код неможливо читати. У мене, до речі, була думка його вам вирівняти і віддати як є - це, як на мене, достатня допомога.

misha_beginner написав:

помилка  була на рядку

Яка помилка - це ми телепатично побачити маємо? Невже "неможливо записати в файл, бо скінчилося місце на диску"?

misha_beginner написав:

убрав після цього close(f)

А нащо ви це зробили? У вас проблема ж в іншому рядку, чи ні?

misha_beginner написав:

будь ласка вкажіть у чому я напартачив

Ви забули закрити файл після того, як записали туди дані. Це треба зробити так:

close(f);
misha_beginner написав:

знаю помилок може бути багато,  проте не можу їх знайти

А ви спробуйте зробити так: напишіть "я очікую того і того, а отримую те і те". Якщо це не допоможе вам знайти відповідь, питайте тут на форумі. Тільки не розраховуйте на телепатів - якщо є якась дрібниця, яка, на вашу думку, може хоч якось вплинути на питання - краще напишіть, аніж пропустіть.

5

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

вибачте за код, я просто  звик так вже писати, рідко дотримуюсь вирівнювання кода. помилка була така Ошибка времени выполнения: Ссылка на объект не указывает на экземпляр объекта. дані про 2 холодильника заповнювались, а коли вводиш 3 холодильик, дані, то вибиває така помилка, переніс close (f) після end; тепер взагалі не відфільтровує табличку. дані в текстовий файл записалися лише про 2 холодильника 3 вже не пише

6

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

misha_beginner
То в чому конкретно проблема? На екрані відсортована таблиця з'являється?

P.S. Ви могли продовжити свою попередню тему, адже задача та сама.

7

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

Torbins написав:

misha_beginner
То в чому конкретно проблема? На екрані відсортована таблиця з'являється?

P.S. Ви могли продовжити свою попередню тему, адже задача та сама.

добре заре туди відпишусь, хвилинку

8

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

Та вже давайте тут продовжувати.

9

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

misha_beginner написав:

тепер взагалі не відфільтровує табличку. дані в текстовий файл записалися лише про 2 холодильника 3 вже не пише

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

10

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

добре ось  дивіться, в чому проблема. вибиває помилка на рядку

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

Ошибка времени выполнения: Ссылка на объект не указывает на экземпляр объекта. коли вводиш дані на 3 холодильник то вибиває попробуйте скопіюйте собі код будь ласка

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
      i:integer;
      tabl:array[1..n] of xolod;
      
      f:text;
      s:string;
      procedure lin(m:integer);
      var
         i:integer;
  begin
  for i:=1 to m do
  write('-');
  writeln;
  end;
  
  begin
  
  assign(f,'xolodilnik.txt');
  
  append(f);
  Writeln('Vvedi danni');
  For i:=1 to n do
  begin
   Write('virobn:'); readln(tabl[i].virobn);
     Write('nazvanie:'); readln(tabl[i].nazvanie);
     Write('kamera:');  readln(tabl[i].kamera);
     Write('rik:'); readln(tabl[i].rik);
     Write('misce:'); readln(tabl[i].misce);
     Write('cina:'); readln(tabl[i].cina);
     Write('kilkist:'); readln(tabl[i].kilkist);
     writeln(f,tabl[i].virobn,' ',tabl[i].nazvanie,' ', tabl[i].kamera, ' ', tabl[i].rik, ' ' , tabl[i].misce, ' ' , tabl[i].cina , ' ' , tabl[i].kilkist);
  close(f);
  end;
  reset(f);
  
  while not eof(f) do begin
       while not eoln(f) do begin
  read(f,s);
  write(s);
  end;
  end;
  close(f);
  Lin(69);
  writeln(' | Виробництво | Назва | Обэм Камери | Рік | Місце | Ціна | Кількість|');
  Lin(69);
  For i:=1 to n do
  begin
   write(' |', tabl[i].virobn:10,'|');
write(tabl[i].nazvanie:10,'|',tabl[i].kamera:13,'|', tabl[i].rik:4,'|', tabl[i].misce:9,'|' , tabl[i].cina:9,'|' , tabl[i].kilkist:9,'|');
writeln;
Lin(69);
end;
  writeln;
  writeln('vidsortovano');
  Lin(69);
  For i:=1 to  n do
  begin
  If  (tabl[i].rik = 1993) then
  begin
write(' |', tabl[i].virobn:10,'|');
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,'|');
  writeln;
  Lin(69);
  end;
  end;
  End.
Post's attachments

Безымянный.png 1.06 mb, 250 downloads since 2014-01-14 

11

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

це коли close(f) стоїть перед end;

12

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

Ви розумієте що робить "close(f)"?
Ця дія завершує роботу з файлом, на який вказує отой f. І до наступного reset/append/rewrite цей вказівник є недійсним, і з ним не можна працювати.

13 Востаннє редагувалося misha_beginner (14.01.2014 21:35:44)

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

забрав close(f)
тепер помилка на reset (f). Ошибка времени выполнения: Процесс не может получить доступ к файлу "C:\Users\Admin\Desktop\laba\xolodilnik.txt", так как этот файл используется другим процессом.
Яким другимс процесом якшо воно все закрито

14

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

Та правильно у вас в повідомлені close стоїть, ви просто пояснюєте незрозуміло - я з ваших пояснень вирішив, що ви прибирали той close, що є в коді.

15

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

koala написав:

Та правильно у вас в повідомлені close стоїть, ви просто пояснюєте незрозуміло - я з ваших пояснень вирішив, що ви прибирали той close, що є в коді.

тепер дивіться, замість сформованої таблиці просто невеличкий текст. цетой код то шо я в самому поатку теми кінув

Post's attachments

Безымянный.png 1.08 mb, 263 downloads since 2014-01-14 

16 Востаннє редагувалося Torbins (14.01.2014 21:49:14)

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

misha_beginner
reset/append/rewrite дадуть збій, якщо файловий вказівник ще використовується. У першому повідомленні ця частина була зроблена правильно.

Щось я бачу ви сильно плаваєте у питаннях роботи з файлами. Давайте ви прочитаєте оце: http://pascal.org.ua/files, а потім ми продовжимо обговорення вашої програми.

Я так розумію, що в кінці-кінців програма має записати відфільтровану табличку назад у файл?

17

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

ось як звучало завдання. ті файли я вже читав. скласти програму створення текстового файлу з іменем Т, з інформацією про "холодильники"; вивести відповідну таблицю даних файла і ту її частину, яка містить відомості про холодильники на складі: місто виробництва, назва холодильника, обсяг холодильної камери, рік та місяць випуску, ціна, кількість. використовуючи сформований файл, вивести інформацію про холодильники 1993 року випуску. передбачити в програмі вилучення та добавлення даних.

18

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

Більше так не робіть. Якщо ви кладете код, то опис ситуації має стосуватися саме того коду, а не якихось змін у ньому. А ваше повідомлення з описом помилки в коді з першого повідомлення йде аж 15-м в темі - то як вам допомогти, якщо опис вашої проблеми треба чи не лещатами тягнути?
Проблема не в тому що виводиться "просто невеличкий текст" (це не "просто невеличкий текст", а перший рядок з файлу, до речі), а в тому, що програма зависає, прочитавши один рядок. І ви маєте помітити, що програма не припиняє роботу - але чомусь ви про це ані слова не написали.
А тепер спробуйте пояснити, що саме робить ось цей фрагмент коду:

 while not eoln(f) do begin
  read(f,s);
  write(s);
  end;

Бо проблема саме в ньому.

19

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

ну дивіться я робив приклад по цьому http://mojainformatika.ru/paskal/uroki- … -fajl.html . я думав створити змінну s , поки не кінець файла записати у файл f данні s. але тепер зрозумыв шо s ніде не використовуються. я думав так робити

read(f,tabl[i])

але це не можа робити, це можна робити тыльки з типізованим файлом. і тут я застопорився. я не розумію шо треба було тут записати в read якшо

tabl[i] 

не можна.

20

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

думав шоб зчитало дані а потім записало їх у файл....