Entwickler-Ecke

IO, XML und Registry - mehrere CSV-Dateien zu einer zusammenführen


Kleinohr - Mo 17.05.10 21:41
Titel: mehrere CSV-Dateien zu einer zusammenführen
Guten Nabend Zusammen

Nach einer 3 stündigen suche im Netz wende bzw. nerve ich mich mal wieder euch. Habe folgendes Problem. Habe mir mehrere CSV-Dateien erstellt die Spaltenanzahl und Spaltenüberschriften sind in allen Dateien gleich. Das einzige was sich ändert ist der Inhalt der einzelnen Zeilen. Dies überschneiden sich jedoch auch nicht. Jetzt will ich die Dateien zusammenfassen wie im folgenden Beispiel

Datei 1
Spalte A SpalteB SpalteC
NR. x[m] y[m]
1001 5 4
1002 4 4

Datei2
Spalte A SpalteB SpalteC
NR. x[m] y[m]
11001 5 4
11002 4 4

zusammengefasste Datei

Spalte A SpalteB SpalteC
NR. x[m] y[m]
1001 5 4
1002 4 4
11001 5 4
11002 4 4

Könnt Ihr mir da weiter helfen wie ich es am besten anstelle. Vielleicht auch mit einem Codeschnipsel.

mfg
Kleinohr


Moderiert von user profile iconChristian S.: Topic aus C# - Die Sprache verschoben am Mo 17.05.2010 um 21:51


Christian S. - Mo 17.05.10 21:51

Hallo!

Was hast Du denn bisher probiert und wo kommst Du nicht weiter? Du musst doch nur die Dateien nach einander auslesen und die Zeilen jeweils in eine (einzige) andere Datei schreiben.

Je nach Ansatz wären hier die File-Klasse sinnvoll oder auch die StreamWriter und StreamReader-Klassen.

Grüße
Christian


Kleinohr - Mo 17.05.10 21:59

mir felht gerade ein Ansatz. Hatte mir die File-Klasse schon angenguckt und was probiert funzte aber nicht.

Am liebsten möchte ich meine 8 CSV-Dateien ganz einfach zu einer neunten zusammenfassen.


Christian S. - Mo 17.05.10 22:11

user profile iconKleinohr hat folgendes geschrieben Zum zitierten Posting springen:
Hatte mir die File-Klasse schon angenguckt und was probiert funzte aber nicht.

Beschreibe das mal detaillierter. Was hast Du versucht und inwiefern hat es nicht funktioniert. Da kann man dann bestimmt schon was draus machen :-)


Kleinohr - Mo 17.05.10 22:48

muss erstmal neu überlegen habe es gelöscht. habe gerade noch einen tipp bekommen.

Eingabedateien zum lesen öffnen, die erste zwei Zeilen überlesen. In Zieldatei zum schreiben öffnen die ersten zwei Zeilen anlegen, dann die Inhalte aus den Eingabedateien zeilenweise reinschreiben.

Muss mich jetzt damit erstmal auseinandersetzen welche befehle es dafür gibt. und wie ich sie verwende.


Christian S. - Mo 17.05.10 22:55

user profile iconKleinohr hat folgendes geschrieben Zum zitierten Posting springen:
Muss mich jetzt damit erstmal auseinandersetzen welche befehle es dafür gibt. und wie ich sie verwende.
Dafür sollten die oben genannten Klassen ausreichen!


Kleinohr - Mo 17.05.10 22:56

weiß nur nicht wie man die ersten zwei Zeilen überlesen kann.


Christian S. - Mo 17.05.10 22:59

Also entweder, Du liest mit File.ReadAllLines alle Zeilen einer Datei in Array und liest das erst ab Index 2 (also der dritten Zeile).

Oder Du liest die Datei Zeilenweise, z.B mit dem StreamReader. Dann liest Du die ersten zwei Zeilen zwar ein, ignorierst aber einfach, was Du da einliest. Erst ab Zeile 3 schreibst Du dann mit dem StreamWriter in die zu erzeugende Datei.


Kleinohr - Mo 17.05.10 23:26

boah ich raffe es einfach nicht. gibt es einen guten link für ein tutorial oder beispiel.
vielleicht sollte ich auch ne nacht drüber schlafen.

besten dank aber für die viele tipps


Christian S. - Mo 17.05.10 23:34

Zeig doch einfach mal, was Du versuchst und wo es hakt! :-)

Für Dein spezifisches Problem wird es sicherlich kein Tutorial geben. Allerdings kann man das nur schwer sagen, weil ich nicht weiß, wo Du nicht weiter kommst!


Kleinohr - Mo 17.05.10 23:38

verschieben wir auf morgen wenn es geht.

gehe jetzt erstmal schlafen und dabei überlegen.

tschöö


danielf - Di 18.05.10 07:55

Hallo,

was machst du den später mit den erstellen Datei? Solltest du vlt. die Datei nicht gleich strukturierter (als CSV, wie zum Beispiel Xml) erzeugen?

Ansonsten gilt der Ansatz von Christian. Öffne eine Ausgabe Datei und danach jede einzelne Eingabedatei. Übertrage nur bei der ersten die Zeile 1+2, bei den anderen ignorieren.

Dennoch gilt desto mehr Background-Wissen wir haben desto gezielter können wir dir helfen. Die Eingabedateien hast du ja schon kurz vorgestellt. Dein Code wäre nun interessant. Was mich noch interessiert ist eben was du später mit der Datei machen willst. Ob es wirklich sinnvoll ist eine neue Datei zu erstellen und welches Format und ... :)

bis später

Gruß


JüTho - Di 18.05.10 08:49

Die Tipps sind doch mehr als ausreichend (zumal die SDK-Doku/MSDN/Hilfe viele Beispiele enthält). Und dort [http://entwickler-forum.de/showthread.php?goto=newpost&t=61884] hat er die gleichen Vorschläge mit anderer Formulierung nochmal bekommen. Das sollte genügen. Jürgen


DevInet - Do 27.05.10 15:45

Hi.

Bin zwar neu hier aber ich geb auch mal meinen Senf dazu.

Am einfachsten machste es dir, wenn du mit streamreader und streamwriter, in kombination mit ner listbox arbeitest. musst nur zwei buttons ins frontend packen. mit dem einen liest du den Inhalt der csv-dateien in die Listbox ein und mit dem anderen schreibst du den kompletten listbox-inhalt in die neue datei.

mfg DevInet


Christian S. - Do 27.05.10 17:12

Und wieso braucht man dafür eine grafische Komponente wie die Listbox? Die ist dazu schlicht nicht da und es ist falsch, sie in dem Zusammenhang so zu verwenden.


DevInet - Fr 28.05.10 11:13

Und wieso ist es falsch? Ist doch wohl seine Sache, ob er das über nen frontend oder nen Shellscript macht. Ausserdem kann er so die daten auf die richtige anordnung kontrollieren. Klar kann man das auch als Shellscript machen. Ich kann dir dazu auch nen Perlscript basteln, aber für den Anfang ist denk ich ne grafische Oberfläche besser geeignet.


Christian S. - Fr 28.05.10 11:18

Er will eine grafische Komponente zur (temporären) Datenhaltung benutzen. Das ist falsch. Dazu gibt es List<T> o. ä.. Die GUI ist nun mal nur zur Anzeige von Daten da und zu nix anderem.


DevInet - Fr 28.05.10 11:59

Wenn man die Daten nur temporär vorhalten will und nichts grafisch darstellen will, dann braucht man "überhaupt keine" gui(grafische Komponente). Dann kann man das auch einfach in nen shellscript verbannen. Ausserdem kann er die Listbox auch einfach verstecken.

PS: Wenn du unbedingt willst, dass er List "o.ä" nutzt dann schreib ihm doch gleich nen schönes kleines shellscript. Da braucht er dann gar keine GUI mehr.
Nur weil du es nicht so machst, heisst es nicht das alle anderen es so machen müssen wie du.


Mfg DevInet


Christian S. - Fr 28.05.10 12:19

user profile iconDevInet hat folgendes geschrieben Zum zitierten Posting springen:
Wenn man die Daten nur temporär vorhalten will und nichts grafisch darstellen will, dann braucht man "überhaupt keine" gui(grafische Komponente). Dann kann man das auch einfach in nen shellscript verbannen.

Richtig. Aber es geht hier nicht drum, ob er die Daten anzeigen will oder nicht.


user profile iconDevInet hat folgendes geschrieben Zum zitierten Posting springen:
Ausserdem kann er die Listbox auch einfach verstecken.

Nicht Dein ernst, oder? Anstatt also die Klassen zu benutzen, die dafür gemacht sind und wesentlich weniger Ressourcen verbrauchen, nimmt man eine grafische Komponente, die noch dazu nicht typensicher speichert, und versteckt die dann? Klar, das ist echt super :autsch:

user profile iconDevInet hat folgendes geschrieben Zum zitierten Posting springen:
PS: Wenn du unbedingt willst, dass er List "o.ä" nutzt dann schreib ihm doch gleich nen schönes kleines shellscript. Da braucht er dann gar keine GUI mehr.

Ich habe nicht gesagt, dass er keine GUI braucht. Eine Trennung von Datenhaltung und Datenanzeige ist das, worauf ich hinaus will.

user profile iconDevInet hat folgendes geschrieben Zum zitierten Posting springen:
Nur weil du es nicht so machst, heisst es nicht das alle anderen es so machen müssen wie du.
Eine saubere Trennung von Programmlogik und Anzeige ist keine Geschmackssache.


DevInet - Mo 31.05.10 11:46

@Christian S.: Sorry das ich dich so angegangen bin. Hab dich ehrlich gesagt vorher nicht ganz verstanden. Jetzt ist mir dabei einiges klarer geworden.

Mfg DevInet


Christian S. - Mo 31.05.10 13:31

Alles klar :beer: