Zum Hauptinhalt springen
Weil einfach - produktiver ist

Der Daten Spezialist

Konvertieren Sie die Daten mühelos zwischen verschiedenen Formaten ohne Programmierkenntnisse dank Visual Designer. Effizient und super einfach.
Flowheater Chart

Problem beim Einlesen von csv-Dateien

  • Heinz-Bernd Monschau
  • Autor
  • Offline
  • Benutzer
  • Benutzer
Mehr
11 Jahre 1 Monat her #1480 von Heinz-Bernd Monschau
Problem beim Einlesen von csv-Dateien wurde erstellt von Heinz-Bernd Monschau
Hallo,

beim Versuch csv-Dateien mit dem Flowheater zu verarbeiten, die auch mehrere Attribute mit längeren Texten enthalten, in denen sich Strichpunkte und Zeilenschaltungen befinden, habe ich das Problem, das der Flowheater dies als neue Spalten interprtiert und die Dateien nicht korrekt verarbeitet.

Bei der Verarbeitung derselben Dateien in selbst erstelten Klassen habe ich das Problem seit der Verwendung der im .net-Framework entahltetnen TextFieldParser-Klasse nicht mehr (nachfolgend der code, welcher eine korrekte Dattable zurückgibt).

Wie kann ich dem Flowheater auch beibringen die Dateien korrekt zu verarbeiten?

Gruß
Monschau



Function ReadCSV(ByVal path As String) As System.Data.DataTable
Dim afile As FileIO.TextFieldParser = New FileIO.TextFieldParser(path)
Dim CurrentRecord As String() ' this array will hold each line of data
afile.TextFieldType = FileIO.FieldType.Delimited
afile.Delimiters = New String() {";"}
afile.HasFieldsEnclosedInQuotes = True
Dim columnarray() As String = afile.ReadFields()
Dim dt As New DataTable
For x = 0 To columnarray.Length - 1
dt.Columns.Add(columnarray(x))
Next

For x = 0 To 10
dt.Columns.Add(x)
Next
' parse the actual file

Do While Not afile.EndOfData
Try
CurrentRecord = afile.ReadFields
dt.LoadDataRow(CurrentRecord, True)

Catch ex As FileIO.MalformedLineException
Stop
End Try
Loop

Return dt
End Function

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
11 Jahre 1 Monat her - 8 Jahre 10 Monate her #1482 von FlowHeater-Team
FlowHeater-Team antwortete auf Problem beim Einlesen von csv-Dateien
Hallo Herr Monschau,

vielen Dank für den Verbesserungsvorschlag. Über folgenden Link können Sie sich eine erste Beta Version 3.2.1 herunterladen, die auch Zeilenumbrüche in quotierten CSV Spalten unterstützt. FlowHeater Beta 3.2.1

Wenn Sie hier in den Adapter Eigenschaften den Wert für "AllowLineBreaksInColumns" auf True stellen können in quotierten CSV Spalten auch Zeilenumbrüche vorkommen. Hinweis: Die Anzeige in der Vorschau des TextFile Adapters unterstützt das noch nicht, die Vorschau sieht etwas verschoben aus.

PS: CSV Trennzeichen die in quotierten CSV Spalten vorhanden sind überliest der FlowHeater seit Version 1.x :)



gruß
Robert Stark

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Letzte Änderung: 8 Jahre 10 Monate her von FlowHeater-Team.

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

  • Heinz-Bernd Monschau
  • Autor
  • Offline
  • Benutzer
  • Benutzer
Mehr
11 Jahre 1 Monat her - 11 Jahre 1 Monat her #1483 von Heinz-Bernd Monschau
Heinz-Bernd Monschau antwortete auf Problem beim Einlesen von csv-Dateien
Hallo Herr Stark,

leider ist die Csv nicht quottiert, daher funktoniert die Lösung so nicht.

Ich habe nun stattdessen versucht meine Routine in eine c#-Function zu packen um sie mit dem Tabledataadapter zu verarbeiten. Geht aber auch nicht, da ich C#-Legastehniker bin.

Fehlermeldung im Screenshot anbei, C#-Code und VB.net-Code folgend.

Gruß
Monschau

C#:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using clsCSVtoDT;
using System.Data;
namespace ClassLibrary1
{
public class clsCreateDatatale
{
public DataTable FlowHeater_GetDataTable(int rows)

{

DataTable dt = clsDT_creation.ReadCSV();
return dt;
}
}
}

VB:

ublic Class clsDT_creation
Shared Function ReadCSV() As System.Data.DataTable
Dim afile As FileIO.TextFieldParser = New FileIO.TextFieldParser("fullreport.csv")
Dim CurrentRecord As String() ' this array will hold each line of data
afile.TextFieldType = FileIO.FieldType.Delimited
afile.Delimiters = New String() {";"}
afile.HasFieldsEnclosedInQuotes = True
Dim columnarray() As String = afile.ReadFields()
Dim dt As New DataTable
For x = 0 To columnarray.Length - 1
dt.Columns.Add(columnarray(x))
Next

For x = 0 To 10
dt.Columns.Add(x)
Next
' parse the actual file

Do While Not afile.EndOfData
Try
CurrentRecord = afile.ReadFields
dt.LoadDataRow(CurrentRecord, True)

Catch ex As FileIO.MalformedLineException
Stop
End Try
Loop

Return dt
End Function

End Class
Letzte Änderung: 11 Jahre 1 Monat her von Heinz-Bernd Monschau.

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
11 Jahre 1 Monat her - 8 Jahre 10 Monate her #1484 von FlowHeater-Team
FlowHeater-Team antwortete auf Problem beim Einlesen von csv-Dateien
Hallo Herr Monschau,

habe die Beta Version etwas modifiziert, so dass nun auch normale CSV Dateien verarbeitet werden können. Es wird nun solange gelesen bis die Anzahl der definierten CSV Spalten erreicht ist.

Achtung: Ohne CSV Spalten Quotierung muss mit dieser Version das letzte Element mit dem CSV Trennzeichen versehen werden!

Download der Beta Version

DataTable Adapter: Um den DataTable Adapter zu verwenden müssen Sie nicht zwingend C# verwenden, Sie können jedes .NET Assembly einbinden. Wichtig ist nur, wenn Sie Ihren DataTable Adapter erstellen, müssen Sie Ihn für .NET 2.0 kompilieren.

gruß
Robert Stark

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Letzte Änderung: 8 Jahre 10 Monate her von FlowHeater-Team.

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

  • Heinz-Bernd Monschau
  • Autor
  • Offline
  • Benutzer
  • Benutzer
Mehr
11 Jahre 1 Monat her #1485 von Heinz-Bernd Monschau
Heinz-Bernd Monschau antwortete auf Problem beim Einlesen von csv-Dateien
Hallo Herr Strk,

es will nicht so richtif funktionieren. War mit "Achtung: Ohne CSV Spalten Quotierung muss mit dieser Version das letzte Element mit dem CSV Trennzeichen versehen werden!
" nur die Zele mit den Headern oder alle gemeint?

Auch klappt das Einbinden meiner vb-dll in den Tabledataadapter nicht. Fehler lt. Screenshot.



Mit
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim dt As DataTable
dt = clsDTfromCSV.clsDT_creation.FlowHeater_GetDataTable

End Sub

in ein vb-Programm eingebunden wird mir aber eine Datatable erstellt.

Allerings übergeben Sie in Ihrem Bsp. an die Function FlowHeater_GetDataTable einen Parameter (int row), von dem ich nicht weis wozu er da ist.

Gruß
Monschau

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
11 Jahre 1 Monat her - 8 Jahre 10 Monate her #1486 von FlowHeater-Team
FlowHeater-Team antwortete auf Problem beim Einlesen von csv-Dateien
Hallo Herr Monschau,

das mit der letzten CSV Spalte war evtl. etwas missverständlich und nicht sinnvoll. Ich habe die Beta noch etwas angepasst, so werden Zeilenumbrüche in der letzten definierte CSV Spalte ignoriert, d.h. in der letzten CSV Spalte dürfen keine Zeilenumbrüche (ohne Quotierung) vorkommen sonst wird die erste CSV Spalte der nächsten echten Zeile nicht erkannt.

Download der Beta Version

Zum DataTable Adapter )
Der Integer (int rows) Parameter gibt an wie viele Datensätze/Zeilen pro Aufruf geliefert werden sollen.

-1 = Alle Daten liefern = Memory Modus
Bzw. X wenn die Ausführung eingeschränkt wurde, z.B. auf 1000 = ebenfalls Memory Modus
1 = Einen Datensatz liefern = Massendaten Modus (ab Version 3.1.0)

Hinweis: Ab Version 3.1.0 wird auch eine evtl. vorhandene Dispose Funktion in Ihrer Klasse aufgerufen.

gruß
Robert Stark

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Letzte Änderung: 8 Jahre 10 Monate her von FlowHeater-Team.

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Ladezeit der Seite: 0.295 Sekunden
FlowHeater Logo

FlowHeater - Der Daten Spezialist

Effiziente Datenintegration und Transformation mit FlowHeater - Ihre Lösung für nahtlosen Datentransfer.

Rechtliches

Support & Kontakt

Kontaktinformation

Telefon:
0951 / 99339792

E-Mail:
Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein.


Copyright © 2009-2024 by FlowHeater GmbH. Alle Rechte vorbehalten.