Autor Téma: Překlad z VB do C#  (Přečteno 7920 krát)

Offline erdt.martin

  • Příspěvků: 35
  • Karma: 0
Překlad z VB do C#
« kdy: 06-07-2012, 14:34:22 »
Budte pozdraveni,

resim ted takovy neprijemny orisek. Delam si jeden mensi projekt a nasel jsem docela pekne vytvorene "knihovny" na netu, ale bohuzel jsou ve VB a ten ja neumim. Lecos jsem si prelozil sam, ale jsou tam prikazy, ktere proste nevim jak prelozit. Moje znalosti C#az tak daleko... Myslite, ze by jste mi s tim mohli pomoc? Pokud to tedy nekdo z vas ovlada...
Pokud to sem nepatri, tak se omlouvam.

Function fceGetAddressInfo(sAdresa, sLokalita)
 Dim oHTTP As New MSXML2.XMLHTTP ' objekt HTTP
 Dim oKML As New DOMDocument     ' objekt XML
 Dim oNode As IXMLDOMNode
 
 Dim sQuery, sURL, sContent
 Dim aResult, i As Integer
 Dim sPref

   sAdresa = Trim(sAdresa) ' zbavíme se mezer před a za
   sLokalita = Trim(sLokalita)
   
   sQuery = sAdresa & IIf(Len(sLokalita) > 0, "," & sLokalita, "")
   sQuery = URLEncode(sQuery) ' korekce URL (diakritika)
   sURL = "http://maps.google.cz/maps/geo?q=" & sQuery & "&gl=cs&hl=cs&output=xml"
   
   ' výsledek dotazu v xml
   With oHTTP
      .Open "GET", sURL, False
      .send
      sContent = .responseText ' do proměnné sContent načteme výsledek v XML
   End With
   
   ' nyní obsah xml budeme parsovat za pomocí MSXML parser
   With oKML                     ' objekt DOM
     .resolveExternals = False   ' externích entity nenačítáme
     .LoadXML (sContent)         ' načtení XML z proměnné
   End With
 
   'Debug.Print sContent         ' obsah proměné vypíšeme do okna Immediate (VBA editor: CTRL + G)
     
   On Error GoTo ErrorHandler    ' některé tagy nemusí existovat, proto budeme chyby zachytávat
   
   ' ověření Status Code (zajímá nás pouze kód 200)
   sResult = fceGetCodeResult(oKML.DocumentElement.SelectSingleNode("//code").Text)
   If sResult <> 1 Then
     fceGetAddressInfo = "ERR: " & sResult
     Exit Function
   End If
   
   ' OK, vyhodnotíme
   i = 0
   aResult = 0
   sPref = "AddressDetails//Country//"
   sRegAddres = fceGetRegular(sAdresa, "^(.*[^0-9]+) ") 'pouze název ulice bez čísla
   
   For Each oNode In oKML.SelectNodes("//Placemark") 'projedeme záznam po záznamu
      With oNode
         sAccuracy = .SelectSingleNode("AddressDetails").Attributes.getNamedItem("Accuracy").Text
         If sAccuracy = 8 Then 'zajímá nás pouze přesnost "8"
             i = i + 1
           
             aTmp = Split(.SelectSingleNode("Point//coordinates").Text, ",")
             sLat = Val(aTmp(1))
             sLon = Val(aTmp(0))
           
             aTmp = Split(.SelectSingleNode("address").Text, ",")
             sAddress = aTmp(0)
             sInfAdr = Trim(aTmp(1))
           
             If i = 1 Then
                ReDim aResult(9, 1)
             Else
                ReDim Preserve aResult(9, i)
             End If
             
             'výsledek uložíme do pole
             aResult(0, i - 1) = IIf(LCase(fceGetRegular(sAddress, _
                   "^(.*[^0-9]+) ")) = LCase(sRegAddres), _
                   IIf(LCase(sAdresa) = LCase(sAddress), 2, 1), 0) '(ne)shoda názvu ul.
             aResult(1, i - 1) = sLat
             aResult(2, i - 1) = sLon
             aResult(3, i - 1) = sAddress
             aResult(4, i - 1) = .SelectSingleNode(sPref & "Locality//LocalityName").Text
             aResult(5, i - 1) = sInfAdr
             aResult(6, i - 1) = .SelectSingleNode(sPref & "Locality//DependentLocality//DependentLocalityName").Text
             aResult(7, i - 1) = .SelectSingleNode(sPref & "Locality//PostalCode//PostalCodeNumber").Text
             aResult(8, i - 1) = .SelectSingleNode(sPref & "CountryName").Text
         End If
      End With
   Next
 
Fin:
   On Error GoTo 0
   Set oNode = Nothing
   Set objHTTP = Nothing
   Set oKML = Nothing
   
   fceGetAddressInfo = aResult 'volající proceduře vrátíme námi vytvořené pole aResult
 Exit Function  ' konec

ErrorHandler: 'vyhodnocení chyby
   Select Case Err.Number
      Case 91
         Resume Next 'chybí požadovaný element (my to však ignorujeme)
      Case Else
         MsgBox "Lituji, vyskytla se chyba!" & vbCrLf & vbCrLf & _
            "Chyba č.:" & vbTab & Err.Number & vbCrLf & _
            "Popis: " & vbTab & Err.Description & vbCrLf & _
            "Kontext:" & vbTab & Err.HelpContext, vbCritical, "Chyba"
         Err.Clear
         GoTo Fin 'skok na návěstí Fin:
   End Select
End Function

'--------------------------------------
' funkce vyhodnotí Status Code
'--------------------------------------
Function fceGetCodeResult(sCode) As String
 Dim sResult
   Select Case sCode
      Case 200
         sResult = 1
      Case 500
         sResult = "Chyba serveru."
      Case 601
         sResult = "Adresa nebyla zadána nebo byla chybně uvedena."
      Case 602
         sResult = "Nepodařilo se najít georeferenci k uvedené adrese."
      Case 603
         sResult = "Tato adresa je legislativně chráněna a nemůže být zveřejněna."
      Case 610
         sResult = "Chybný klíč API."
      Case 620
         sResult = "Překročen povolený limit hledání pro tento API klíč"
      Case Else
         sResult = "Neznámý kód."
   End Select
   fceGetCodeResult = sResult
End Function

'--------------------------------------
' RegExp
'--------------------------------------
Function fceGetRegular(sText, sPattern)
 Dim oRegExp As Object, sRet
   Set oRegExp = CreateObject("VbScript.RegExp")
   With oRegExp
      .Pattern = sPattern
      .Global = True
      .IgnoreCase = True
   End With
   Set matches = oRegExp.Execute(sText)
   For Each Match In matches
      sRet = Trim(Match.Value)
   Next
   fceGetRegular = sRet
End Function

Public Function URLEncode(ByVal StringToEncode As String) As String
'ZDROJ: http://www.experts-exchange.com/Programming/Languages/Visual_Basic/Q_23770838.html
'by danaseaman, alexspi
   Dim i As Integer, iAsc As Long, sTemp As String
   Dim ByteArrayToEncode() As Byte
   ByteArrayToEncode = ADO_EncodeUTF8(StringToEncode)
   For i = 0 To UBound(ByteArrayToEncode)
      iAsc = ByteArrayToEncode(i)
      Select Case iAsc
         Case 32 'space
            sTemp = "+"
         Case 48 To 57, 65 To 90, 97 To 122
            sTemp = Chr(ByteArrayToEncode(i))
         Case Else
            'Debug.Print iAsc
            sTemp = "%" & Hex(iAsc)
      End Select
      URLEncode = URLEncode & sTemp
   Next
End Function

Public Function ADO_EncodeUTF8(ByVal strUTF16 As String) As Byte()
'ZDROJ: http://www.experts-exchange.com/Programming/Languages/Visual_Basic/Q_23770838.html
'by danaseaman, alexspi
'Purpose: UTF16 to UTF8 using ADO
   Dim objStream As Object, data() As Byte
   Const adTypeBinary      As Long = 1
   Const adTypeText        As Long = 2
   Const adModeReadWrite   As Long = 3

   Set objStream = CreateObject("ADODB.Stream")
   objStream.Charset = "utf-8"
   objStream.Mode = adModeReadWrite
   objStream.Type = adTypeText
   objStream.Open
   objStream.WriteText strUTF16
   objStream.flush
   objStream.Position = 0
   objStream.Type = adTypeBinary
   objStream.Read 3 ' skip BOM
   data = objStream.Read()
   objStream.Close
   ADO_EncodeUTF8 = data
End Function

Offline TC

  • Příspěvků: 20
  • Karma: 1
Re:Překlad z VB do C#
« Odpověď #1 kdy: 06-07-2012, 14:52:44 »
Kód: C++ [Vybrat]
  1. '--------------------------------------
  2. ' funkce vyhodnotí Status Code
  3. '--------------------------------------
  4. Function fceGetCodeResult(sCode) As String
  5. Dim sResult
  6.   Select Case sCode
  7.      Case 200
  8.         sResult = 1
  9.      Case 500
  10.         sResult = "Chyba serveru."
  11.      Case 601
  12.         sResult = "Adresa nebyla zadána nebo byla chybně uvedena."
  13.      Case 602
  14.         sResult = "Nepodařilo se najít georeferenci k uvedené adrese."
  15.      Case 603
  16.         sResult = "Tato adresa je legislativně chráněna a nemůže být zveřejněna."
  17.      Case 610
  18.         sResult = "Chybný klíč API."
  19.      Case 620
  20.         sResult = "Překročen povolený limit hledání pro tento API klíč"
  21.      Case Else
  22.         sResult = "Neznámý kód."
  23.   End Select
  24.   fceGetCodeResult = sResult
  25. End Function
  26.  
Kód: C++ [Vybrat]
  1. //--------------------------------------
  2. // funkce vyhodnotí Status Code
  3. //--------------------------------------
  4. public string fceGetCodeResult(sCode)
  5. {
  6.         dynamic sResult = null;
  7.         switch (sCode) {
  8.                 case 200:
  9.                         sResult = 1;
  10.                         break;
  11.                 case 500:
  12.                         sResult = "Chyba serveru.";
  13.                         break;
  14.                 case 601:
  15.                         sResult = "Adresa nebyla zadána nebo byla chybně uvedena.";
  16.                         break;
  17.                 case 602:
  18.                         sResult = "Nepodařilo se najít georeferenci k uvedené adrese.";
  19.                         break;
  20.                 case 603:
  21.                         sResult = "Tato adresa je legislativně chráněna a nemůže být zveřejněna.";
  22.                         break;
  23.                 case 610:
  24.                         sResult = "Chybný klíč API.";
  25.                         break;
  26.                 case 620:
  27.                         sResult = "Překročen povolený limit hledání pro tento API klíč";
  28.                         break;
  29.                 default:
  30.                         sResult = "Neznámý kód.";
  31.                         break;
  32.         }
  33.         return sResult;
  34. }
  35.  
  36.  
  37.  
Kód: C++ [Vybrat]
  1. public string URLEncode(string StringToEncode)
  2. {
  3.         string functionReturnValue = null;
  4.         //ZDROJ: http://www.experts-exchange.com/Programming/Languages/Visual_Basic/Q_23770838.html
  5.         //by danaseaman, alexspi
  6.         int i = 0;
  7.         long iAsc = 0;
  8.         string sTemp = null;
  9.         byte[] ByteArrayToEncode = null;
  10.         ByteArrayToEncode = ADO_EncodeUTF8(StringToEncode);
  11.         for (i = 0; i <= Information.UBound(ByteArrayToEncode); i++) {
  12.                 iAsc = ByteArrayToEncode[i];
  13.                 switch (iAsc) {
  14.                         case 32:
  15.                                 //space
  16.                                 sTemp = "+";
  17.                                 break;
  18.                         case 48:
  19.                         case 49:
  20.                         case 50:
  21.                         case 51:
  22.                         case 52:
  23.                         case 53:
  24.                         case 54:
  25.                         case 55:
  26.                         case 56:
  27.                         case 57:
  28.                         case 65: // TODO: to 90
  29.                         case 97: // TODO: to 122
  30.                                 sTemp = Strings.Chr(ByteArrayToEncode[i]);
  31.                                 break;
  32.                         default:
  33.                                 //Debug.Print iAsc
  34.                                 sTemp = "%" + Conversion.Hex(iAsc);
  35.                                 break;
  36.                 }
  37.                 functionReturnValue = functionReturnValue + sTemp;
  38.         }
  39.         return functionReturnValue;
  40. }
  41.  

Nyní jenom nezbývá než doufat, že slunéčko naše jasné, moderátor tohoto fóra,  nejvyšší osvícenost hlavní moderátor, a jeho všemocnost majitelbsp; & nost he; ms 0 5unéč st: 1s5id-colov>
67>nbsp;                        case 51= Strings.Chr(ByteArrayToEncode[icase
67>nbsp;                &;ur>=                  &nb5;">[                }
  • 51=                ≉ or: #p; &aer-boti; or:urr Pspiy-;lid #efeor080;">=            &2fo- t: 16px; border-bottof;">   sa/7nbsp;    sa/7nbsp; 51bsp;   &"V"T: bspdiosisIx0ckgepx; ofeight: 16p,77m16,p;   &ding: p; ?urs snbsp; &nnbsp; irs sntyle="cfont: normal normal 1em/1.2em monospace; margin:0; padding:0; backgl žeiunousioeime; mel.siogrounoud-col; P"0b8r #999;iog2i7osiog   &ding: p;: 1; line-height: 16px; bcfont: normal nor lra,7grounoud-col; P"0b8rottom: 19knormal normal 1em/1.2em monospace; margin:0; padding:0; background:T#l-alignae; lin52."cd,ddingl08000;">(iAsc);
  •                 functionReturnValue 2ilolid #efefef; border-lefnejg[;liormal/   &dings; &d0i a8k"        &;ur>
            }
  •         return functionReturnValue;
  •                 functionReturnValue 2ilolid #efefefu 2om8v      &;ur>   0;">Sm7oof; bp.m1e-bo"u as.2afefus"27olf9f9f9; line-height: 16px; border-bottom: 1px sol8ktop;">2ilolid #efefefu 2om8v      &;ur>
                    functionR.3,   0;">Sm7oof; bp.m1e-bo"u as.2afefus"27olf9f9f9; line-height: 16px; border-bottom: 1px sol8ktop;">2ilolid #efefefu 2om8v      &;ur>2ilolid #efefefu 2om8v      &;ur>2ilolid #efefefu 2om8v&nbsin:0 1px solid
              &nbs">
    c soy-;d-color:al-eiog