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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2012, 18:41   #11
Андрос
Пользователь
 
Регистрация: 19.04.2009
Сообщений: 45
По умолчанию

Итак, поиск вроде сделал по всему сто надо - наимен, артикуль, колич, стоимость. Чего хочу - чтобы пользователь, выбрав работу с тип. файлом, выбрав пункт 6 - поиск увидел перед собой 1 поиск по наимен 2 - поиск по.... и т.п. вот он выбрал какой нить вид поиска, произвел его,просмотрел результат на экране, а снизу сообщение типу "Для выбора операций с тип файлом нажмите любую клавишу" и у нас после нажатия откроется список операций -
Код:
viberite operaciy
    writeln('1 - Sozdat New File');
    writeln('2 - Open File and ADD record');
    writeln('3 - Prosmotr');
    writeln('4 - Korrektirovka');
    writeln('5 - POISK');
    writeln('6 - Vihod v osnovnoe memu'); -там где мы выбираем тип файла с которым работаем
Как сделать выход в основное меню? - никак не получается( подскажите пожалуйста
Вот Новый код программы
Вложения
Тип файла: txt MEN.txt (7.0 Кб, 120 просмотров)
Андрос вне форума Ответить с цитированием
Старый 11.11.2012, 20:34   #12
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Андрей, вот же Вы путаник!

выкладываю подправленный файл.
MEN3.txt

поиск у Вас с ошибкой. В любом случае будет писать
writeln('net takogo tovara! Press any key to continue');
уже мне лень исправлять, сами подправьте!

И ещё раз повторю. Так Вы далеко не уедете.
для того, чтобы созданный Вами код не оказался слишком сложным для Вас же, Вам нужно:
1) ОБЯЗАТЕЛЬНО структурировать код! Без этого в этой каше ногу сломать можно!

2) выделяйте куски кода в процедуры. Это повышает и наглядность и удобство отладки/модификации кода.
Например, каждую процедуру поиска можно вынести в отдельную процедуру (а если немножко поработать, то можно сделать ОДНУ процедуру, куда передавать имя файла и тип поиска и внутри процедуры написать примерно так
Код:
 procedure PokazatNaudennyeZapisi(fdFN : string; TipPoiska : integer);
var 
   fd: file of tov;
   sPoisk : string;
   kFound : boolean;
begin
  WriteLn( 'Что ищем: ' );
  Readln( sPoisk );

  kFound := false;
  assign(fd, fdFN );
  reset(fd);
  while (not eof(fd)) do begin
     read(fd, dan);
     if (TipPoiska=1) and (dan.artik = sPoisk)
          or 
        (TipPoiska=2) and (dan.naim = sPoisk)
          or  
        (TipPoiska=3) and (dan.kol = sPoisk)
          or  
        (TipPoiska=4) and (dan.stoim = sPoisk)
      then begin
          writeln(dan.artik, ' ', dan.naim, ' ', dan.kol, ' ', dan.stoim);
          kFound := true;
      end; 
    end;
    Close(fd);
    if Not kFound then
        WriteLn('net takogo tovara!');
    WriteLn;
    WriteLn('Press any key to continue');
    ReadKey; 
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.11.2012, 20:42   #13
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

впрочем, ладно, раз уже процедуру поиска я почти написал, поправлю Ваш код на работу с этой процедурой..

вот изменённый код: MEN4.txt
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.11.2012, 21:10   #14
Андрос
Пользователь
 
Регистрация: 19.04.2009
Сообщений: 45
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
впрочем, ладно, раз уже процедуру поиска я почти написал, поправлю Ваш код на работу с этой процедурой..

вот изменённый код: Вложение 55057

Вот наш измененный код с удалением:
Вложения
Тип файла: txt MEN4.txt (8.8 Кб, 120 просмотров)

Последний раз редактировалось Андрос; 12.11.2012 в 17:41.
Андрос вне форума Ответить с цитированием
Старый 13.11.2012, 00:22   #15
Андрос
Пользователь
 
Регистрация: 19.04.2009
Сообщений: 45
По умолчанию

вот файл без ФД2 посмотрите корректировку,если не трудно. Разобрался, пропустил сеек перед врите в конце. Вроде все норм работает, У вас есть идеи по поводу нетип. файла?

Текстовый фай - создание/просмотр. В нем нужно сделать - создать новый, просмотр, открыть созданный для дозаписи. Ну как мы делали в типиз. файле. Это пока просто набросок на создание и просмотр, без дозаписи.
Вложения
Тип файла: txt MEN4VBEZ.txt (8.9 Кб, 104 просмотров)
Тип файла: txt TEXTFV1.txt (1.9 Кб, 122 просмотров)

Последний раз редактировалось Андрос; 13.11.2012 в 02:06.
Андрос вне форума Ответить с цитированием
Старый 14.11.2012, 11:38   #16
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию нетипизированный файл

выкладываю пример работы с нетипизированным файлом.

ещё раз повторю то, что я уже неоднократно говорил.
При создании нетипизированного файла у Вас ПОЛНОСТЬЮ развязаны руки в плане того, что и как в этот файл писать. Начиная с создания какой-то своей структуры (примитивный образец такой структуры воплотил я в своём примере) и заканчивая записью в файл индексов, вспомогательной информации, деревьев и т.д. и т.п. Кстати, используя в программе нетипизированный файл можно легко читать данные, сохранённые в ТИПИЗИРОВАННЫЙ файл на диске.
Так что, в примере одно из огромного множества вариантов.

по сути, в данном файле-примере записывает количество элементов в массиве, а после этого целиком весь массив (в моём примере в этом массиве 5 записей типа TOV - общий размер массива 230 байт).

Разбирайтесь.
Будут вопросы - милости прошу.
Вложения
Тип файла: rar MEN5NT.rar (2.8 Кб, 7 просмотров)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.11.2012, 17:44   #17
Андрос
Пользователь
 
Регистрация: 19.04.2009
Сообщений: 45
По умолчанию немного поясните

Если не трудно ответьте прямо в коде под моими коментами, или поправьте если я не так написал свои коментарии. Если я правильно понимаю, то количество записей, которые мы можем ввести в нетип файл не может превышать 5, так??а если поставить что переменная SizeBuf = 50 - то 50 записей сможем ввести, и в коде ничего ненадо будет менять? Если не трудно расскажите немного о блокреад,блокврайт, точнее про параметры, чтоб стало немного понятнее. и если не трудно то про переменную kolvo - она имеет какое-то значение сразу и переменную ReadCount???
вот файл с процедурой и моими коментами...
-----
Вот скомпонованный файл программы с тип,нетип, текст. Только вот что то не получилось вставить проверку наличия номера записи в тип. файле на корректировку, удаление

Код:
if (nom>0) and (nom<FileSize(fd)) 
then   .... <код удаления>
else WriteLn('Нет записи с таким номером в файле!');
то у меня все время выводил нет такой записи, то выведит найденную запись а потом "нет записи с таким номером в файле" (
Хотелось бы разобраться до конца с нетипиз файлом и доделать этот недочет в проверкой номера. Может у Вас есть замечания, пока еще не отнес преподу на показ и есть немного времени что-то подшаманить?
Вложения
Тип файла: txt вопросы.txt (4.6 Кб, 125 просмотров)
Тип файла: txt MEN5NTvkon.txt (14.8 Кб, 113 просмотров)

Последний раз редактировалось Андрос; 14.11.2012 в 19:05.
Андрос вне форума Ответить с цитированием
Старый 14.11.2012, 23:29   #18
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
если поставить что переменная SizeBuf = 50 - то 50 записей сможем ввести, и в коде ничего ненадо будет менять?
в коде ничего не надо будет менять. А вот старый файл, созданный версией программы с другим буфером программа прочитать НЕ СМОЖЕТ! (нужно создать нетипизированный файл заново, с новым размером блока).


Цитата:
flagStopRead : boolean; {флаг проверки чего-то???}
флаг остановки чтения - если (вдруг) из файла прочитается меньше, чем мы расчитывали - это признак того, что произошла ошибка чтения, да и дальше читать не нужно

Цитата:
Rewrite(fnt,1) {открываем файл для записи, А ДЛЯ ЧЕГО 1,типа с первого номера буф. переменной?}
ни в коем разе! 1 - это размер блока, который мы будет писать в наш файл. 1 означает, что мы будем оперировать кусочками по 1(одному) байту.
Посмотрите, Вы же в своём сообщении на первой страницы темы приводили ссылки на описание работы с нетипзированным файлом. Там про блоки есть инфорация. Если единицу не указывать, то запись(чтение) будет производится блоками по 128 байт. (это наследие мрачных времён...)

Цитата:
Reset(fnt,1); {открываем для чтения, А ЗАЧЕМ 1??}
читать будем побайтно (см. комментарий выше)
Цитата:
{sizeOf(i) определяет размер памяти, который отводиться для переменной i}
это правильно. так и есть.
Цитата:
BlockWrite(fnt, Buf[1], SizeOf(Buf)); {теперь запишем массив записей целиком}
{Для чего 1 в Buf[1]??????????????}
на самом деле, в данном случае, можно писать и Buf[1] и просто Buf. в данном случае разницы нет.
чтобы не путаться, Вам лучше написать так:
Код:
BlockWrite(fnt, Buf, SizeOf(Buf));
Цитата:
BlockRead(fnt, Kolvo, sizeOf(Kolvo), ReadCount);
{Если не трудно объясните эту строку - записываем в файл из переменной kolvo далее определяем объем памяти для этой переменной и ...количество фактически переданных записей??? не понимаю}
нет. ЧИТАЕМ из файла fnt в переменную Kolvo число байт, равное размеру переменной Kolvo. Число фактически прочитанных байт процедура чтения возвращает в переменной ReadCount. очевидно, что если мы хотели прочитать 2 байта и ReadCount вернула 2, значит процедура успешно два байта и прочитала.
Если число, сколько мы хотели прочитать не совпадает с тем числом, которое фактически прочиталось, значит имеется какая-то проблема чтения, нужно материться, работать дальше смысла нет. А в данном коде ошибку не выдаю, чтобы не усложнять код...

теперь по поводу удаления.
там у вас всё было закомментирвоано.
расскомментировал. добавил провавший куда-то end
проверил, всё работает. я не знаю, что Вы делаете не так!

на всякий случай привожу пример кода, который я тестировал:
Код:
       6: {delete}
       begin

         Assign(fd, fdFileName);
         reset(fd);

         writeln('Vvedi nomer zapisi');
         readln(nom);

         if (nom>0) and (nom<FileSize(fd))
         then   begin
           seek(fd,filesize(fd)-1);
           read(fd,dan);
           seek(fd,nom-1);
           write(fd,dan);
           {del last element}
           seek(fd,filesize(fd)-1);
           truncate(fd);
           close(fd);
           WriteLn; WriteLn('Zapis Deleted! ***Press Enter to continue');
         end
         else writeln('V File net zapisi s takim nomerom');
         Readln;
       end; 
       
       end; {case ct}


    until ct=7;

Последний раз редактировалось Serge_Bliznykov; 14.11.2012 в 23:53.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.11.2012, 18:28   #19
Андрос
Пользователь
 
Регистрация: 19.04.2009
Сообщений: 45
По умолчанию снова проблемы

Сегодня ходил показывать. Рассказываю...

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

вот что то нашел, но не знаю, это наверн не пузырек? http://www.cyberforum.ru/pascal/thread39220.html

2) Потом про текстовый файл. Там где мы делали добавить запись в существующий файл, нужно делать это через процедуру append.
Потом, сказал сделать так - сделать еще одну переменную типа стринг, и в нее засунуть наш вывод информации, чтобы как бы данные записывались и хранились в файле не через новую строку, а чтобы вся инфа шла строкой, длинна которой не должна превышать 256 символов(

3) про нетип файл много писать - отпишусь вечером.

Последний раз редактировалось Андрос; 15.11.2012 в 19:33.
Андрос вне форума Ответить с цитированием
Старый 18.11.2012, 22:01   #20
Андрос
Пользователь
 
Регистрация: 19.04.2009
Сообщений: 45
По умолчанию подробности

Итак,1 проблему в текстовом файле с функцией Append я решил, теперь нормально добавляет запись в существующий файл, но не могу решить проблему с выводом информации в строку. Переменную str1 сделал, в нее вроде закинул данные, НО выводиться только последняя запись, а как исправить чтобы все записи которые мы ввели были в нашей переменной str1 и вывелись в строчку не превышающую 256 символов???

2 - сортировку начал пробовать делать , но не получается, ругается "тайп маш" не совсем понимаю как и где исправить...Данные отсортированные нам нужно просто вывести на экран после сортировки и все...

3 - про нетипиз файл препод сказал что мы в нашей проге читаем по 1 байту, а это очень долго, сказал определять куски на которые будет разбиваться наш файл нужно исходя от характеристик венчестера???
Дал код программы из книги где делают по другому, ниче не пойму, он сказал что там что-то разбивает на 15000??? Вот фото ксерокопии что он дал, можете посмотреть и подсказать с поправкой кода?

Вот последняя версия исходника...
Изображения
Тип файла: jpg DSC00673.jpg (150.1 Кб, 118 просмотров)
Тип файла: jpg DSC00674.jpg (93.2 Кб, 125 просмотров)
Вложения
Тип файла: txt MEN5NT (2).txt (15.9 Кб, 118 просмотров)

Последний раз редактировалось Андрос; 18.11.2012 в 22:15.
Андрос вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль. Матрица NxN -> текстовый файл -> Матрица NxN - найти max по диагоналям -> типизированный файл Лунатик13 Помощь студентам 1 20.02.2012 15:54
Нетипизированный файл Bizunov Помощь студентам 4 15.05.2011 15:29
Текстовый и типизированный файл Пушистик Паскаль, Turbo Pascal, PascalABC.NET 0 15.04.2009 20:19
нетипизированный файл amandra Общие вопросы Delphi 6 07.10.2008 07:44
Нетипизированный файл OrdJONY Общие вопросы Delphi 10 03.10.2007 18:39