Странность открытия файлов

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
mark+
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 156
Зарегистрирован: 03.07.2003 (Чт) 0:04
Откуда: Kurgan

Странность открытия файлов

Сообщение mark+ » 12.12.2003 (Пт) 0:39

Допустим существует файл: C:\MyFile\disco80.qst
Содержащий только эту информацию:

Disco80, AUTORADIO!

Открываю файл алгоритмом:

'Объявление переменных
Dim allset As String
Dim aset As String
'Очистка переменных
Let allset = ""
Let aset = ""

'Использую CommandDialog для выбора файла "C:\MyFile\disco80.qst"
OpenDLG.ShowOpen
If OpenDLG.FileName = "" Then Exit Sub 'Супер алгоритм для отсечения всех "Отмена" файлов

Open OpenDLG.FileName For Input As #1'Открываем
MAE.Refresh'Форма рефрешится

'Конкретно алгоритм
Do While Not EOF(1)
Input #1, aset
Let allset = allset & aset & vbCrLf '1310
Loop
'Конкретно алгоритм закончен

'Теперь вы думаете в allset строка "Disco80, AUTORADIO!"?
'У меня почему, то:

Disco80
AUTORADIO!


:? :? :? :? :? :? :?

... SOS ...
Как этот баг преодолеть?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 12.12.2003 (Пт) 9:21

RTFM!!!
  1. Переменные всегда инициализируются в ноль, явная очистка не нужна.
  2. Никто не использует оператор Let уже 10 let!
  3. Это абсолютно неверный способ игнорировать Cancel в CommonDialog! К примеру,
    Код: Выделить всё
    Private Sub Form_DblClick()
      CommonDialog1.ShowOpen
      MsgBox CommonDialog1.FileName
      CommonDialog1.ShowOpen
      MsgBox CommonDialog1.FileName
    End Sub
    Допустим, в первом вызове был выбран файл, а во втором нажали отмену. Тогда во втором случае будет тебе дано имя файла из первого вызова!
  4. Ты сам-то понимаешь, что делает твоя "главная петля"? Перевожу: "Взять строковую переменную из файла, приписать её в конец allset, приписать туда же разрыв строки. Повторять, пока не закончатся все переменные." Именно это ты и имеешь на выходе! Все твои строки, разделённые абзацными переносами!
  5. А чтобы взять всю текстовую строку вместе со всеми запятыми, нужно использовать Line Input #1, allset
  6. А чтобы взять в переменную вообще всё содержимое файла, используется allset=Input$(lof(1),1).
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

mark+
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 156
Зарегистрирован: 03.07.2003 (Чт) 0:04
Откуда: Kurgan

Сообщение mark+ » 19.12.2003 (Пт) 22:53

1, Спасибо, известно
2, Если VB позволяет, значит БУДУ использовать!
3, Спасибо
4, Спасибо
5, Спасибо
6, Спасибо


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 8

    TopList