2016-08-23 2 views
1

Ich habe eine Datei mit einer Liste von Wörtern, nicht zu unähnlich, die ich in meine MSSQL-Datenbank importieren möchte;konvertieren in ASCII-Zeichen VB.net ssis

Świętochłowice 
Chełmiec 
Wałcz 
... 

Ich möchte eine rudimentäre Umwandlung der polnischen Zeichen in ASCII zu tun, so dass sie durch meine DB analysiert werden kann. Ich verwende SSIS, um die Daten zu importieren, und deshalb verwende ich ein vb.net-Skript, um den Text vor dem Import zu ändern.

Ich habe es versucht;

Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer) 
    Row.unsanitised1.Replace("Ą", "A") 
    Row.unsanitised1.Replace("ą", "a") 

    Row.unsanitised1.Replace("Ć", "C") 
    Row.unsanitised1.Replace("ć", "c") 

    Row.unsanitised1.Replace("Ę", "E") 
    Row.unsanitised1.Replace("ę", "e") 

    Row.unsanitised1.Replace("Ł", "L") 
    Row.unsanitised1.Replace("ł", "l") 

    Row.unsanitised1.Replace("Ń", "N") 
    Row.unsanitised1.Replace("ń", "n") 

    Row.unsanitised1.Replace("Ó", "O") 
    Row.unsanitised1.Replace("ó", "o") 

    Row.unsanitised1.Replace("Ś", "S") 
    Row.unsanitised1.Replace("ś", "s") 

    Row.unsanitised1.Replace("Ź", "Z") 
    Row.unsanitised1.Replace("ź", "z") 

    Row.unsanitised1.Replace("Ż", "Z") 
    Row.unsanitised1.Replace("ż", "z") 

    Row.sanitised = Row.unsanitised 
    Row.sanitised1 = Row.unsanitised1 

End Sub 

Wenn jedoch die Datei eingelesen wird, werden die Zeichen nicht richtig gelesen, sie kommen in mehr wie „L“, was mache ich falsch? Muss ich sie als Unicode einlesen?

Die Datei und das VBScript werden in Codepage 1200 gespeichert, um die polnischen Zeichen zu erhalten.

+1

verwenden Unicode-Code Seite 65001 –

+0

@sandeeprawat Dank Unicode-Code Seite 65001 scheint zum größten Teil zu arbeiten. Es fehlt Ó & ó aus irgendeinem Grund, auch wenn die Daten analysiert werden, sieht es für mich identisch aus. – Intern87

+0

Ich würde vorschlagen, Ihre Idee mit dem Unicode zu versuchen. Ich hatte ein ähnliches Problem (mit leicht verschiedenen zu ersetzenden Zeichen) und es funktionierte gut nach dem Überprüfen und Ersetzen der Unicode-Codes anstelle der Zeichen selbst. – Tyron78

Antwort

0

Rechts,

So nach einer kleinen Pause von dieser und sah es wieder ich das Problem gefunden haben. Ich poste es hier für den Fall, dass die Leute in der Zukunft darauf stoßen und sehen, dass es derzeit ungelöst ist.

@Sandeep Rowat & Tom Blodget sagte in den Kommentaren, Codepage 65001 (UTF-8) ist erforderlich. Die Ersetzungsfunktion funktionierte jedoch immer noch nicht für zwei der Zeichen in der Liste, Ó und ó.

Ich dachte, der Import würde die Zeichen verwirren und sie unkenntlich machen. Diese Theorie wurde getestet, indem man die Zeichen importierte und sie in HEX umwandelte, um sicherzustellen, dass sie dieselben Grundlinienzeichen waren.

Ó erschien als HEX D3 sowohl beim Import als auch beim Code.

ó erschien als HEX F3 sowohl beim Import als auch beim Code.

Da sie beim Import und innerhalb des Codes identisch waren, führte dies zu der Annahme, dass die String.Replace() - Funktion bei diesen Zeichen nicht wie vorgesehen funktioniert.

Ich habe dieses Problem umgangen, indem ich eine Entfernung und anschließend eine Einfügung vorgenommen habe, um die Zeichen zu ersetzen;

Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer) 
 

 
     var = Row.unsanitised1.Replace("Ą", "A") 
 
     var.Replace("ą", "a") 
 

 
     var.Replace("Ć", "C") 
 
     var.Replace("ć", "c") 
 

 
     var.Replace("Ę", "E") 
 
     var.Replace("ę", "e") 
 

 
     var.Replace("Ł", "L") 
 
     var.Replace("ł", "l") 
 

 
     var.Replace("Ń", "N") 
 
     var.Replace("ń", "n") 
 

 
     var.Replace("Ó", "O") 'does not work?! 
 
     var.Replace("ó", "o") 'does not work?! 
 

 
     i = var.LastIndexOf("Ó") 
 
     Do While i >= 0 
 
      var = var.Remove(i, 1) 'this works! 
 
      var = var.Insert(i, "O") 'this works! 
 
      i = var.LastIndexOf("Ó") 
 
     Loop 
 

 
     i = var.LastIndexOf("ó") 
 
     Do While i >= 0 
 
      var = var.Remove(i, 1) 'this works! 
 
      var = var.Insert(i, "o") 'this works! 
 
      i = var.LastIndexOf("ó") 
 
     Loop 
 

 

 
     var.Replace("Ś", "S") 
 
     var.Replace("ś", "s") 
 

 
     var.Replace("Ź", "Z") 
 
     var.Replace("ź", "z") 
 

 
     var.Replace("Ż", "Z") 
 
     var.Replace("ż", "z") 
 

 
     Row.sanitised = Row.unsanitised 
 
     Row.sanitised1 = var 
 

 
     i = Nothing 
 

 
    End Sub

Ich hoffe, dass niemand sonst mit diesem Problem stecken bleibt.

Verwandte Themen