Results 1 to 3 of 3
Hybrid View
-
9th December 2015 15:23 #1Registered User
Join Date: Jun:2013
Location: >.<
Posts: 6,182
xlsx / ods - èçïèñâàíå íà öèôðè ñ äóìè
Ãëåäàõ èç íåòà ðàçíè ïîäîáíè íàñîêè, íî íèòî åäíà íå ìè ïîìîãíà, êàòî ïðîáëåìèòå ñà îñíîâíî â èçïèñâàíå íà öèôðèòå êàòî òåêñò (íàïðèìåð 543 - ïåòñòîòèí è ÷åòèðèäåñåò è òðè - êîåòî íå å ïðàâèëíî, çàùîòî òðÿáâà äà å "ïåòñòîòèí
è÷åòèðèäåñåò è òðè").
Ùå ñå ïîëçâà (àêî å âúçìîæíî) â excel (ms office) è ods (libre office) ôàéëîâå.
Äàéòå ðàáîòåùè íàñîêè ìîëÿ, ùå ñúì ìíîãî áëàãîäàðåí (íå ïèøà íà VB è íå ìîãà äà ñè ãî íàïðàâÿ ñàì).
-
9th December 2015 15:51 #2
Àêî òè âúðøè ðàáîòà ïèòîíñêè êîä (íå çíàì êàêâî ìîæåø äà èíòåãðèðàø òàì), åòî:
Code:"""Spells numbers, words and lists in Bulgarian.""" ONES = [u"íóëà", u"åäèí", u"äâà", u"òðè", u"÷åòèðè", u"ïåò", u"øåñò", u"ñåäåì", u"îñåì", u"äåâåò"] TEENS = [u"äåñåò", u"åäèíàäåñåò"] + [x + u"íàäåñåò" for x in ONES[2:]] TENS = ["", u"äåñåò"] + [one + u"äåñåò" for one in ONES[2:]] HUNDREDS = ["", u"ñòî", u"äâåñòà", u"òðèñòà"] + [ten + u"ñòîòèí" for ten in ONES[4:]] THOUSANDS = ["", u"õèëÿäà", u"äâå õèëÿäè"] + [x + u" õèëÿäè" for x in ONES[3:]] def spell(n): """Spells a number in Bulgarian, the number should not exceed 10000.""" assert n < 10000 res = [] if n >= 1000: res.append(THOUSANDS[n/1000]) n %= 1000 if n >= 100: res.append(HUNDREDS[n/100]) n %= 100 if n >= 20: res.append(TENS[n/10]) n %= 10 if n: res.append(ONES[n]) elif n >= 10: res.append(TEENS[n - 10]) else: if n or len(res) == 0: res.append(ONES[n]) assert len(res) > 0 if len(res) > 1: res.insert(len(res) - 1, u"è") return " ".join(res)
Åòî òàêà ñå ïëîäÿò òå, êàçâàì ñè àç. Ïîä íîñà òè.
"640K îught to be enough for anybody" - Bill Gates, 1981
Òåñòîâå íà áàòåðèè::Machine specs::Fract::AGG::ÍåÑåÑúðäè×îâå÷å::Baileys::blog::YouTube channel
-
9th December 2015 16:16 #3Registered User
Join Date: Jun:2013
Location: >.<
Posts: 6,182
Ðàáîòè èäåàëíî. Íàìåðèõ ãî, òåñòâàõ ãî è çà ñåãà íå âèæäàì ÿäîâå:
Àêî íÿêîé èìà èäåÿ êàê òîâà äà ñòàíå è â Libre-òî, äà íå ñè òðàåCode:Public Function ToWords(ByVal dblValue As Double, Optional Measure As Variant, Optional Gender As String) As String Dim vDigits As Variant Dim vGenderDigits As Variant Dim vValue As Variant Dim lIdx As Long Dim lDigit As Long Dim sResult As String '--- init digits (incl. gender ones) vDigits = Split("íóëà åäíî äâå òðè ÷åòèðè ïåò øåñò ñåäåì îñåì äåâåò") vGenderDigits = vDigits Select Case Left$(Gender, 1) Case vbNullString, "M" vGenderDigits(1) = "åäèí" vGenderDigits(2) = "äâà" Case "F" vGenderDigits(1) = "åäíà" End Select '--- split input value on decimal point and pad w/ zeroes vValue = Mid$(Format$(0, "0.0"), 2, 1) vValue = Split(Format$(Abs(dblValue), "0.00##"), vValue) vValue(0) = Right$(String$(18, "0") & vValue(0), 18) '--- loop input digits from right to left For lIdx = 1 To Len(vValue(0)) If lIdx <= 3 Then lDigit = Mid$(vValue(0), Len(vValue(0)) - lIdx + 1, 1) Else lDigit = Mid$(vValue(0), Len(vValue(0)) - lIdx - 1, 3) lIdx = lIdx + 2 End If If lDigit <> 0 Then '--- separate by space (first time prepend "è" too) If LenB(sResult) <> 0 And (lIdx <> 2 Or lDigit <> 1) Then If InStr(sResult, " è ") = 0 Then sResult = " è " & sResult Else sResult = " " & sResult End If End If Select Case lIdx Case 1 sResult = vGenderDigits(lDigit) & sResult Case 2 If lDigit = 1 Then '--- 11 to 19 special wordforms If LenB(sResult) <> 0 Then sResult = Replace(LTrim$(sResult), vGenderDigits(1), "åäè") sResult = Replace(sResult, vGenderDigits(2), "äâà") & "íàäåñåò" Else sResult = "äåñåò" End If Else sResult = IIf(lDigit = 2, "äâà", vDigits(lDigit)) & "äåñåò" & sResult End If Case 3 '--- hundreds have special suffixes for 2 and 3 Select Case lDigit Case 1 sResult = "ñòî" & sResult Case 2, 3 sResult = vDigits(lDigit) & "ñòà" & sResult Case Else sResult = vDigits(lDigit) & "ñòîòèí" & sResult End Select Case 6 '--- thousands are in feminine gender Select Case lDigit Case 1 sResult = "õèëÿäà" & sResult Case Else sResult = ToWords(lDigit, vbNullString, Gender:="F") & " õèëÿäè" & sResult End Select Case 9, 12, 15 '--- no special cases for bigger values sResult = ToWords(lDigit, vbNullString) & " " & Split("ìèëèîí ìèëèàðä òðèëèîí êâàäðèëèîí")((lIdx - 9) \ 3) _ & IIf(lDigit <> 1, "à", vbNullString) & sResult End Select End If Next '--- handle zero and negative values If LenB(sResult) = 0 Then sResult = vDigits(0) End If If dblValue < 0 Then sResult = "ìèíóñ " & sResult End If '--- apply measure (use vbNullString for none) If IsMissing(Measure) Then Measure = "ëâ.|ñò." Gender = "MF" End If If LenB(Measure) <> 0 Then If Right$(sResult, Len(vDigits(0))) = vDigits(0) And Val(vValue(1)) <> 0 And InStr(Measure, "|") > 0 Then sResult = ToWords(IIf(dblValue < 0, -1, 1) * Val(vValue(1)), Split(Measure, "|")(1), Mid$(Gender, 2)) Else sResult = sResult & " " & Split(Measure, "|")(0) If Val(vValue(1)) <> 0 Then sResult = sResult & " è " & Val(vValue(1)) If InStr(Measure, "|") > 0 Then sResult = sResult & " " & Split(Measure, "|")(1) End If End If sResult = UCase$(Left$(sResult, 1)) & Mid$(sResult, 2) End If End If ToWords = sResult End Function




Reply With Quote
Ïðîáëåìíà R9 280, àðòåôàêòè
7th May 2023, 21:28 in Âèäåîêàðòè