- Beiträge: 63
 
Problem beim Einlesen von csv-Dateien
- Heinz-Bernd Monschau
 - Autor
 - Offline
 - Benutzer
 - 
            
         
        Weniger
        Mehr
        
            
    
        
            
        
                12 Jahre 2 Wochen 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
    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.
- FlowHeater-Team
 - 
            
				
                                 - Offline
 - Administrator
 - 
            
         
        Weniger
        Mehr
        
            
    
        - Beiträge: 2081
 
            
        
                12 Jahre 1 Woche her         -  9 Jahre 9 Monate her        #1482
         von  FlowHeater-Team
    
    
            
gruß
Robert Stark
    
 	
					
                                	
			
				    
    
            
            
            
            
                                
    
                                                
    
        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
    
            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
Anhänge:
            	      
												
            	
            	
        Letzte Änderung: 9 Jahre 9 Monate her  von FlowHeater-Team.            
            Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Heinz-Bernd Monschau
 - Autor
 - Offline
 - Benutzer
 - 
            
         
        Weniger
        Mehr
        
            
    
        - Beiträge: 63
 
            
        
                12 Jahre 1 Woche her         -  12 Jahre 1 Woche 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
    
    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
Anhänge:
            	      
												
            	
            	
        Letzte Änderung: 12 Jahre 1 Woche her  von Heinz-Bernd Monschau.            
            Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
 - 
            
				
                                 - Offline
 - Administrator
 - 
            
         
        Weniger
        Mehr
        
            
    
        - Beiträge: 2081
 
            
        
                12 Jahre 1 Woche her         -  9 Jahre 9 Monate her        #1484
         von  FlowHeater-Team
    
    
            
gruß
Robert Stark
    
    
            
            
            
            
                                
    
                                                
    
        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.
            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
        Letzte Änderung: 9 Jahre 9 Monate her  von FlowHeater-Team.            
            Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Heinz-Bernd Monschau
 - Autor
 - Offline
 - Benutzer
 - 
            
         
        Weniger
        Mehr
        
            
    
        - Beiträge: 63
 
            
        
                12 Jahre 1 Woche 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
    
    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
Anhänge:
            	      
												
            	
            	Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
 - 
            
				
                                 - Offline
 - Administrator
 - 
            
         
        Weniger
        Mehr
        
            
    
        - Beiträge: 2081
 
            
        
                12 Jahre 1 Woche her         -  9 Jahre 9 Monate her        #1486
         von  FlowHeater-Team
    
    
            
gruß
Robert Stark
    
    
            
            
            
            
                                
    
                                                
    
        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.
            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
        Letzte Änderung: 9 Jahre 9 Monate her  von FlowHeater-Team.            
            Bitte Anmelden oder Registrieren um der Konversation beizutreten.
        Ladezeit der Seite: 0.311 Sekunden