Announcement

Collapse
No announcement yet.

Provider für Import aus UTF-8/Unicode Textdateien gesucht

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Provider für Import aus UTF-8/Unicode Textdateien gesucht

    Liebes Forum,

    in meiner Anwendung (VB.NET 2008) habe ich einen Import für Daten aus Outlook, Excel und Textdateien. Zum Einlesen der Textdateien verwende ich einen ConnectionString in der Form

    InCn = New OleDbConnection( _
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\DataDir;" & _
    "Extended Properties='text'")

    und eine Ascii-Datei Schema.ini mit folgendem Inhalt :

    [Importfile 1 .csv]
    ColNameHeader = True
    Format = TabDelimited
    CharacterSet = ANSI
    MaxScanRows = 0


    Unglücklicherweise ist in der Schema.ini als CharacterSet nur 'ANSI', (Windows Zeichensatz) und 'OEM' (ASCII, bzw. DOS) zulässig.
    Ich möchte jedoch auch Textdateien mit anderen Zeichenkodierungen wie UTF-8, Unicode, Unicode Big Endian usw. einlesen können.

    Der .NET StreamReader erkennt die Kodierung von Textdateien korrekt, ich weiß aber keinen Weg, dies für den Import zu Nutze zu machen.

    Ich habe den aktuellen OleDbProvider Microsoft.ACE.OLEDB.12.0 getestet, jedoch ohne Erfolg.

    Wer kann mir helfen? Bin für jeden Tipp dankbar!
    Grüße aus Hamburg,
    Dierk Teichert

  • #2
    Guck mal in die Richtung System.Text.Encoding.UTF-8
    So schreibt man beispielsweiße in eine Datei. Könnten man aber auch in die Datenbank schreiben.
    Code:
    Public Sub CreateTextFile(ByVal FileName As String, _
        ByVal TextToAdd As String)
    
        Dim Fs As FileStream = New FileStream(FileName, _
            FileMode.CreateNew, FileAccess.Write, FileShare.None)
    
        Dim SwFromFile As StreamWriter = New StreamWriter(FileName)
        SwFromFile.Write(TextToAdd)
        SwFromFile.Flush()
        SwFromFile.Close()
    
        Dim SwFromFileStream As StreamWriter = New StreamWriter(Fs)
        SwFromFileStream.Write(TextToAdd)
        SwFromFileStream.Flush()
        SwFromFileStream.Close()
    
        Dim SwFromFileStreamDefaultEnc As StreamWriter = _
         New StreamWriter(Fs, System.Text.Encoding.Default)
        SwFromFileStreamDefaultEnc.Write(TextToAdd)
        SwFromFileStreamDefaultEnc.Flush()
        SwFromFileStreamDefaultEnc.Close()
    
        Dim SwFromFileTrue As StreamWriter = _
         New StreamWriter(FileName, True)
        SwFromFileTrue.Write(TextToAdd)
        SwFromFileTrue.Flush()
        SwFromFileTrue.Close()
    
        Dim SwFromFileTrueUTF8Buffer = _
         New StreamWriter(FileName, _
         True, System.Text.Encoding.UTF8, 512)
        SwFromFileTrueUTF8Buffer.Write(TextToAdd)
        SwFromFileTrueUTF8Buffer.Flush()
        SwFromFileTrueUTF8Buffer.Close()
    
        Dim SwFromFileTrueUTF8 = _
         New StreamWriter(FileName, True, _
         System.Text.Encoding.UTF8)
        SwFromFileTrueUTF8.Write(TextToAdd)
        SwFromFileTrueUTF8.Flush()
        SwFromFileTrueUTF8.Close()
    
        Dim SwFromFileStreamUTF8Buffer = _
         New StreamWriter(Fs, System.Text.Encoding.UTF8, 512)
        SwFromFileStreamUTF8Buffer.Write(textToAdd)
        SwFromFileStreamUTF8Buffer.Flush()
        SwFromFileStreamUTF8Buffer.Close()
    
    End Sub
    Bitte vergessen Sie nicht die Antwort zu bewerten. Danke.:-)

    Comment


    • #3
      Hallo Vadym,

      danke für Deine Antwort. Es geht mir ums Einlesen mit einem passenden "Provider", der automatisch - oder per Auswahl durch den Benutzer - die in UTF8, Unicode oder sonstwie besonders kodierte Textdatei sauber interpretiert.

      Der StreamReader hat damit keine Probleme, das war mir bekannt .
      Meine Anwendung soll jedoch auch in der Lage sein, character-delimited Daten aus einer UTF8-Textdatei importieren zu können. Mit den Providern Jet.OLEDB.4.0 bzw. ACE.OLEDB.12.0 plus SCHEMA.INI klappt das nicht. Hierfür suche ich eine Lösung.

      Bin weiterhin für jeden Hinweis dankbar.
      Grüße aus Hamburg
      Dierk Teichert

      Comment


      • #4
        Und wenn du dir selbst eine Klasse schreibst die es ermöglicht Csv oder ähnliches einzulesen?
        Unsere Jugend ist unerträglich, unverantwortlich und entsetzlich anzusehen! - Aristoteles

        Comment


        • #5
          Hallo das-d,

          Originally posted by das-d View Post
          Und wenn du dir selbst eine Klasse schreibst die es ermöglicht Csv oder ähnliches einzulesen?
          vielen Dank, das klingt interessant. Habe leider keine Vorstellung, wie ich so etwas anfange. Der Anfang ist ja bekanntlich das Schwerste.
          Hast Du schon etwas entfernt Verwandtes gemacht und könntest vielleicht ein (kleines) Beispiel zeigen und/oder Tipps bzw. Informationsquellen nennen? Das wäre "Klasse".

          Schöne Grüße aus Hamburg,
          Dierk Teichert

          Comment


          • #6
            du könntest ja einen Stream Zeile für Zeile einlesen und jede Zeile könntest du nach bestimmten Muster splitten ich mein die String Struktur bringt eine Funktion Split mit das wäre wohl das einfachste.
            Unsere Jugend ist unerträglich, unverantwortlich und entsetzlich anzusehen! - Aristoteles

            Comment


            • #7
              ... Du wirst lachen, rudimentär ist so etwas in meinem Programm bereits vorhanden. Ich benutze den StreamReader, um eine Grob-Vorschau der Importdatei anzuzeigen.
              Entsprechend den Eigenschaften Feldtrennzeichen und Kodierung (hier eben bisher nur ANSI oder ASCII) lese ich die Textdatei in einen DataTable ein und zeige sie in einer DataGridView an. Ich muß nur beim Einlesen in den DataTable bei anders kodierten Dateien nicht OleDbProvider "Text" und Schema.ini, sondern den StreamReader benutzen und die Daten passend aufsplitten; falls die erste Zeile keine Spaltennamen enthält, müßte ich selbst welche zusammenbauen, z.B. "F"<Nummer> und alle Zeilen einlesen; andernfalls die erste Zeile lesen, aufsplitten und daraus die Spaltennamen gewinnen und weiter ab Zeile 2 die übrigen Zeilen einlesen.
              Und all das nur, weil Microsoft in der Schema.ini keine Multibyte-Characters unterstützt.

              Danke, Du hast mir sehr geholfen!

              Grüße aus Hamburg,
              Dierk Teichert

              Comment

              Working...
              X