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

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

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

 
 

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

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

тема: Прошу совета
 
 автор: час   (19.04.2011 в 23:11)   личное сообщение
 
 

Так задумано в текстовом файле, что для ориентира в строке расставлены запятые:
P,13160,0,1350,450,0,0,0,RIGHT,,,
P,130,0,350,50,0,0,0,LEFT,,,
мне надо из этой строки добыть слово RIGHT или из второй строки добыть слово LEFT
я знаю, что слово это находится после восьмой запятой.
Какой шустрый вариант поиска можно бы забабахать?
Жду предложений.

  Ответить  
 
 автор: kot_k_k   (19.04.2011 в 23:16)   личное сообщение
 
 

а на кой тебе добывать слово - если ты знаешь его

просто поиск на instr (str_,"left") - и кол-во запятых тебя не должно волновать, читаем файл построчно - самый быстрый способ.

  Ответить  
 
 автор: час   (19.04.2011 в 23:24)   личное сообщение
 
 

Я не знаю какое именно слово в строке, но знаю его позицию.
Надо его быстро выковырять.

  Ответить  
 
 автор: kot_k_k   (19.04.2011 в 23:31)   личное сообщение
 
 

ну если одно из них то проверяй на первое а отрицатльный резльтат даст наличие второго

или тебе нужно найти слово которое находится после 8-й запятой
тогда перебирай в цикле
instr(str_, ",")

блин а Spiit зачем придумали - разбюивай на массив и обращайся к 7-му (с 0 номерация)

  Ответить  
 
 автор: час   (19.04.2011 в 23:37)   личное сообщение
 
 

никада Spiit ом не пользовался, только спиртом......
Надо почитать про него........

  Ответить  
 
 автор: kot_k_k   (19.04.2011 в 23:41)   личное сообщение
 
 

там читать не фиг - задаем строку через запятую задаем разделитель и это присваиваем массиву - вся процедура закончена - массив готов

  Ответить  
 
 автор: час   (19.04.2011 в 23:50)   личное сообщение
 
 

Спасибо - попёрло
retval = Split(TXT, ",", -1, vbTextCompare)

For i = 0 To UBound(retval)

MsgBox retval(i)

Next i

  Ответить  
 
 автор: kot_k_k   (20.04.2011 в 00:06)   личное сообщение
 
 

кому не спится в ночь глухую

  Ответить  
 
 автор: час   (20.04.2011 в 00:18)   личное сообщение
 
 

Нам!

  Ответить  
 
 автор: час   (20.04.2011 в 00:19)   личное сообщение
 
 

Я - днём прикорнул......
А ты чё не спишь?

  Ответить  
 
 автор: ser60   (20.04.2011 в 04:37)   личное сообщение
 
 

не совет, а просьба... Если имеется созданная ВБА строка положительных целых чисел, как ее в рекордсет превратить?

  Ответить  
 
 автор: час   (20.04.2011 в 07:48)   личное сообщение
 
 

Я таких задач не решал никада....
А Для каких это целей понадобилось?

  Ответить  
 
 автор: kot_k_k   (20.04.2011 в 08:08)   личное сообщение
 
 


как ее в рекордсет превратить



что это значит?
из строки загнать каждое число строки в свою запись (превратить строку в столбец)
или как?

- считываем каждое число - создаем новую запись и загоняем ее туда - получаем тот же самый массив - смысл

  Ответить  
 
 автор: час   (20.04.2011 в 08:52)   личное сообщение
 
 

У мну вопрос

retval = Split(TXT, ",", -1, vbTextCompare)
For i = 0 To UBound(retval)
MsgBox retval(i)
Next i

Как эту retval объявить?
Какого типа и ваще?????
чё
Dim  retval as string ?
или как то иначе?

  Ответить  
 
 автор: osmor   (20.04.2011 в 09:52)   личное сообщение
 
 

Split возвращает массив
описывай как массив строк.

dim retval() as string

Я правда уже не помню прокатит такая запись в vba или нет
если нет, то

dim retval as variant

  Ответить  
 
 автор: Мюллер   (20.04.2011 в 09:54)   личное сообщение
 
 

Тип переменной должен соответствовать принимаемому типу. Сплит возвращает массив. Соответственно и у тебя retval должен быть массивом.

  Ответить  
 
 автор: час   (20.04.2011 в 10:21)   личное сообщение
 
 

dim retval() as string - так?
Пркатило.....
СПАСИБО!

  Ответить  
 
 автор: osmor   (20.04.2011 в 09:55)   личное сообщение
 
 

что вы понимаете под "превратить в рекордсет" ?
есть как минимум 2 варианта
вариант 1
создать "виртуальный" (т.е. не имеющий реального набора данных) рекордсет (возможно только в adodb )
и в него добавить ваши данные используя методы Addnew и update
вариант 2
открыть рекордсет по какой нибуть таблице и запихнуть данные в него теми же Addnew и update
но в этом случае данные сохраняться в таблице.

ЗЫ. Опишите задачу шире, может вам рекордсет и не нужен. Что хотите делать?

  Ответить  
 
 автор: ser60   (20.04.2011 в 20:57)   личное сообщение
 
 

для списка со множественным выбором пользователь может кликнуть на строке, а потом отменить и снова кликнуть. Для таких ситуаций нашел алгоритм, в котором повторный выбор нейтрализуется через выражение IN (" & strWhere & ")", где выбор пользователя записывается строчно через запятую. А мне эти аргументы нужны, чтобы к ним прикрутить еще некоторые значения из формы для апдейта некоторых записей и записать в таблу. Вдруг в этом топике обнаруживаю

retval = Split(TXT, ",", -1, vbTextCompare) 
For i = 0 To UBound(retval) 
MsgBox retval(i) 
Next i

и под него пишу что-то такое (хотя тут же соображаю, что массивов не знаю

RetVal = Split(strWhere, ",", -1, vbTextCompare)
    For i = 0 To UBound(RetVal)
            rst.AddNew
            rst![Функционал] = RetVal(i)
            intEdIzm = Column(2, varItem)’что здесь должно быть пока еще не представляю, но из списка вижу что нужно вытягивать и Функционал и ЕдИзм, т.е. двумерный массив
            rst![ЕдИзм] = intEdIzm
            rst![МедОрг] = intMedOrgCode
            rst![Регион] = intRegion
            lngPlanVolum = DLookup("ПланОбъем", "сМедОргОбъемДеят", "КодМедОрг=" & intMedOrgCode & " And [ЕдИзм] = " & intEdIzm)
            rst![ПланОбъемДеят] = lngPlanVolum
    'MsgBox RetVal(i)
    Next i
        rst.Update

подскажите, как тянуть данные в массив и как вытаскивать их в рекордсет. Можа примеры кой-нить есть?

  Ответить  
 
 автор: ser60   (25.04.2011 в 09:46)   личное сообщение
 
 

to osmor
есть строка типа "75","77","79","80","87","88","89","90","91","92" как ее превратить в
75
77
79
80
... и т.д. Полагаю, что либо рекордсет либо массив. А как?

  Ответить  
 
 автор: час   (25.04.2011 в 13:23)   личное сообщение
 
 

Dim RETVAL() As String
Dim TXT as string
Dim i As integer
TXT = "75","77","79","80","87","88","89","90","91","92"
RETVAL = Split(TXT, ",", -1, vbTextCompare)

For i =0 To UBound (retval)

msgbox retval (i)

Next i

  Ответить  
 
 автор: ser60   (25.04.2011 в 20:12)   личное сообщение
 
 

час, пробовал так:

Private Function RETVAL(TXT As String) As String
Dim TXT As String
Dim i As Integer
TXT = "75,77,79,80,87,88,89,90,91,92"
RETVAL = Split(TXT, ",", -1, vbTextCompare)
     For i = 0 To UBound(RETVAL)
     MsgBox RETVAL(i)
     Next i
End Function


и так пробовал:

Private Sub paraclin()
Dim RETVAL() As String
Dim TXT As String
Dim i As Integer
TXT = "75,77,79,80,87,88,89,90,91,92"
RETVAL = Split(TXT, ",", -1, vbTextCompare)
     For i = 0 To UBound(RETVAL)
     MsgBox RETVAL(i)
     Next i
End Sub

акс пиешт, что функция или суб не определена. ЧТо у меня не так?

  Ответить  
 
 автор: час   (25.04.2011 в 20:26)   личное сообщение
104 Кб.
 
 


Вот вам подарочек

  Ответить  
 
 автор: ser60   (25.04.2011 в 20:43)   личное сообщение
 
 

чего не вижу. пытаясь скачать

  Ответить  
 
 автор: час   (25.04.2011 в 21:21)   личное сообщение
 
 

  Ответить  
 
 автор: ser60   (25.04.2011 в 21:22)   личное сообщение
 
 

подарочек не скачивается (показывает пустую старницу

  Ответить  
 
 автор: час   (25.04.2011 в 21:38)   личное сообщение
8 Кб.
 
 

А так?

  Ответить  
 
 автор: ser60   (26.04.2011 в 03:09)   личное сообщение
 
 

Да, ок, спс!!

  Ответить  
 
 автор: ser60   (26.04.2011 в 04:20)   личное сообщение
 
 

час! не можете подсказать, почему в нижеследующем коде акc останавливается на строке "Next i" и пишет, что "Compile error: Next without For"


RETVAL = Split(gstrWhereParaclinic, ",", -1, vbTextCompare)
    For i = 0 To UBound(RETVAL)
    'Debug.Print RETVAL(i)

    With rst
    .AddNew
    ![Порядок] = i + 1
    ![МедОрг] = intMedOrgCode
    ![Регион] = intRegion
    ![Функционал] = RETVAL(i)
    ![ЕдИзм] = DLookup("ЕдИзм", "сШН", "КодФункционал=" & RETVAL(i))
    lngPlanVolum = DLookup("ПланОбъем", "сМедОргОбъемДеят", "КодМедОрг=" & intMedOrgCode & " And [ЕдИзм] = " & intEdIzm)
    ![ПланОбъемДеят] = lngPlanVolum
    .Update
     Next i

  Ответить  
 
 автор: shanemac51   (26.04.2011 в 07:58)   личное сообщение
 
 


 .Update
    End With
     Next i

  Ответить  
 
 автор: ser60   (26.04.2011 в 10:07)   личное сообщение
 
 

shanemac51, спс, получилось

  Ответить  
 
 автор: shanemac51   (25.04.2011 в 21:10)   личное сообщение
 
 



нормально отработало
проверь референсы, если у вас дает ошибку

Private Sub paraclin()
Dim RETVAL() As String
Dim TXT As String
Dim i As Integer
TXT = "75,77,79,80,87,88,89,90,91,92"
RETVAL = Split(TXT, ",", -1, vbTextCompare)
     For i = 0 To UBound(RETVAL)
     MsgBox RETVAL(i)
     Next i
End Sub 

  Ответить  
 
 автор: ser60   (25.04.2011 в 21:37)   личное сообщение
 
 

Да, вроде нормально! спс

  Ответить  
 
 автор: Силblч   (20.04.2011 в 10:02)   личное сообщение
 
 

приаттачить с разделителем запятая и юзать как таблицу фильтры-шмильтры всякие

  Ответить  
 
 автор: Дядя Федор   (20.04.2011 в 12:44)   личное сообщение
 
 

Часу

Как эту retval объявить?


'Короткие объявления

'@ Currency
'# Double
'% Integer
'& Long
'! Single
'$ String


dim i&, strsql%, j%, cena@

function imho&

и т.д.

можно также писать
i=1&
ибо в выражении
..=1 , 1 - тип вариант

  Ответить  
 
 автор: час   (20.04.2011 в 16:38)   личное сообщение
 
 

Спасибо Дядя Фёдор

  Ответить  
 
 автор: Анатолий (Киев)   (26.04.2011 в 14:24)   личное сообщение
 
 


ибо в выражении
..=1 , 1 - тип вариант


Ошибаетесь.

?TypeName(1)
Integer
?TypeName(1.0)
Double

  Ответить  
 
 автор: час   (26.04.2011 в 18:19)   личное сообщение
 
 

Я к коротким объявленьям - не привык
Да и как их говорить?
Мне так кажется - сломаешь весь язык
Коль словами нужно повторить.....

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