Sie sind nicht angemeldet.

  • Anmelden

1

06.09.2009, 15:46

CSV Datei filtern

Ich möchte eine .csv Datei filtern. Damit meine ich: alle Zeilen, die in einer bestimmten Spalte einen Wert (oder keinen Wert) haben, sollen gelöscht werden. Die Ausgabe sollte am besten in einer seperaten Datei erfolgen.
Kann man das irgendwie mit Excel anstellen? Oder einem Freeware Tool?

Zitat

So einmal im Monat mit den Tieren im Fluß waschen wenn es "dein Herr" befiehlt Ragna?

Icey

2

06.09.2009, 16:02

Naja wäre mit .net ruckzuck erledigt.

3

06.09.2009, 17:25

sollte doch auch mit Excel und Autofilter gehen? zumindest wenn die Bedingung nicht zu komplex is was rausfliegen soll

4

07.09.2009, 12:58

Zitat

Original von GWC_Vegeta
Naja wäre mit .net ruckzuck erledigt.

Großartige Hilfestellung, Dankesehr.



Zitat

Original von [AA]Hawk
sollte doch auch mit Excel und Autofilter gehen? zumindest wenn die Bedingung nicht zu komplex is was rausfliegen soll


Der Autofilter löscht die Zeilen ja nicht raus, sondern zeigt sie bloß nicht mehr an. Den Filter umgekehrt angewendet, alle Zeilen per "entf" gelöscht und dann die restlichen sortiert, so dass die gelöschten Zeilen unten sind. Das als .csv Datei gespeichert ergibt einen Quark (die angebliche CSV Datei wird nicht als solche erkannt, weil er nur ";" zwischen die Daten macht - aber die Texttrennzeichen zB. " " " nicht einfügt. Das ist irgendwie... scheiße.

sylence

Administrator

Beiträge: 1 863

Wohnort: Dresden

Beruf: GER

  • Nachricht senden

5

07.09.2009, 13:01

Kenne CSV nicht, aber laut Wiki einfach ne Textdatei mit einer Zeile pro Datensatz. Nach diesem Beispiel würd ich einfach mit awk und Trennzeichen ";" drübergehen, da hast du direkten Zugriff auf die Spalten.

Edit: also am Beispiel

input.csv

Quellcode

1
2
3
4
Stunde;Montag;Dienstag;Mittwoch;Donnerstag;Freitag
1;Mathe;Deutsch;Englisch;Mathe;Kunst
2;Sport;Französisch;Geschichte;Sport;Geschichte
3;Sport;"Religion ev;kath";Kunst;Deutsch;Kunst


awk drüberlaufen lassen

Quellcode

1
awk -F';' '$2 !~ /Mathe/ && $4 !~ /Geschichte/ { print $0 }' < input.csv > output.csv

Der Befehl entfernt als Beispiel alle Zeilen, in denen in der zweiten Spalte "Mathe" oder in der vierten Spalte "Geschichte" steht. Zwischen den "/" stehen reguläre Ausdrücke, d.h. mit genug Phantasie kann man hier so ziemlich alles tun. :)

output.csv

Quellcode

1
2
Stunde;Montag;Dienstag;Mittwoch;Donnerstag;Freitag
3;Sport;"Religion ev;kath";Kunst;Deutsch;Kunst

6

07.09.2009, 13:56

Zitat

Der Autofilter löscht die Zeilen ja nicht raus, sondern zeigt sie bloß nicht mehr an.


Ergebnisbereich kopieren und in leeres Blatt einfügen ist eine mögliche Lösung dafür

was beim Speichern als *.csv schiefgehen soll kannn ich ned nachvollziehen, sieht bei mir eigentlich gut aus

7

07.09.2009, 15:28

Zitat

Original von ZwerG_Michi_de

Zitat

Original von GWC_Vegeta
Naja wäre mit .net ruckzuck erledigt.

Großartige Hilfestellung, Dankesehr.


Hätte dir das prog in 10 minuten geschrieben, aber ok dann halt nicht.

8

07.09.2009, 19:39

Danke an alle, die konstruktiv geholfen haben.
Das Problem ist, dass Excell die Daten mit ; seperiert, aber die Textteile nicht mit " trennt. Was eigentlich geläufig ist... mit open office hab ichs dann richtig abspeichern können.

9

08.09.2009, 00:39

Excel funktioniert leider bis zum heutigen Tag mit CSV-Dateien nicht besonders gut, vor allem beim Speichern von Zahlen, Uhrzeiten und Währungen. Blöd dabei ist, dass Excel die Standardeinstellungn aus den Regions- und Sprachoptionen in der Systemsteuerung nimmt. Da ist OO viel besser weil man beim Öffnen der Datei immer das Texttrennzeichen (meist Anführungszeichen) und das Feldtrennzeichen(meist Komma) direkt auswählen kann. Es stimmt übrigens nicht, dass ein CSV-Datensatz immer über eine Zeile gehen muss. Er kann auch über mehrere Zeilen gehen, so dass man auch Zeilenumbrüche mit CSV-Dateien abbilden kann, d.h. Text mit Zeilenumbrüchen in eine Spalte schreiben kann. Genau dazu und dazu innerhalb eines Wertes auch das Feldtrennezeichen nutzen zu können ist das Texttrennzeichen ja da.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »ZwerG_DarkMan« (08.09.2009, 00:41)