Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
3 / 3 / 0
Регистрация: 01.11.2012
Сообщений: 803

Не работают условия поиска в файле

12.12.2016, 20:36. Показов 1257. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть код

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
   AssignFile(F, 'text.txt');
   Reset(F);
      while not EOF(F) do
      begin
   ReadLn(F, s);
      if pos(x, s) <> 0 then
      ShowMessage('найдено')
   else
begin
      ShowMessage('ненайдено');
end
      end;
   CloseFile(F);
Не работает, в чем я допустил ошибку ? постоянно выводит сообщение "ненайдено", постоянный цикл. возможно что то в самом коде неправильно :-(
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.12.2016, 20:36
Ответы с готовыми решениями:

Странно работают вложенные условия в bat-файле
Доброго времени суток! Вот решил обновить/подтянуть свои знание в области командной строки Windows. Прошел мат. часть и начал...

Выполнение условия в bat файле по наличию текста в определённом файле
Задача: найти опеределённую строчку текста в файле и если она совпадает с искомой, то выполнить goto metka в bat файле, иначе goto metka2 ...

Условия не работают
почему условия if (((x-x1)||(x1-x))&lt;10) или if (((x-x1)&lt;10)||((x1-x)&lt;10)) неработают ? Как быть?

15
botsik
 Аватар для cfbogd
262 / 262 / 140
Регистрация: 05.06.2016
Сообщений: 1,247
Записей в блоге: 1
12.12.2016, 20:43
Bookkc1, поставить break; вместе с ShowMessage('найдено');
0
3 / 3 / 0
Регистрация: 01.11.2012
Сообщений: 803
12.12.2016, 20:52  [ТС]
туперь ругается на else

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
   Reset(F);
      while not EOF(F) do
      begin
   ReadLn(F, s);
      if pos(x, s) <> 0 then
      Break;
      ShowMessage('найдено');
      else
      begin
      ShowMessage('ненайдено');
      end;
      end;
 
   CloseFile(F);
0
botsik
 Аватар для cfbogd
262 / 262 / 140
Регистрация: 05.06.2016
Сообщений: 1,247
Записей в блоге: 1
12.12.2016, 20:53
Bookkc1,
Delphi
1
2
3
4
5
6
if pos(x, s) <> 0 then
BEGIN
ShowMessage('найдено');
Break;
END
else
0
3 / 3 / 0
Регистрация: 01.11.2012
Сообщений: 803
12.12.2016, 20:57  [ТС]
сделал - всё так же как в первом варианте, сообщение "не найдено " в бесконечном цыкле, хотя в файле есть то что я ищу...
0
botsik
 Аватар для cfbogd
262 / 262 / 140
Регистрация: 05.06.2016
Сообщений: 1,247
Записей в блоге: 1
12.12.2016, 21:05
Bookkc1, PascalABC.NET:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var s,x:string;
f:boolean=false;
begin
x:='0';
assign(input,'input.txt');
Reset(input);
assign(output,'output.txt');
Rewrite(output);
while not EOF(input) do
begin
ReadLn(s);
if pos(x, s)>0 then
begin
f:=true;
Break;
end
else
f:=false;
end;
if f then write('yes') else write('no');
end.
0
3 / 3 / 0
Регистрация: 01.11.2012
Сообщений: 803
12.12.2016, 21:17  [ТС]
Спасибо конечно за код, я не сильно разбираюсь в этом. меня интересует поправки в моем коде...
0
botsik
 Аватар для cfbogd
262 / 262 / 140
Регистрация: 05.06.2016
Сообщений: 1,247
Записей в блоге: 1
12.12.2016, 21:22
Bookkc1, а чего тут разбираться? булевая переменная и условие за циклом.
0
3 / 3 / 0
Регистрация: 01.11.2012
Сообщений: 803
12.12.2016, 21:27  [ТС]
меня смущают инпут и аутпут. у меня один файл. зачем мне ещё несколько

Добавлено через 55 секунд
сразу же ругается на строчку f:boolean=false;
0
botsik
 Аватар для cfbogd
262 / 262 / 140
Регистрация: 05.06.2016
Сообщений: 1,247
Записей в блоге: 1
12.12.2016, 21:40
Цитата Сообщение от Bookkc1 Посмотреть сообщение
меня смущают инпут и аутпут
это я для себя. Вы что не умеете редактировать чужой код что ли?
Цитата Сообщение от Bookkc1 Посмотреть сообщение
f:boolean=false;
если уж не в глобальном var, тогда инициализируйте переменную прямо в процедуре
0
3 / 3 / 0
Регистрация: 01.11.2012
Сообщений: 803
12.12.2016, 21:43  [ТС]
Да я 100 лет не работал в делфи и да, не особо умею работать с чужим кодом. мне проще, если бы показали на моём... и переменную инициализирую прямо в процедуре
0
пофигист широкого профиля
4770 / 3206 / 862
Регистрация: 15.07.2013
Сообщений: 18,613
12.12.2016, 21:58
Цитата Сообщение от Bookkc1 Посмотреть сообщение
хотя в файле есть то что я ищу
Регистр символов совпадает?
0
3 / 3 / 0
Регистрация: 01.11.2012
Сообщений: 803
12.12.2016, 23:00  [ТС]
да. совпадает. там цифры
0
 Аватар для Mawrat
13116 / 5897 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
13.12.2016, 08:32
Цитата Сообщение от Bookkc1 Посмотреть сообщение
да. совпадает. там цифры
Надо проверить, какая кодировка текста в файле и какая кодировка предполагается в программе при обработке строковых данных. Если версия Delphi 2007 и ниже (ANSI версии), то тип String совпадает с типом AnsiString - строка однобайтных символов. Если версия выше, чем Delphi 2007 (UNICODE версии), то тип String совпадает с типом UnicodeString - строка двухбайтных символов.
Например, будет несоответствие, если используется ANSI версия Delphi, а текст в файле записан в UNICODE кодировке. В этом случае нужно будет предпринять дополнительные меры в коде.
0
3 / 3 / 0
Регистрация: 01.11.2012
Сообщений: 803
13.12.2016, 11:35  [ТС]
я понял в чем причина но не знаю как её исправить!

В общем, если текста нет в файле, выскакивает сообщение НЕТУ ровно столько раз, сколько строк текста в файле (если 10 то выскочит 10 раз), а если текст есть то выскакивает 9 раз (1 раз что текст есть и 9 раз что нету). Мне же нужно что бы выскакивало 1 раз, либо есть либо нету. всё. Вот код. Прошу помощи Вашей

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
procedure TForm1.Button1Click(Sender: TObject);
var
F: TextFile;
s: string;
begin
AssignFile(F, 'input.txt');
Reset(F);
while not EOF(F) do
begin
ReadLn(F, s);
if s = Edit1.Text then
begin
ShowMessage('есть текст')
end
else
begin
ShowMessage('HETY');
end;
 
end;
 
CloseFile(F);
end;
Добавлено через 26 минут
Сделал две отдельные процедуры (для удобства) Прописал так

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
procedure TForm1.Button1Click(Sender: TObject);
var
F: TextFile;
s: string;
begin
AssignFile(F, 'input.txt');
Reset(F);
while not EOF(F) do
begin
ReadLn(F, s);
if s = Edit1.Text then
begin
work();
 
end
else
begin
nowork();
break;
end;
 
end;
 
CloseFile(F);
end;
в любом случаи выводит что не найдено и завершает цикл.

Добавлено через 1 час 8 минут
В общем, мой код ищет построчно, нужно что бы если нашел - одно сообщение, не нашел - второе
0
 Аватар для Mawrat
13116 / 5897 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
13.12.2016, 11:44
Лучший ответ Сообщение было отмечено Bookkc1 как решение

Решение

Способ 1:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
procedure TForm1.Button1Click(Sender: TObject);
var
  F : TextFile;
  S, X : String;
  B : Boolean;
begin
  AssignFile(F, 'input.txt');
  Reset(F);
  try
    X := Edit1.Text;
    B := False;
    while not EOF(F) do
    begin
      ReadLn(F, S);
      B := Pos(X, S) > 0;
      if B then //Если искомая строка найдена, то прерываем цикл поиска.
        Break;
    end;
  finally
    CloseFile(F);
  end;
 
  if B then
    ShowMessage('Найдено')
  else
    ShowMessage('Не найдено');
end;
Способ 2:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
procedure TForm1.Button1Click(Sender: TObject);
var
  F : File;
  S : AnsiString;
  Size : Integer;
begin
  AssignFile(F, 'input.txt');
  Reset(F, 1);
  try
    Size := FileSize(F);
    SetLength(S, Size);
    BlockRead(F, S[1], Size);
  finally
    CloseFile(F);
  end;
 
  if Pos(Edit1.Text, S) > 0 then
    ShowMessage('Найдено')
  else
    ShowMessage('Не найдено');
end;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.12.2016, 11:44
Помогаю со студенческими работами здесь

Не работают условия
Здравствуйте!Почему то не работают условия И в javascript Если задаю их то ничего не выдает вообще.Хотя переменные принимают значение то...

Не работают условия
Пишу игру на дельфи. Сейчас делаю инвентарь, и вот делают условия - (на клике) если вещь1 = шлем тада напялить ее на &quot;слот...

Поиска в записанном ранее файле по фамилии или по группе с выбором параметра поиска
Нужно написать код для поиска в записанном ранее файле по фамилии или по группе с выбором параметра поиска. Помогите пожайлуйста, потому...

Почему не работают условия?
Господа, вопрос простой, но я не вижу на него ответа У меня часто не работает условия. задаю, например if () { } else { } ...

Не работают условия Combobox1
Ничего сложного, но уже пол часа не пойму что к чему... procedure TForm1.Button1Click(Sender: TObject); begin if...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru