Dynamischer Daten Import / Export

datenbank

weil Einfach - produktiver ist
Mit der Freeware Version können bis zu 10.000 Datensätze verarbeitet werden!
Willkommen, Gast
Benutzername: Passwort: Angemeldet bleiben:
Willkommen im FlowHeater Support Forum!

Hier werden Fragen zum Umgang mit dem FlowHeater beantwortet.

THEMA: Problem beim Einlesen von csv-Dateien

Problem beim Einlesen von csv-Dateien 3 Jahre 1 Monat her #1480

  • Heinz-Bernd Monschau
  • Heinz-Bernd Monschaus Avatar
  • Offline
  • Senior Member
  • Beiträge: 63
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
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Problem beim Einlesen von csv-Dateien 3 Jahre 1 Monat her #1482

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Administrator
  • Beiträge: 1099
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: 10 Monate 3 Wochen her von FlowHeater-Team.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Problem beim Einlesen von csv-Dateien 3 Jahre 1 Monat her #1483

  • Heinz-Bernd Monschau
  • Heinz-Bernd Monschaus Avatar
  • Offline
  • Senior Member
  • Beiträge: 63
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: 3 Jahre 1 Monat her von Heinz-Bernd Monschau.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Problem beim Einlesen von csv-Dateien 3 Jahre 1 Monat her #1484

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Administrator
  • Beiträge: 1099
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: 10 Monate 3 Wochen her von FlowHeater-Team.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Problem beim Einlesen von csv-Dateien 3 Jahre 1 Monat her #1485

  • Heinz-Bernd Monschau
  • Heinz-Bernd Monschaus Avatar
  • Offline
  • Senior Member
  • Beiträge: 63
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
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Problem beim Einlesen von csv-Dateien 3 Jahre 1 Monat her #1486

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Administrator
  • Beiträge: 1099
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: 10 Monate 3 Wochen her von FlowHeater-Team.
Der Administrator hat öffentliche Schreibrechte deaktiviert.
Moderatoren: FlowHeater-Team
Ladezeit der Seite: 0.088 Sekunden