| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Для новичков > Текстовый файл. Странная ошибка |
| Автор: arcsupport 16.8.2010, 22:54 | ||||
Добрый день. Есть подобный код:
Добавлено через 2 минуты Т.е. выполняется if ****, и, кроме того, не выходит из repeat until. В текстовом файле есть только русские и английские буквы, цифры, пробелы, точки, запятые. Больше ничего нет. Добавлено через 4 минуты и 20 секунд Кроме того:
|
| Автор: Данкинг 16.8.2010, 23:34 |
| Может быть, там не '', а ' ', т.е. пробелы лишние? |
| Автор: arcsupport 17.8.2010, 09:09 |
| При пустой строке этот самый if не должен выполняться. А он выполняется. Лишних пробелов точно нет. |
| Автор: Чoо 17.8.2010, 09:21 | ||
я думаю автор имел ввиду, что если массив s<>'', то переход на then происходит (хотя конструкция if then else всегда работает, только бывает не так как хочет автор) (кароч фигню я написал выше . Ну вобщем даже если в массиве ни чего нет, то происходит переход на then даже по условию s<>'') а действительно при значении '' он бы вышел из цикла
а что бы выходил из цикла, надо дополнить условие (s='') or (eof(f)) вообще думаю там действительно пробел где-то затесался Добавлено @ 09:24 arcsupport, покажите ваш текстовый файл, только зазипуйте его |
| Автор: arcsupport 17.8.2010, 10:05 |
| Сделал StrPas(s) и все заработало. Странно. |
| Автор: Чoо 17.8.2010, 12:14 | ||||
| что-то мне интересно стало, почему так? по идее, если сравнивать следующим образом x<>'', то аргумент справа будет иметь тип shortstring. если x:array [0..n] of char, то после
он будет иметь прежнюю длину n, а каждый элемент массива будет равен #0. Опять же по идее, сравнивать напрямую массив символов и shortstring компилятор не даст. Может он перед сравнением преобразует один из аргументов к соотв. типу и производит дальнейшее сравнение? *** ну вобщем без StrPas должно работать если сделать так:
|