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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.02.2019, 14:39   #1
LolerFox
Новичок
Джуниор
 
Регистрация: 27.02.2019
Сообщений: 2
По умолчанию Поиск

Столкнулся с проблемой...
Пытаюсь сравнить переменную с данными в текстовом документе(что-то типо поиска... Вводится Фамилия и она сравниваетс с именами в файле, если такое есть то оно выводит его), но почему то либо переменная либо вовсе не сравнивается, либо програма выдает ответ только если фамилия будет в самом конце файла.
Вот кусок кода.
Код:
assign(f1,'c:/text.txt');
...
begin
 reset(f1);
  while not EOF(f1) do
  readln(f1,tsurname);
 
  if tsurname=surname then
Begin
 p:=1:
end;
end;

      clrscr;
      writeln('Имя=', Name);
      writeln('Фамилия=', Surname,);
      writeln('Возраст=', age);
    if p=1 then
    begin
    writeln('Итог:В списке');
    end
    else
    begin
    writeln('Итог:Не в списке');
    end;
    readln;
end.

//в файле пару Фамилий,  каждое с новой строки//

Последний раз редактировалось LolerFox; 27.02.2019 в 15:49.
LolerFox вне форума Ответить с цитированием
Старый 27.02.2019, 14:46   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

И компилируется? Там же парность begin end порушена
while not EOF(f1) do begin
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 27.02.2019, 14:53   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Первое. у Вас абсолютно ущербная логика.
зачем Вам p := 1 ??
нужен примерно такой код
Код:
...
var countFound : integer;
begin

  assign(f1,'c:/text.txt');
  reset(f1);

  // заполнить surname для поиска
  ReadLn(surname);
  

  countFound := 0;
  while not EOF(f1) do begin
     readln(f1,tsurname); 
     if tsurname=surname then begin
        writeLn('Найдено ',surname);
        inc(countFound)
     end;      
  end;
  close(f1);

  if countFound=0 then
      writeln('Итог:Не в списке')
  else
      writeln('Итог:В списке, найдено ', countFound, ' раз.'  );

  readln;
end.


Второе
Цитата:
Сообщение от LolerFox Посмотреть сообщение
Вводится Фамилия и она сравниваетс с именами в файле, если такое есть то оно выводит его
Цитата:
Сообщение от LolerFox Посмотреть сообщение
if tsurname=surname then
Вы понимаете, что сравниваете строго на полное совпадение?
Результатом сравнения будет ЛОЖЬ, если:
1) в одной из строк есть пробелы/табуляция - как в начале строки, так и в конце.
2) отличается регистр символов
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.02.2019, 16:07   #4
LolerFox
Новичок
Джуниор
 
Регистрация: 27.02.2019
Сообщений: 2
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Первое. у Вас абсолютно ущербная логика.
зачем Вам р :=1
Про р:=1 я знаю, я просто хотел проверить сравнивает ли оно вообще.(там после этого р:=1 должен был быть "write" но я его видимо случайно стер).

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Вы понимаете, что сравниваете строго на полное совпадение?
Результатом сравнения будет ЛОЖЬ, если:
1) в одной из строк есть пробелы/табуляция - как в начале строки, так и в конце.
2) отличается регистр символов
Да, я это понимаю... Но почему то в моем случае ПРАВДА была только в том случае если Фамилия находилась в конце списка.

Ладно спасибо за помощь!
LolerFox вне форума Ответить с цитированием
Старый 27.02.2019, 16:12   #5
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,304
По умолчанию

И свою копейку брошу.
Код:
while not EOF(f1) do
  readln(f1,tsurname);
Это правильный код. Вот только он приведёт к тому, что файл будет прочитан до конца и при завершении цикла в переменной tsurname будет только последняя строка.
Управление оператору, который следует за циклом, будет передано только после обнаружения [not EOF(f1)] конца файла.
Это к
Цитата:
либо программа выдает ответ только если фамилия будет в самом конце файла.
и напомнить, что составные операторы надо включать в операторные скобки
Код:
begin  ...  end
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 27.02.2019, 16:29   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от LolerFox Посмотреть сообщение
Но почему то в моем случае ПРАВДА была только в том случае если Фамилия находилась в конце списка.
на это ответ в пост #5
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите пожалуйста решить две задачки - поиск минимального значения в векторе и поиск/перестановка положительных элементов в матрице Ruslan Rutkovsky Паскаль, Turbo Pascal, PascalABC.NET 6 12.05.2017 23:43
Гугл поиск отсылает на майл.ру поиск Ципихович Эндрю Свободное общение 5 22.11.2016 11:01
Помощь в доработке программы на языке паскаль (бинарный поиск, поиск перебором) DimzNOVIchok45 Помощь студентам 0 13.10.2014 20:11
Реализовать два метода поиска строк в массиве: поиск перебором, бинарный поиск на языке Pascal DimzNOVIchok45 Помощь студентам 7 19.09.2014 21:40
Обработка одномерного массива - поиск среднего, поиск минимального, сортировка (Паскаль) nadez Паскаль, Turbo Pascal, PascalABC.NET 3 18.03.2014 08:45