Страницы: 1 2 След.
RSS
Выделение из текста цифр и ариф. действие с ними
 
Здравствуйте!
Прошу помощи ибо ни времени, ни сил на освоение всех бездонных возможностей exel нет.
Есть таблица (экспортированная база данных), в столбце (строк от 2-2296) G текст, в тексте встречаются вот такое [attach]645[/attach] - дескрипторы вложенных файлов их id цифры разной длины, может так, а может и так [attach]1346,1347,1348,1349,1350,1351,1352,1353,1354[/attach] Задача найти и прибавить ко всем цифрам определенную цифру. то есть совершить арифметическое действие - сложение, ничего не меняя больше. Реальная ли это задача?
Спасибо, если что посоветуете..
Изменено: Doc77 - 24.07.2018 21:20:53
 
Реально. Приложите файл-пример, что есть, как должно стать.
«Бритва Оккама» или «Принцип Калашникова»?
 
Там фрагмент 5 строк. Текст в кодировке UTF-8, ексель не понимает его, но это не важно.
 
Цитата
Doc77 написал: Задача найти и прибавить ко всем цифрам определенную цифру. то есть совершить арифметическое действие - сложение, ничего не меняя больше. Реальная ли это задача?
нет, задача не реальна, к цифрам арифметически цифры не прибавляются. Арифметика работает с числами.
Она становится более не реальной после  этого
Цитата
Doc77 написал: Текст в кодировке UTF-8, ексель не понимает его, но это не важно
Ну пошутили и ладно ,что конкретно должно получится было [attach]645[/attach], что к чему прибавляем и что получаем?
По вопросам из тем форума, личку не читаю.
 
ко всем числам столбца, к каждой отдельно, обрамленным [attach]3,5,6[/attach] прибавляем, например, 10 и получим [attach]13,15,16[/attach], если  [attach]645[/attach] то получим  [attach]655[/attach]  
Изменено: Doc77 - 24.07.2018 22:40:41
 
Цитата
Doc77 написал:
если  [attach]645[/attach] то получим  [attach]6450[/attach]  
опять не реально, нельзя прибалением 10 добится такого.

UDF или процедура справится без особого труда, макрушники сделают, только пример конечно нужен немного более читаемый.  
По вопросам из тем форума, личку не читаю.
 
Ну почему сразу "нереальная". Пользовательской функцией вполне реально.
Я не волшебник, я только учусь.
 
Я ошибся, я умножил, нужно всего лишь прибавить  [attach]645[/attach] то получим  [attach]655[/attach]  прибавить к каждому числу одну и то же число.
 
На уровне макроса можно, но это, вероятно, уже в раздел "работа".
Я не волшебник, я только учусь.
 
Цитата
Wiss написал:
Пользовательской функцией вполне реально
Возможно, но текст препятствие, там тоже есть числа они тоже изменятся, а мне нужно только те, что обрамлены [attach]-----[/attach]
 
Я готов оплатить, ребята только сделайте.  
 
Цитата
Wiss написал:
Ну почему сразу "нереальная".
вы не внимательно читали мои комменты
Doc77,  примеееер, реальных данных с тегированными и не тегированными числами.  
По вопросам из тем форума, личку не читаю.
 
Цитата
Doc77 написал:
цифры разной длины
цифры не могут быть разной длины, цифра одна. Числа могут. Разделитель чисел - какой знак? В формате UTF-16 сможете достать/выгрузить/конвертнуть первичные данные? Проще будет работать.
Изменено: bedvit - 24.07.2018 22:31:33
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
БМВ написал:
вы не внимательно читали мои комменты
Виноват. Молод. Горяч.
Я не волшебник, я только учусь.
 
Цитата
bedvit написал:
цифры не могут быть разной длины
с числами та же фигня, у них величина :-)
По вопросам из тем форума, личку не читаю.
 
Да, конечно, числа. У вас тут с числами "на вы". Разделители запятые если несколько чисел и понятно ничего, если одна.  Сейчас посмотрю по кодировке. Выгрузка из mysql базы автоматическая. Если можно то сделаю.  
 
Цитата
Doc77 написал:
с числами та же фигня, у них величина :-)
согласен. Имелось ввиду длина десятичной записи измеряемая в количестве символов (цифр).
«Бритва Оккама» или «Принцип Калашникова»?
 
UTF16 экспортирует не в табличной форме, вся строка в одной ячейке.
 
Да в принципе не проблема. Цифры и [attach] всё-равно читаются. Заморочился. Делаю.
Я не волшебник, я только учусь.
 
Регулярщиков прошу помидорами не закидывать :-)
Код
Function Increm(ByVal source As String, Delta As Long)
Dim i As Integer, j As Integer
Dim a() As String
Dim b() As String
Dim c() As String
a = Split(source, "[attach]")
If UBound(a) > 0 Then
    For i = 1 To UBound(a)
        b = Split(a(i), "[/attach]")
        If UBound(b) > 0 Then
            c = Split(b(0), ",")
            For j = 0 To UBound(c)
                c(j) = CLng(c(j)) + Delta
            Next
            b(0) = Join(c, ",")
         End If
         a(i) = Join(b, "[/attach]")
    Next
End If
Increm = Join(a, "[attach]")
End Function
Изменено: БМВ - 25.07.2018 09:38:09
По вопросам из тем форума, личку не читаю.
 
БМВ, так и знал, что кто-то сделает лучше и быстрее, используя незнакомые мне техники. Как же всё просто, если работать с массивами. Спасибо за науку.
Я не волшебник, я только учусь.
 
Код
Function qwq(s$, d$)
    Dim ss$, i&, spl
    ss = Mid(s, InStr(s, "[attach]") + 8, InStr(s, "[/attach]") - InStr(s, "[attach]") - 8)
    spl = Split(ss, ",")
    For i = LBound(spl) To UBound(spl)
        spl(i) = CLng(spl(i)) + d
    Next
    qwq = Replace(s, ss, Join(spl, ","))
End Function
Изменено: RAN - 25.07.2018 08:21:58
 
RAN, Андрей, а если несколько групп? Я собственно от instr отказался именно по этому.
но вот нашел ошибку и у себя и у Вас. Поменяйте местами теги открытия и закрытия или удалите один из них. Хотя наверно реальные данные будут без таких изысков.
А вот это не понял и ошибка
For i = LBound(spl) To LBound(spl)

For i = 0 To UBound(spl)
Изменено: БМВ - 25.07.2018 08:03:36
По вопросам из тем форума, личку не читаю.
 
БМВ! Вы пробовали этот макрос, он работает, выполняет задание?  
 
Забыл буковку сменить...
Цитата
БМВ написал:
Поменяйте местами теги открытия и закрытия или удалите один из них.
Это будет совершенно иная задача
 
Цитата
Doc77 написал:
Вы пробовали
Да я его писал :-).  Оба варианта это функция, их можно использовать на листе. Чтоб изменить существующие значения, нужно писать небольшое обрамление или в соседнем столбце получить значения и копи-пэст поверх.
RAN,  а первый  то зачем вычислять. Он же независимо от бэйз будет 0?
Изменено: БМВ - 25.07.2018 09:38:32
По вопросам из тем форума, личку не читаю.
 
Цитата
Doc77 написал:
Там фрагмент 5 строк. Текст в кодировке UTF-8, ексель не понимает его, но это не важно.
Здорово. Но в тексте из примера нет чисел. Там про лептоспироз у щенков алабая...

Если ориентироваться на строку вида "[attach]1346,1347,1348,1349,1350,1351,1352,1353,1354[/attach]" или любой другой текст вперемешку с целыми числами, не привязываясь к тегу attach, то вот так:
Код
Function IncrNumbers(ByVal txt As String, iDelta As Long) As String
    Set myRegExp = CreateObject("VBScript.RegExp")
    With myRegExp
       .Pattern = "\d+"
       .Global = True
       .MultiLine = True
    End With
    
    Set mc = myRegExp.Execute(txt)
    For Each n In mc
        txt = Mid(txt, 1, n.FirstIndex) & (CLng(n.Value) + iDelta) & Mid(txt, n.FirstIndex + n.Length + 1, Len(txt))
    Next n
    IncrNumbers = txt
End Function
Изменено: Irregular Expression - 25.07.2018 11:30:03
 
не нашел файл-примера (как надо): рабочий вариант функции vvv или иллюстративная функция  bbb
 
Код
Function bbb$(t$,delta)
 With CreateObject("VBScript.RegExp"): .Pattern = "\d+": .Global = True
  bbb = .Replace(t, "$&+" & delta)
 End With
End Function



Function vvv$(t$)
With CreateObject("scriptcontrol"): .Language = "JScript"
vvv = .eval("'" & t & "'.replace(/\d+/g,function(t1) { return Number(t1)+10;})")
    End With
End Function 



           
Изменено: кузя1972 - 09.08.2018 21:25:54
 
Цитата
Irregular Expression написал:
Но в тексте из примера нет чисел. Там про лептоспироз у щенков алабая...
Все там есть, смотрите более внимательно всю строку.
По вопросам из тем форума, личку не читаю.
 
 функциия vvv в столбце C

 
Код
Function vvv$(t$)
    With CreateObject("scriptcontrol"): .Language = "JScript"
         vvv = .eval("'" & t & "'.replace(/\d+/g,function(t1) { return Number(t1)+10;})")
    End With
End Function
Изменено: кузя1972 - 25.07.2018 15:42:21
Страницы: 1 2 След.
Наверх