Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: VB

Программирование VB

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проблема с чтением из текстового файла
 
 автор: Аноним   (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"

Плиз чтоя делаю неправильно?

  Ответить  
 
 автор: ДрЮня   (05.10.2006 в 19:29)   личное сообщение
 
 

если файл действительно текстовый, то лучше его и открывать как текстовый файл (на чтение)

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

  Ответить  
 
 автор: ДрЮня   (06.10.2006 в 11:15)   личное сообщение
 
 

пример чтения тестового файла по строкам

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="!")
Какая функция за это отвечает?
И что у нее будет на выходе?

  Ответить  
 
 автор: ДрЮня   (09.10.2006 в 17:28)   личное сообщение
 
 

не совсем понял вопрос.
Но Вам могут пригодится следующие функции:

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
Чем объяснить такое безобразие?

  Ответить  
 
 автор: ДрЮня   (10.10.2006 в 16:45)   личное сообщение
 
 

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)

Я ожидаю что строки будут разделены а они почему-то вместе т.е. все на одной строке
Что может быть?

  Ответить  
 
 автор: ДрЮня   (20.10.2006 в 15:11)   личное сообщение
 
 

имхо:
я использую следующее предопределенные константы
vbNewLine, vbCrLf

в Вашем случае
tempstr = tempstr & line & vbNewLine

если же использовать CHR, то аргумент надо брать в скобки CHR(13)

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList