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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2012, 13:19   #1
microlab
Пользователь
 
Регистрация: 06.11.2008
Сообщений: 51
По умолчанию Обработка типизированного файла

Программа которая создает файл. (работает)
Код:
type
  tovar = record
    name: string[20];
    price: string[20];
  end;
var
  t: tovar;
  f: file of tovar;
  k, n: integer;
     begin
     assign(f,'price.txt');
     rewrite(f);
     write('Введите количество товаров');
     readln(n);
     for k:=1 to n do 
       begin
          rewrite(f);
          writeln('Введите наименование,k,-го товара');
          readln(t.name);
          writeln('Введите цену товара');
          readln(t.price);
          writeln(f,t);
          end;
    close(f);
    writeln('Файл создан ');
    end.
Необходима программы обработки созданного файла. Выведет на экран весь прайс лист, изменит цену товара с заданным наименованием допишет в файл данные о новом товаре предварительно произведя проверку.

Вот моя кривая попытка поправьте пожалуйста
Код:
type
  tovar = record
    name: string[20];
    price: string[20];
  end;
var
  t: tovar;
  f: file of tovar;
  k, n: integer;
  name_t:string;
  new_p:real;
  begin
  assign(f.'price');
  reset(f);
  writeln('Прайс-лист':20);
  while not Eof(f) do 
                  begin
                  readln(f,t);
                  write(t.name:20,t.price:10:2);
                  end;
  close(f);
  reset(f);
  write('Введите наименование товара, у которого меняется цена');
  readln(name_t);
  write('Введите новую цену');
  readln(new_t);
  while not Eof(f) do 
                  begin
                  readln(f,t);
                  if t.name=name_t then 
                      begin
                      t.price:=new_p
                      seek(f.filepos(f)-1);
                      write(f,t);
                      end;
                  end;
   close(f); 
   end.

Последний раз редактировалось Stilet; 14.05.2012 в 13:23. Причина: quote не закрылся
microlab вне форума Ответить с цитированием
Старый 14.05.2012, 20:13   #2
Arhangel7
Пользователь
 
Регистрация: 27.02.2010
Сообщений: 90
По умолчанию

Код:
AssignFile(var F; FileName: string) - связывает файловую переменную F и файл с именем FileName.

Reset(var F[: File; RecSize: word]) - открывает существующий файл. При открытии нетипизированного файла RecSize задает размер элемента файла.

Rewrite(var F[: File; RecSize: word]) - создает и открывает новый файл.

Read(F,v1[,v2,…vn]) - чтение значений переменных начиная с текущей позиции для типизированных файлов и строк для текстовых.

Write(F,v1[,v2,…vn]) - запись значений переменных начиная с текущей позиции для типизированных файлов и строк для текстовых.

CloseFile(F) - закрывает ранее открытый файл.

Seek(var F; NumRec: Longint) - для нетекстового файла устанавливает указатель на элемент с номером NumRec.

FilePos(var F): longint - для нетекстовых файлов возвращает номер текущей позиции. Отсчет ведется от нуля.

FileSize(var F): longint - для нетекстовых файлов возвращает количество компонентов в файле.

Eoln(var F: TextFile): boolean - возвращает True, если достигнут конец строки.

Eof(var F) ): boolean - возвращает True, если достигнут конец файла.

SeekEoln(var F: TextFile): boolean – возвращает True, если пройден последний значимый символ в строке или файле, отличный от пробела или знака табуляции.

SeekEof(var F: TextFile): boolean - то же, что и SeekEoln, но для всего файла.
как-то так

Последний раз редактировалось Arhangel7; 14.05.2012 в 20:17.
Arhangel7 вне форума Ответить с цитированием
Старый 14.05.2012, 23:22   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

microlab, почему попытка кривая?! нормальная попытка!

я только одну глобальную ошибку увидел!
Код:
tovar = record
    name: string[20];
    price: string[20];
...
var
  new_p:real;


t.price:=new_p
во-первых, нельзя строке присвоить вещественное число.
я бы рекомендовал измерить price в записи на real - чтобы и хранилось вещественное число, и записывалось новое вещественное число.
ну, либо new_p сделайте типа String[20];

во-вторых, точку с запятой после операторов не теряйте.

в-третьих, чтение из ТИПИЗИРОВАННОГО файла производится через команду Read (Readln - это в данном случае ошибка - допускается такое только для текстовых файлов. и файловая переменная (как и любые параметры), отделяется запятой, а не точкой..

Код:
type
  tovar = record
    name: string[20];
    price: real;
  end;
var
  t: tovar;
  f: file of tovar;
  k, n: integer;
  name_t: string;
  new_p: real;
begin
  assign(f, 'price');
  reset(f);
  writeln('Прайс-лист': 20);
  while not Eof(f) do
  begin
    read(f, t);
    write(t.name: 20, t.price: 10: 2);
  end;
  close(f);
  reset(f);
  write('Введите наименование товара, у которого меняется цена');
  readln(name_t);
  write('Введите новую цену');
  readln(new_p);
  while not Eof(f) do
  begin
    read(f, t);
    if t.name = name_t then
    begin
      t.price := new_p;
      seek(f, filepos(f) - 1);
      write(f, t);
    end;
  end;
  close(f);
end.

Последний раз редактировалось Serge_Bliznykov; 14.05.2012 в 23:26.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.05.2012, 17:36   #4
microlab
Пользователь
 
Регистрация: 06.11.2008
Сообщений: 51
По умолчанию

Спасибо, советы учту в будущих программах.
microlab вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с чтением из типизированного файла BeCTHuK Паскаль, Turbo Pascal, PascalABC.NET 2 05.10.2011 20:57
чтение из типизированного файла kyop Паскаль, Turbo Pascal, PascalABC.NET 9 13.07.2011 17:32
Обработка типизированного файла со сведениями о книгах (язык C) Светлана18 Помощь студентам 1 26.04.2011 09:00
Удаление записей из типизированного файла whiskey Общие вопросы Delphi 6 30.10.2010 15:05
создание типизированного файла Siluet Общие вопросы Delphi 10 26.09.2009 12:47