2017-01-05 2 views
3

Ich frage mich, ob es eine Möglichkeit gibt, sprachspezifische Buchstaben beim Importieren eines Datenrahmens zu konvertieren.Konvertieren sprachspezifische Buchstaben

Ich meine Sonderzeichen wie: ş ă î â zu s a i a umgewandelt werden.

Für jetzt, was ich tue, ist eine manuelle Ersetzung alle innerhalb von Excel vor der Vorbereitung der Daten für R zu tun. Ich habe einen VBA-Code zum Massenersatz von Zeichen oder Strings, aber im VBA-Editor, wenn ich die spezielle eingeben Charaktere bekomme ich Fragezeichen.

Ich brauche das für ein Geocoding-Projekt.

+1

Teillösung : 'chartr ('şăîâ'," saia ", TestString)' aber zumindest für mich behandelt die R-Konsole nicht die ersten zwei Zeichen. – G5W

+1

Können Sie die Datei in UTF-8 lesen und dann nicht den Buchstaben selbst, sondern seinen UTF-8-Code ersetzen (http://www.fileformat.info/info/charset/UTF-8/list.htm). –

Antwort

1

Nach Hilfe von der Community @cyboashu ich diese billig verwenden, sondern effektiv Makro VBA:

Sub replace() 
' 
Dim i As Integer 
'selecting the sheet in which to do the replacements 
Sheets("Sheet1").Select 
For i = 2 To 5 

    Cells.Replace What:=Sheet2.Cells(i, 1), Replacement:=Sheet2.Cells(i, 2), LookAt:=xlPart, _ 
     SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ 
     ReplaceFormat:=False 
    Next i 
End Sub 

Damit dies funktionieren, ich ein neues Blatt zu schaffen hatte und es in der ursprünglichen Excel hinzuzufügen. In meinem Fall heißt es Sheet2 und ich referenziere es in der for-Schleife, es kann zu einer größeren Anzahl von Zeichen erweitert werden.

Sheet2 structure

Wenn jemand tun Sie dies bitte mehr Voraus oder optimale Methoden teilen, und ich werde sie gerne entdecken werden!

+1

vielen Dank für die Erwähnung mich :) :) – cyboashu

+0

Sie können Sonderzeichen in Excel-Editor mit 'StrConv (" à ", vbFromUnicode)' –

+0

@cyboashu Vielen Dank! – victorj

1

Der Bereich der char Codes 192..609 enthält insgesamt 221 char, die in ASCII darstellbare sind (dh aus diakritischen Zeichen umgewandelt werden):

A A A A A A Æ Ç Ee Ee I I I I dn o o o o o o ü ü ü ü Ý à â â â â â æ ç è é ê ë ì í î ï ñ ò ó ö ö ö ö ü ü ü ü ý ÿ â â â â A A C C C C C C C C-Dd dj dj Ee Ee Ee Ee Ee g g g g g g g g H H H H I I I I I I I I I I Jj Kk llll llll Nn Nn Nn o o o o o o Î œ Rr Rr Rr Ss Ss Ss Ss tT tT tT u u u u u u u u Ű ű Ų Ų Ŵ ŵ Ŷ Ŷ Ž ź ż ż ż Ž Ž Ư Ư Ư Ư Ư Ư Uz Ǎ ǎ Ǐ Ǐ ǒ ǒ Ǔ ǔ Ǖ ǖ Ǘ Ǘ Ǚ ǚ Ǜ ǜ Ǟ ǟ Ǥ ǥ Ǧ Ǧ ǩ ǩ ǫ ǫ Ǭ ǭ ǰ ɡ

Allgemeinen Sie ohne Hilfs Arbeitsblatt gehen kann, ein Wörterbuch Bestücken mit ersetzbar Zeichen on the fly, so etwas wie die folgenden Code:

Sub Test() 

    ReplaceDiacritics Selection 

End Sub 

Sub ReplaceDiacritics(oTargetRange As Range) 

    Static oDiaChars As Object 
    Dim i, j, sRange, sCured, sChar, aRes 

    If oDiaChars Is Nothing Then 
     Set oDiaChars = CreateObject("Scripting.Dictionary") 
     sRange = "" 
     For i = 192 To 609 
      sRange = sRange & ChrW(i) 
     Next 
     With CreateObject("ADODB.Stream") 
      .Type = 2 
      .Mode = 3 
      .Open 
      .Charset = "ascii" 
      .WriteText sRange 
      .Position = 0 
      sCured = .ReadText 
      .Close 
     End With 
     For i = 192 To 609 
      sChar = Mid(sCured, i - 191, 1) 
      If sChar <> "?" Then oDiaChars(ChrW(i)) = sChar 
     Next 
    End If 

    If oTargetRange.Cells.Count = 1 Then 
     sRange = oTargetRange.Value 
     For Each sChar In oDiaChars 
      sRange = Replace(sRange, sChar, oDiaChars(sChar)) 
     Next 
     oTargetRange.Value = sRange 
    Else 
     aRes = oTargetRange.Value 
     For i = LBound(aRes, 1) To UBound(aRes, 1) ' rows 
      For j = LBound(aRes, 2) To UBound(aRes, 2) ' columns 
       For Each sChar In oDiaChars 
        aRes(i, j) = Replace(aRes(i, j), sChar, oDiaChars(sChar)) 
       Next 
      Next 
     Next 
     oTargetRange.Value = aRes 
    End If 

End Sub 

Das Wörterbuch als statisch deklariert damit es nur auf den ersten Lauf ausgefüllt ist, ich den Code mit einer Auswahl von 1000 Zellen 3500 Zeichen Länge jeweils getestet, dauert es etwa 8 Sekunden für mich. Um das Hängenbleiben zu vermeiden, sollte man es besser wie ReplaceDiacritics ActiveSheet.UsedRange, aber nicht ReplaceDiacritics Cells nennen.

0

In R (wie Ihre Frage auch mit R markiert) Sie iconv mit translitteration verwenden können (aber für mich das erste Zeichen nicht zeigen, könnte es von Ihrem Betriebssystem ab):

> iconv("ș ă î â", "UTF-8", "ASCII//TRANSLIT") 
[1] "? a i a" 
Verwandte Themen