Вам необходимо установить CONT до нуля до INSPECT, каждый раз.
CONT только что обновляется от его начального значения при запуске INSPECT. После того, как вы найдете свой первый, каждая запись будет выглядеть так, как будто в ней есть CITY.
Если вначале кажется странным, что он работает именно так, но если бы это было не так, вы были бы ограничены случаями, когда именно так вы хотите, чтобы он работал.
А, глядя немного ближе, вы устанавливаете CONT в начальное значение, вы просто делаете это в неожиданном месте. Если он должен быть равен нулю, установите его на ноль сразу перед тем, как он будет равен нулю. Намного легче найти, менее легко для кого-то, изменяющего программу в будущем, чтобы сделать беспорядок.
Однако у вас есть еще одна проблема. Скажем, CITY - это PIC X (20). Пользователь вводит SEVILLA, и ваш INSPECT теперь будет искать SEVILLA, а затем 13 пробелов. В идеале вы хотели бы, чтобы SEVILLA сопровождалось одним пространством.
Вы должны быть в состоянии проверить значение, введенное пользователем, с завершающим пробелом, но не более.
Текущий популярный способ сделать это с помощью ссылки-модификации.
Вам необходимо ввести свой пользовательский ввод, узнать, сколько его пробелов содержит, рассчитать, сколько данных осталось, добавить один для завершающего пробела и сохранить это значение в поле (предпочтительно поле BINARY).
Тогда ваш ПРОВЕРЬТЕ может выглядеть следующим образом:
INSPECT BBRADD
TALLYING CONT for CHARACTERS
BEFORE INITIAL CITY (1 : length-of-data-plus-one)
Однако, то у вас есть проблема, если SEVILLA на самом деле в начала поля.
Таким образом, вы делаете небольшое изменение, а не подсчитываете символы, которые появляются перед ним, но подсчитываете его.
INSPECT BBRADD
TALLYING CONT for ALL
CITY (1 : length-of-data-plus-one)
Многие люди вместо этого кодируют цикл PERFORM с эталонной модификацией и выполняют тест таким образом. С окончательной версией INSPECT выше нужно закодировать логику завершения самостоятельно. Для учебных целей было бы хорошо сделать это в обоих направлениях.
При выполнении файла-io всегда используйте и проверяйте СОСТОЯНИЕ ФАЙЛА. Поместите свой READ в абзац и выполните его, вам не нужны два разных кода. Если вы используете FILE STATUS, вам не нужен AT END (или END-READ), так как поле, которое вы используете для получения значения FILE STATUS, будет «10» для конца файла. Просто используйте свои 88 в этом поле со значением «10».
Редактировать на ваш вопрос теперь указывает, где находится существующий 88-уровневый.
С одной стороны, это хорошая идея, потому что конец файла связан с записью, и не может быть допустимого случайного содержимого.
С другой стороны, это не «переносное» решение: если вы используете другие COBOL, вы можете обнаружить, что как только конец файла будет достигнут, он более недействителен для доступа к данным под номером FD
. В стандарте, что происходит в этой ситуации, не определено, поэтому вы получаете различия между компиляторами.
Вы можете сохранить 88 на групповом элементе, имея его портативный, используя READ ... INTO ...
и имея свой формат записи в WORKING-STORAGE
. Это займет немного больше времени, так как данные должны быть перенесены из одного места в другое.
Я предпочитаю 88 в поле FILE STATUS и упрощаю READ, удаляя AT END
и END-READ
. Я уже не могу получить доступ к области записи под FD, поэтому я не могу случайно получить неправильные значения, которые выглядят хорошо.
Я пробую ваш предлагаемый код. Я должен сначала найти, как реализовать код для вычисления длины переменной CITY, поэтому я на ней. – daniegarcia254
Не волнуйся об этом пока. Hardcode: длина, чтобы увидеть, получает ли она то, что вы хотите (она будет), а затем пойдет на поиск длины. Вначале нечего делать, если вы обнаружите, что это не годится для того, что вы хотите, поэтому всегда проверяйте код для того, что вы хотите первым :-) –
Приятно слышать. Если у вас есть проблемы с длиной города, вам не нужно много чего использовать, используйте «FUNCTION REVERSE ...» и «INSPECT ... TALLYING ... FOR LEADING SPACE». Есть менее напряженные способы, но это распространено. Если у вас есть проблемы, задайте другой вопрос. Удачи. –