Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 29.11.2019
Сообщений: 30
Excel

Проверка символа по его расположению и символов слева и справа от него

10.09.2020, 16:02. Показов 1718. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Недавно с этого форума взял алгоритм перевода цифр в текст на русском языке. Теперь переделываю на другие языки. На португальском столкнулся с одной трудностью:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
Public Function ПрописьPT(x As Double) As String
If x > 1E+15 Then
ПрописьPT = "O argumento " & ChrW(233) & " mais do que 1.000.000.000.000.000!"
ElseIf x < 0 Then
ПрописьPT = "O argumento " & ChrW(233) & " negativo!"
Else
x = FormatNumber(x, 0, , , vbTrue)
Dim y(1 To 6) As Integer, i1 As Byte
For i1 = 1 To 6
x = Fix(x) / 1000
y(i1) = (x - Fix(x)) * 1000
Next
Dim Text(1 To 6) As String, i2 As Byte, y1 As Byte, y2 As Byte, _
y3 As Byte, Text0 As String, Text1 As String, Text2 As String, Text3 As String, _
Text4 As String
For i2 = 1 To 6
y1 = y(i2) Mod 10
y2 = (y(i2) - y1) / 10 Mod 10
y3 = y(i2) \ 100
If y2 = 0 And y1 = 0 Then
If i2 = 1 And y(2) = 0 And y(3) = 0 And y(4) = 0 And y(5) = 0 And y(6) = 0 Then
Text1 = Choose(y3 + 1, "", "cem ", "duzentos ", "trezentos ", "quatrocentos ", _
"quinhentos ", "seiscentos ", "setecentos ", "oitocentos ", "novecentos ")
Else
Text1 = Choose(y3 + 1, "", "e cem ", "e duzentos ", "e trezentos ", "e quatrocentos ", _
"e quinhentos ", "e seiscentos ", "e setecentos ", "e oitocentos ", "e novecentos ")
End If
Else
Text1 = Choose(y3 + 1, "", "cento ", "duzentos ", "trezentos ", "quatrocentos ", _
"quinhentos ", "seiscentos ", "setecentos ", "oitocentos ", "novecentos ")
End If
If (i2 = 1 And y3 = 0 And y(2) = 0 And y(3) = 0 And y(4) = 0 And y(5) = 0 And y(6) = 0) _
Or (i2 <> 1 And y3 = 0) Then
Text2 = Choose(y2 + 1, "", "", "vinte ", "trinta ", "quarenta ", _
"cinquenta ", "sessenta ", "setenta ", "oitenta ", "noventa ")
Else
Text2 = Choose(y2 + 1, "", "", "e vinte ", "e trinta ", "e quarenta ", _
"e cinquenta ", "e sessenta ", "e setenta ", "e oitenta ", "e noventa ")
End If
If y2 = 1 Then
If (i2 = 1 And y3 = 0 And y(2) = 0 And y(3) = 0 And y(4) = 0 And y(5) = 0 And y(6) = 0) _
Or (i2 <> 1 And y3 = 0) Then
Text3 = Choose(y1 + 1, "dez ", "onze ", "doze ", _
"treze ", "quatorze ", "quinze ", "dezesseis ", _
"dezessete ", "dezoito ", "dezenove ")
Else
Text3 = Choose(y1 + 1, "e dez ", "e onze ", "e doze ", _
"e treze ", "e quatorze ", "e quinze ", "e dezesseis ", _
"e dezessete ", "e dezoito ", "e dezenove ")
End If
ElseIf i2 = 2 And y2 = 0 And y3 = 0 Then
Text3 = Choose(y1 + 1, "", "", "dois ", "tr" & ChrW(234) & "s ", "quatro ", "cinco ", _
"seis ", "sete ", "oito ", "nove ")
Else
If (i2 = 1 And y2 = 0 And y3 = 0 And y(2) = 0 And y(3) = 0 _
And y(4) = 0 And y(5) = 0 And y(6) = 0) Or (i2 <> 1 And y2 = 0 And y3 = 0) Then
Text3 = Choose(y1 + 1, "", "um ", "dois ", "tr" & ChrW(234) & "s ", "quatro ", "cinco ", _
"seis ", "sete ", "oito ", "nove ")
Else
Text3 = Choose(y1 + 1, "", "e um ", "e dois ", "e tr" & ChrW(234) & "s ", "e quatro ", "e cinco ", _
"e seis ", "e sete ", "e oito ", "e nove ")
End If
End If
If y1 = 1 And y2 = 0 And y3 = 0 Then
Text4 = Choose(i2, "", "mil ", "milh" & ChrW(227) & "o ", "bilh" & ChrW(227) & "o ", _
"trilh" & ChrW(227) & "o ", "quatrilh" & ChrW(227) & "o ")
ElseIf y1 = 0 And y2 = 0 And y3 = 0 Then
Text4 = Choose(i2, "", "", "", "", "", "")
Else
Text4 = Choose(i2, "", "mil ", "milh" & ChrW(245) & "es ", "bilh" & ChrW(245) & "es ", _
"trilh" & ChrW(245) & "es ", "quatrilh" & ChrW(245) & "es ")
End If
Text(i2) = Text1 & Text2 & Text3 & Text4
Next
If y(1) + y(2) + y(3) + y(4) + y(5) + y(6) = 0 Then
Text0 = "zero"
Else
Text0 = RTrim(Text(6) & Text(5) & Text(4) & Text(3) & Text(2) & Text(1))
End If
ПрописьPT = Text0
End If
End Function
Проблема в том, что мне нужно сделать так, чтобы перед цифрой стоял артикль "e ", если в разряде после этой цифры все остальные равны нулю, цифры из других разрядов до и после проверяемого также равны нулю.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.09.2020, 16:02
Ответы с готовыми решениями:

Вывод символа слева и его соответствующего кода ASCII справа
Собственно вопрос как это сделать?

Поиск значения элемента(символа) строки по расположению в массиве символов
Задача такова: есть некий массив(псевдо-база_данных) символов, где хранятся символы русского алфавита в двух регистрах(и того 66...

Получить числа справа и слева от символа
Доброго времени суток. Надо подтянуть регулярные выражения мне ) давно планировал. И вот такого рода задача встала: Дана строка:...

7
Заблокирован
10.09.2020, 20:48
NikitaGamer64, НАУЧИТЕСЬ оформлять код. мне лениво искать ендифы в коде не понятном даже если я хочу помочь вам...
0
0 / 0 / 0
Регистрация: 29.11.2019
Сообщений: 30
10.09.2020, 23:13  [ТС]
Надо просто условие создать, которое определяло бы положение цифры в числе, а также все цифры справа и слева от неё

Добавлено через 2 часа 23 минуты
условие, которое определяло бы положение цифры в числе, а также все цифры справа и слева от неё
Проблема кроется именно в формулировке этого условия: если в числе ### ### ##x ### ### цифры # справа и слева от цифры x равны нулю
0
4089 / 1469 / 401
Регистрация: 07.08.2013
Сообщений: 3,670
11.09.2020, 12:05
Visual Basic
1
2
3
4
5
6
7
8
if instr(Cstr(число),CStr(цифра))>1 and instr(Cstr(число),CStr(цифра))<len(Cstr(число)) Then
if Replace(Mid(Cstr(число),1,instr(Cstr(число),CStr(цифра))-1),"0","")="" and Replace(Mid(Cstr(число),instr(Cstr(число),CStr(цифра))+1),"0","")="" Then
msgbox "Справа и слева от цифры находятся 0"
else
msgbox "Справа или слева от цифры находятся другие цифры отличные от 0"
end if
msgbox "Цифра находится либо в начале числа либо в конце"
end if
Добавлено через 2 минуты
вот только один нюансик
числовые форматы не поддерживают запись числа с лидирующими нулями
т.е. число 000001000000 будет преобразовано автоматом в 1000000
лидирующие нули можно сохранять только в текстовом виде
1
0 / 0 / 0
Регистрация: 29.11.2019
Сообщений: 30
11.09.2020, 14:00  [ТС]
Цитата Сообщение от snipe Посмотреть сообщение
число 000001000000 будет преобразовано автоматом в 1000000
Главное, чтобы цифр слева от проверяемой не было
0
0 / 0 / 0
Регистрация: 29.11.2019
Сообщений: 30
15.09.2020, 00:04  [ТС]
А как можно в условие вставить последовательность разрядов числа y(i2):
1 000 000 000 000

Visual Basic
1
2
If y(?) = 0 ' вместо ? я собирался вставить последовательность разрядов от самого первого (единицы/десятки/сотни) _
до разряда перед выделенным жирным, он же проверяемый. Разряды, входящие в последовательность, выделены курсивом
0
1707 / 576 / 74
Регистрация: 10.04.2009
Сообщений: 9,290
15.09.2020, 20:39
Лучший ответ Сообщение было отмечено NikitaGamer64 как решение

Решение

Цитата Сообщение от NikitaGamer64 Посмотреть сообщение
Недавно с этого форума взял алгоритм перевода цифр в текст на русском языке
подскажите пжл-где именно, дайте ссылку
0
0 / 0 / 0
Регистрация: 29.11.2019
Сообщений: 30
16.09.2020, 13:20  [ТС]
Потерял нужный оригинал, но тоже в киберфоруме

Добавлено через 26 секунд
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
подскажите пжл-где именно, дайте ссылку
Потерял нужный код, но тоже на киберфоруме был
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.09.2020, 13:20
Помогаю со студенческими работами здесь

Поиск первого символа справа или последнего слева
Всем здрасти! Короткий вопрос, как найти первый символ в тексте, но справа. Или последний слева. Спасибо!

Работа с текстом, поиск слова, а также 3 слов слева и справа от него
Дан файл, и ключевое слово, в тексте найти это слово, а так же 3 слова слева и 3 слова справа от ключевого Помогите с решением, я открыл...

Заменить каждый элемент на среднее арифметическое его и его соседей слева и справа
Помогите пожалуйста сделать лабораторную работу. Нужно объявить массив целых чисел и заполнить его случайными значениями. Размерность...

Заменить каждый элемент массива на среднее арифметическое его и его соседей слева и справа
При решении использовать масив в файле)

Заменить каждый элемент массива на среднее арифметическое его и его соседей слева и справа
Помогите пожалуйста. Нужно Объявить массив целых чисел и заполнить его случайными значениями. Размерность масссива: 100 Диапазон...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru