|
автор: Аноним (05.10.2006 в 16:57) |
|
| Проблема в следующем:
открываю текстовый файл, с какими то записями
по случайному числу вытаскиваю
запись
(например
Open "afor2.txt" For Random As #1
Get #1,randNumb , str1
MsgBox (str1)
и полчаю вот такое
"Variable uses an Automation type not supported in Visual Basic"
Плиз чтоя делаю неправильно? | |
|
| |
|
|
|
| если файл действительно текстовый, то лучше его и открывать как текстовый файл (на чтение)
fn= FreeFile
Open "afor2.txt" For Input As #fn
... | |
|
| |
|
автор: Аноним (06.10.2006 в 11:06) |
|
| Не понял ничего
Да файл уменя текстовый с большим количеством записей
и мне надо вытаскивать из него случайную строку только строку и не более
в msgBox
Вопрос: Как это сделать?
Дя чего тогда нужны методы Get, Put, Seek ?
А твою конструкцию я пробовал:
randNumber = 150 ' Случайный номер записи
fn= FreeFile
Open "afor2.txt" For Input As #fn
Get #fn randNumber temp
MsgBox(temp)
и получил:
Run time error "54" Bad file mode
|
| |
|
| |
|
|
|
| пример чтения тестового файла по строкам
Public Sub get_Settings
Dim sRow As String, fn As Byte, num as Long
fn = FreeFile
Open "My.cfg" For Input As #fn
num=1
Do While Not EOF(fn)
Line Input #fn, sRow
num=num+1
Loop
Close #fn
end sub
Вам надо сгенерировать случайное число сравнивать его с "num" в цикле | |
|
| |
|
автор: Аноним (09.10.2006 в 17:05) |
|
| Спасибо за помощь
А есть ли механизм определящий равенство строк?
То есть в одной переменной (str1="!" и вдругой то же самое str2="!")
Какая функция за это отвечает?
И что у нее будет на выходе? | |
|
| |
|
|
|
| не совсем понял вопрос.
Но Вам могут пригодится следующие функции:
Function InStr([Start], [String1], [String2], [Compare As VbCompareMethod = vbBinaryCompare])
Member of VBA.Strings
Returns the position of the first occurrence of one string within another
Function UCase(String)
Member of VBA.Strings
Returns the specified string, converted to uppercase
Function StrComp(String1, String2, [Compare As VbCompareMethod = vbBinaryCompare])
Member of VBA.Strings
Returns the result of a string comparison
Function Trim(String)
Member of VBA.Strings
Returns a copy of a string without leading and trailing spaces | |
|
| |
|
автор: Аноним (10.10.2006 в 15:55) |
|
| Я наверное нечетко все описал
Итак:
(--пустая строка-)
Какой то текст
Еще текст
(Снова пустая строка)
Какой то текст
Еще текст
(Снова пустая строка)
-------------------
и т.д. Это формат моего текстового файла
---------------
'Теперь код
Dim tempstr,str1 As String
Dim res As integer
tempstr=""
fn = FreeFile
Open "afor2.txt" For Input As #fn
Do
'MakeRandom()
Line Input #fn, str1
'Эта функция очень странно работает Если строки одинаковы, я ожидаю ноль
и так и есть но только 1 раз(т.е первую пустую строку сравнивает правильно)
'Все остальные встреченные пустые строки она выдает -1
'А у меня алгоритм построен как раз на них
res = StrComp(tempstr, str1)
If res = 0 Then'Пустая строка.Значит за ней 2 полных
count = count + 1
Else
'MsgBox (str1)'показываем первую полную строку
tempstr = str1
Line Input #fn, str1'Достаем вторую строку
temp = temp + str1'Присоединяем к первой
MsgBox (temp)
str1 = ""'На всякий случай
End If
Loop Until EOF(1)
Close
---------------
Самое интересное что в дебагере
видно что str1 пуста, а функция все равно возвращает -1
Чем объяснить такое безобразие? | |
|
| |
|
|
|
| 1. "пустая строка" всё равно заканчивается символами CHR13 & CHR10
("возврат каретки" + "перевод на новую строку")
2. у Вас чтение строк производится в цикле - лучше в цикле использовать один раз команду Line Input #fn
3. анализ на то, что строка пустая лучше делать так
if str1 = "" then
...
4. Close надо явно указывать хендлер (номер) файла: Close #fn
5. всё равно не понял, что Вы хотите извлечь из файла? | |
|
| |
|
автор: Аноним (20.10.2006 в 12:17) |
|
| Спасибо большое за ценные советы(следуя им изменил код все заработало)
Еще вопрос :
вот код;
tempstr = tempstr+line+CHR13+CHR10
MsgBox(temstr)
Я ожидаю что строки будут разделены а они почему-то вместе т.е. все на одной строке
Что может быть? | |
|
| |
|
|
|
| имхо:
я использую следующее предопределенные константы
vbNewLine, vbCrLf
в Вашем случае
tempstr = tempstr & line & vbNewLine
если же использовать CHR, то аргумент надо брать в скобки CHR(13) | |
|
| |