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

Форум: MS ACCESS

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

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

 
 

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

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

тема: удаление трёх последних символов
 
 автор: Едрёныч   (16.12.2009 в 17:38)   личное сообщение
 
 

подскажите способ получения в соседнем поле числа вместо текста т.е. удалить три последних символа в строке, надо удалить " мм" в поле длина. Иначе и не сложить и не посчитать.

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

наверное, проще использовать функции Val(), CLng(), CInt()

  Ответить  
 
 автор: Едрёныч   (16.12.2009 в 17:51)   личное сообщение
 
 

Тут посмотрел и понял, что необходимо пояснить, что количество символов в строках разное и не везде есть " мм" есть и просто число, может есть способ удаления всех символов после пробела и осуществить енто в построителе выражений?

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

нужно попробовать так:
dim My_Str as string '
dim i as long
My_Str = [Строка из поля]

for i=len(My_St) to 1 step -1
if isNumeric mid(My_St,i,1) = true then
exit for
end if
next i
' может надо будет i =i+1

Соседнее_Поле=left( My_Str,i)

  Ответить  
 
 автор: Едрёныч   (16.12.2009 в 20:11)   личное сообщение
 
 

решение нашлось и весьма простое: правка/найти и заменить. Но если много разных единиц (кг, мм, шт), то будут проблемы

  Ответить  
 
 автор: kot_k_k   (17.12.2009 в 09:32)   личное сообщение
 
 

зачем работать с шаблоном - ест Ascii код цифр - перебери строку - все что мимо кассы - нафиг - на выходе число.
Function Str_Val(ParamArray Ar())
Str_In=Ar(0)
Str_Out=""
For i = 1 To Len(Str_In)
    Select Case Asc(Mid(Str_In, i, 1))
        Case 48 To 57
            Str_Out  = Str_Out  & Mid(Str_In, i, 1)
        Case 46, 44
            If InStr(Str_Out, ".") = 0 Then Str_Out = Str_Out & "."
    End Select
Next
Str_Val=Str_Out
End Function

  Ответить  
 
 автор: АлексейЕ   (17.12.2009 в 09:53)   личное сообщение
 
 

Если первые всегда цифры, а " мм" означает миллиметры, то думаю так подойдет.
? val("123 мм")
 123

Если ошибаюсь, то воспользуйтесь функцией Replace()
? Replace("123 мм", " мм", "")
123

  Ответить  
 
 автор: kot_k_k   (17.12.2009 в 10:54)   личное сообщение
 
 

судя по всему это поле заполняют руками так что ждать нужно всего - точек, зпт, слеши пробелы в кол-ве от 0 до бесконечности и конечно различные варианты написания общепринятых сокращений + просто понравившиеся юзеру символы.

  Ответить  
 
 автор: Едрёныч   (17.12.2009 в 12:53)   личное сообщение
 
 

вот перебока в коде это наверное то что надо. Попробую сделать.

  Ответить  
 
 автор: АлексейЕ   (17.12.2009 в 13:15)   личное сообщение
 
 

?Str_Val("123 мм2")
1232

?Val("123 мм2")
 123 

  Ответить  
 
 автор: Explorer   (17.12.2009 в 13:20)   личное сообщение
 
 

еще бывает "О" вместо -0- и т.п.

ну, в общем про гос.тендеры, гос.закупки и заявки вы все в курсе :)))

  Ответить  
 
 автор: kot_k_k   (17.12.2009 в 13:26)   личное сообщение
 
 

а если с 1С выкрутили через опу то - 1,203,123,258.85 и нужно писЯть логику обработки, а если еще подправили ручками (от чрезмерного усердия) 1,203123,258,85

  Ответить  
 
 автор: Силblч   (17.12.2009 в 13:36)   личное сообщение
 
 

regexp

  Ответить  
 
 автор: kot_k_k   (17.12.2009 в 13:33)   личное сообщение
 
 

как грил Поддеревянский: "Подведем итоги"

- чтоб меньше было таких заморочек - юзерам руками вводить давать по меньше, особенно то что будет вычисляться, уж лучше сделать 2 поля кол-во (только цифры ) и ед.изм. и вот там хай извращаются как хотят.
- ед.изм. тоже нужен контроль, иначе можно складывать кг + м. + м.п. + м2 в результате получаем только яблоки

  Ответить  
 
 автор: Едрёныч   (17.12.2009 в 15:38)   личное сообщение
 
 

Replace дало желаемый результат, а так Котикк прав надо единицу измерения писать в отдельной графе конечно же. просто эти данные я получаю из INVENTORа .Вот как я сделал =CDbl(Replace([Поле2];" мм";" ")), теперь, я полагаю, можно и в сводной табличке результаты посчитать.

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