home *** CD-ROM | disk | FTP | other *** search
/ Chip 1999 August / Chip_1999-08_cd.bin / zkuste / VBasic / Data / Priklady / basstr.Bas next >
BASIC Source File  |  1999-05-13  |  6KB  |  263 lines

  1. Attribute VB_Name = "basString"
  2. Option Explicit
  3.  
  4. Private Declare Function IsCharAlpha Lib "user32" Alias "IsCharAlphaA" (ByVal cChar As Byte) As Long
  5. Private Declare Function IsCharAlphaNumeric Lib "user32" Alias "IsCharAlphaNumericA" (ByVal cChar As Byte) As Long
  6.  
  7. 'Funkce vracφ slovo z °et∞zce
  8. 'Parametry:  s     - vstupnφ °etezec
  9. '            token -odd∞lovaΦ
  10. '            Nth   - kterß Φßst °et∞zce
  11. 'P°φklad: tmp=GetWord("Visual Basic verze 5.0", " ", 3)   ="verze"
  12. Public Function GetToken(s As String, token As String, ByVal Nth As Integer) As String
  13.    Dim i As Integer
  14.    Dim p As Integer
  15.    Dim r As Integer
  16.  
  17.    If Nth < 1 Then
  18.       GetToken = ""
  19.       Exit Function
  20.    End If
  21.  
  22.    r = 0
  23.  
  24.    For i = 1 To Nth
  25.       p = r
  26.       r = InStr(p + 1, s, token)
  27.       If r = 0 Then
  28.          If i = Nth Then
  29.             GetToken = Mid$(s, p + 1, Len(s) - p)
  30.          Else
  31.             GetToken = ""
  32.          End If
  33.          Exit Function
  34.       End If
  35.    Next i
  36.  
  37.    GetToken = Mid$(s, p + 1, r - p - 1)
  38. End Function
  39.  
  40. 'Funkce vracφ vytvo°enΘ pole z °et∞zce
  41. 'Parametry: sTxt   - vstupnφ °et∞zec
  42. '           sToken -odd∞lovaΦ
  43. Public Function GetTokens(sTxt As String, sToken As String) As Variant
  44.     Dim iTokenLen As Integer
  45.     Dim iTokenCnt As Integer
  46.     Dim lOffset As Long
  47.     Dim lPrevOffset As Long
  48.     Dim aTokens() As String
  49.  
  50.     iTokenLen = Len(sToken)
  51.     lOffset = InStr(sTxt, sToken)
  52.     
  53.     Do While lOffset > 0
  54.         ReDim Preserve aTokens(iTokenCnt)
  55.         If lOffset - lPrevOffset > 1 Then
  56.             aTokens(iTokenCnt) = Mid$(sTxt, lPrevOffset + 1, lOffset - 1 - lPrevOffset)
  57.         Else
  58.             aTokens(iTokenCnt) = ""
  59.         End If
  60.         
  61.         lPrevOffset = lOffset
  62.         lOffset = InStr(lOffset + iTokenLen, sTxt, sToken)
  63.         iTokenCnt = iTokenCnt + 1
  64.     Loop
  65.     
  66.     ReDim Preserve aTokens(iTokenCnt)
  67.     aTokens(iTokenCnt) = Mid$(sTxt, lPrevOffset + 1)
  68.     GetTokens = CVar(aTokens)
  69. End Function
  70.  
  71. 'Konvertuje double do stringu - cisla za desetinnou carkou jsou ignorovana
  72. Function Int2String(ByVal l As Double) As String
  73.    Dim tmp As String
  74.    Dim str As String
  75.    Dim i As Integer
  76.    Dim j As Integer
  77.    
  78.    tmp = Format(l, "000000000000")
  79.    str = ""
  80.    
  81.    If Len(tmp) > 12 Then
  82.       Int2String = ""
  83.       Exit Function
  84.    End If
  85.       
  86.    If Val(tmp) = 0 Then
  87.       Int2String = "zero"
  88.       Exit Function
  89.    End If
  90.  
  91.    i = Val(Left$(tmp, 3))
  92.    If i <> 0 Then
  93.       GoSub do_hundreds
  94.       str = str + " trillion"
  95.    End If
  96.  
  97.    i = Val(Mid$(tmp, 4, 3))
  98.    If i <> 0 Then
  99.       GoSub do_hundreds
  100.       str = str + " million"
  101.    End If
  102.  
  103.    i = Val(Mid$(tmp, 7, 3))
  104.    If i <> 0 Then
  105.       GoSub do_hundreds
  106.       str = str + " thousand"
  107.    End If
  108.  
  109.    i = Val(Right$(tmp, 3))
  110.    If i <> 0 Then
  111.       GoSub do_hundreds
  112.    End If
  113.  
  114.    Int2String = str
  115.    Exit Function
  116.  
  117. do_hundreds:
  118.    If i > 99 Then
  119.       j = i
  120.       i = i \ 100
  121.       GoSub do_ones
  122.       str = str + " hundred"
  123.       i = j Mod 100
  124.    End If
  125.  
  126.    If i <> 0 Then
  127.       GoSub do_tens
  128.    End If
  129.    Return
  130.    
  131. do_tens:
  132.    Select Case i Mod 100
  133.       Case 90 To 99:
  134.          str = str + " ninety"
  135.          GoSub do_ones
  136.       Case 80 To 89:
  137.          str = str + " eighty"
  138.          GoSub do_ones
  139.       Case 70 To 79:
  140.          str = str + " seventy"
  141.          GoSub do_ones
  142.       Case 60 To 69:
  143.          str = str + " sixty"
  144.          GoSub do_ones
  145.       Case 50 To 59:
  146.          str = str + " fifty"
  147.          GoSub do_ones
  148.       Case 40 To 49:
  149.          str = str + " fourty"
  150.          GoSub do_ones
  151.       Case 30 To 39:
  152.          str = str + " thirty"
  153.          GoSub do_ones
  154.       Case 20 To 29:
  155.          str = str + " twenty"
  156.          GoSub do_ones
  157.          
  158.       Case 19: str = str + " nineteen"
  159.       Case 18: str = str + " eighteen"
  160.       Case 17: str = str + " seventeen"
  161.       Case 16: str = str + " sixteen"
  162.       Case 15: str = str + " fifteen"
  163.       Case 14: str = str + " fourteen"
  164.       Case 13: str = str + " thirteen"
  165.       Case 12: str = str + " twelve"
  166.       Case 11: str = str + " eleven"
  167.       Case 10: str = str + " ten"
  168.       
  169.       Case Else
  170.          GoSub do_ones
  171.    End Select
  172.    Return
  173.    
  174.    
  175. do_ones:
  176.    If i < 10 Or i Mod 10 = 0 Then
  177.       str = str + " "
  178.    Else
  179.       str = str + "-"
  180.    End If
  181.    
  182.    Select Case i Mod 10
  183.       Case 9: str = str + "nine"
  184.       Case 8: str = str + "eight"
  185.       Case 7: str = str + "seven"
  186.       Case 6: str = str + "six"
  187.       Case 5: str = str + "five"
  188.       Case 4: str = str + "four"
  189.       Case 3: str = str + "three"
  190.       Case 2: str = str + "two"
  191.       Case 1: str = str + "one"
  192.    End Select
  193.    
  194.    Return
  195. End Function
  196.  
  197. 'Vraci 0 pokud je string slozen z pismen, jinak vraci
  198. 'pozici chybneho znaku
  199. Public Function IsStringAlpha(s As String) As Long
  200.    Dim i As Long
  201.  
  202.    For i = 1 To Len(s)
  203.       If IsCharAlpha(Asc(Mid$(s, i, 1))) = 0 Then
  204.          IsStringAlpha = i
  205.          Exit Function
  206.       End If
  207.    Next i
  208.    
  209.    IsStringAlpha = 0
  210. End Function
  211.  
  212. 'Vraci 0 pokud je string slozen z pismen a cislic
  213. 'v opacnem pripade vraci pozici chybneho znaku
  214. Public Function IsStringAlphaNumeric(s As String) As Long
  215.    Dim i As Long
  216.    
  217.    For i = 1 To Len(s)
  218.       If IsCharAlphaNumeric(Asc(Mid$(s, i, 1))) = 0 Then
  219.          IsStringAlphaNumeric = i
  220.          Exit Function
  221.       End If
  222.    Next i
  223.    
  224.    IsStringAlphaNumeric = 0
  225. End Function
  226.  
  227. 'Vraci 0 je-li string slozen jen z pismen
  228. 'v opacnem pripade vraci pozici chybneho znaku
  229. Public Function IsStringNumeric(s As String) As Long
  230.    Dim i As Long
  231.    Dim j As Byte
  232.    
  233.    For i = 1 To Len(s)
  234.       j = Asc(Mid$(s, i, 1))
  235.       If IsCharAlphaNumeric(j) = 1 Then
  236.          If IsCharAlpha(j) = 1 Then
  237.             IsStringNumeric = i
  238.             Exit Function
  239.          End If
  240.       Else
  241.          IsStringNumeric = i
  242.          Exit Function
  243.       End If
  244.    Next i
  245.    
  246.    IsStringNumeric = 0
  247. End Function
  248.  
  249. 'Zrusi ze stringu znaky vracene ze systemovych funkci, napr. asc=0
  250. Public Function STrim(s As String) As String
  251.    Dim i As Integer
  252.    Dim s2 As String
  253.    
  254.    s2 = Trim(s)
  255.    i = InStr(s2, Chr$(0))
  256.    
  257.    If i > 0 Then
  258.       s2 = Left$(s2, i - 1)
  259.    End If
  260.    
  261.    STrim = s2
  262. End Function
  263.