Как выполнить итерации через строку и проверить значение байта каждого символа?

У этой записи есть ответ, который вы ищете:

http://weblogs.asp.net/sfurman/archive/2003/03/07/3537.aspx

В основном это то, что он говорит:

Возвращаемое значение

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

Поведение этого метода следует за стандартом IEEE 754, раздел 4. Этот вид округления иногда называется округлением до ближайшего или округления банкира , Если цифры равны нулю, этот вид округления иногда называют округлением к нулю.

5
задан MarredCheese 30 May 2019 в 00:49
поделиться

7 ответов

Я полагаю, что Ваша проблема состоит в том, которые в индексах строк VBA запускаются в 1 а не в 0. Попробуйте следующее:

For iter = 1 To Len(cell_val) 
    If Asc(Mid(cell_val, iter, 1)) > 127 Then
        addlog "Export contains ascii character > 127"
    End If
Next
12
ответ дан 18 December 2019 в 09:55
поделиться

С VBA VB6 можно просто объявить массив байтов и присвоить строковое значение ему, и это будет преобразовано для Вас. Затем можно просто выполнить итерации через него как эквидистантная антенная решетка.

например.

Dim b() as byte
Dim iter As Long
b = CStr(Nz(fld.value, ""))

For iter = 0 To UBound(b)
    if b(iter) > 127 then
        addlog "Export contains ascii character > 127"
    end if
next
3
ответ дан 18 December 2019 в 09:55
поделиться

Вашим примером должен быть modfied, таким образом, он не имеет внешних зависимостей, он теперь зависит от Nz и addLog.

Так или иначе проблема здесь, кажется, что Вы - цикличное выполнение от 0 до len ()-1. В VBA это было бы 1 к n.

 Dim cell_val As String
 cell_val = "øabcdæøå~!#%&/()"
 Dim iter As Long
 For iter = 1 To Len(cell_val)
    If Asc(Mid(cell_val, iter, 1)) > 127 Then
       'addlog "Export contains ascii character > 127"
       Debug.Print iter, "Export contains ascii character > 127"
    End If
 Next iter
2
ответ дан 18 December 2019 в 09:55
поделиться

Вы отлаживали его?;) Вы уверены, что cell_val не пуст? Также Вам не нужен 'Шаг 1' в Для цикла, так как это - значение по умолчанию. Также, что Вы ожидаете выполнять со своим кодом? Это регистрируется, если какие-либо значения ASCII выше 127? Но вот именно - нет никакого ветвления в зависимости от результата?

0
ответ дан 18 December 2019 в 09:55
поделиться

Попробуйте AscW ()

0
ответ дан 18 December 2019 в 09:55
поделиться

Вы отлаживали его?;) Вы уверены, что cell_val не пуст? Также Вам не нужен 'Шаг 1' в Для цикла, так как это - значение по умолчанию. Также, что Вы ожидаете выполнять со своим кодом? Это регистрируется, если какие-либо значения ASCII выше 127? Но вот именно - нет никакого ветвления в зависимости от результата?

Я не отлаживал его, я понятия не имею, как использовать vba или любой из инструментов, которые соглашаются с ним. Да я уверен, что cell_val не пуст. Код был представительным, я гарантировал работы условия ответвления прежде, чем записать само ответвление.

Я полагаю, что Ваша проблема состоит в том, которые в индексах строк VBA запускаются в 1 а не в 0.

А-ч, точный вид вещи, которая соглашается с vba, который я был обязан пропустить, благодарит Вас.

0
ответ дан 18 December 2019 в 09:55
поделиться

Строки VB/VBA базируются от одной, а не нуля, таким образом, необходимо использовать:

For iter = 1 To Len(cell_val)

Я также кончил step 1 так как это - значение по умолчанию.

0
ответ дан 18 December 2019 в 09:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: