csv-Datei mit UNIX zurecht stutzen und Daten in xls-Datei laufend abspeichern

Dieses Thema im Forum "Programmieren allgemein" wurde erstellt von richko, 07.11.2010.

  1. richko

    richko Grünschnabel

    Dabei seit:
    06.11.2010
    Beiträge:
    7
    Zustimmungen:
    0
    Guten Abend,

    nach langem hin- und her und einigen (für mich als Laie) doch sehr zeitaufwändigen Versuchen wende ich mich vertrauensvoll an Mitglieder dieses Forums, die mir ggf weiterhelfen können.

    Zum Sachverhalt:

    Für ein Projekt (Studium) muss ich aus zahlreichen csv-Dateien (mit unterschiedlicher Zeilenanzahl) Daten in eine einzige XLS-Datei bekommen um diese dann u.a. grafisch auswerten und wiederum in einer weiteren XLS-Datei weiter verarbeiten zu können.

    Ich hab den Tipp bekommen, dass man statt mit VBA mit ein paar Zeilen UNIX-Programmcode das ganze doch erheblich vereinfachen kann.

    Das hat jedoch einen Haken -> Ich kenne niemanden (mich eingeschlossen) der sich mit UNIX auskennt… 

    Vllt. kann mir jemand von Euch weiterhelfen???

    Um das ganze zu vereinfachen habe ich hier die Struktur von 2 der besagten csv-Dateien eingefügt. Einmal die Daten aus einer kürzeren und einmal die Daten aus einer längeren.

    Eine Kurze:
    # ExPostInformationGenerationWind
    #
    # FCRT [CreationTimeStamp]
    # AWPL [ConnectingArea] [TimeStamp] [ActualWindEnergy] [PublicationTimeStamp] [ModificationTimeStamp]
    # TELI [LineNumbers]
    #
    FCRT 2009-12-22T16:43:21+01:00
    AWPL 10YDE-EON------1 2009-10-25T23:00:00+01:00 3085.8 2009-11-20T20:19:07+01:00
    AWPL 10YDE-EON------1 2009-10-25T23:15:00+01:00 2921.0 2009-11-20T20:19:07+01:00
    AWPL 10YDE-EON------1 2009-10-25T23:30:00+01:00 2782.2 2009-11-20T20:19:07+01:00
    AWPL 10YDE-EON------1 2009-10-25T23:45:00+01:00 2780.3 2009-11-20T20:19:07+01:00
    TELI 12

    Eine Lange:
    # ExPostInformationGenerationWind
    #
    # FCRT [CreationTimeStamp]
    # AWPL [ConnectingArea] [TimeStamp] [ActualWindEnergy] [PublicationTimeStamp]
    # TELI [LineNumbers]
    #
    FCRT 2009-12-22T16:43:21+01:00
    AWPL 10YDE-ENBW-----N 2009-12-12T03:00:00+01:00 40.0 2009-12-12T06:00:12+01:00
    AWPL 10YDE-ENBW-----N 2009-12-12T03:15:00+01:00 38.6 2009-12-12T06:00:12+01:00
    AWPL 10YDE-ENBW-----N 2009-12-12T03:30:00+01:00 40.4 2009-12-12T06:00:12+01:00
    AWPL 10YDE-ENBW-----N 2009-12-12T03:45:00+01:00 42.9 2009-12-12T06:00:12+01:00
    AWPL 10YDE-EON------1 2009-12-12T03:00:00+01:00 1041.5 2009-12-12T06:00:12+01:00
    AWPL 10YDE-EON------1 2009-12-12T03:15:00+01:00 1101.6 2009-12-12T06:00:12+01:00
    AWPL 10YDE-EON------1 2009-12-12T03:30:00+01:00 1121.3 2009-12-12T06:00:12+01:00
    AWPL 10YDE-EON------1 2009-12-12T03:45:00+01:00 1115.3 2009-12-12T06:00:12+01:00
    AWPL 10YDE-RWENET---I 2009-12-12T03:00:00+01:00 271.0 2009-12-12T06:00:11+01:00
    AWPL 10YDE-RWENET---I 2009-12-12T03:15:00+01:00 291.0 2009-12-12T06:00:11+01:00
    AWPL 10YDE-RWENET---I 2009-12-12T03:30:00+01:00 336.0 2009-12-12T06:00:11+01:00
    AWPL 10YDE-RWENET---I 2009-12-12T03:45:00+01:00 336.0 2009-12-12T06:00:11+01:00
    AWPL 10YDE-VE-------2 2009-12-12T03:00:00+01:00 514.0 2009-12-12T06:00:13+01:00
    AWPL 10YDE-VE-------2 2009-12-12T03:15:00+01:00 542.0 2009-12-12T06:00:13+01:00
    AWPL 10YDE-VE-------2 2009-12-12T03:30:00+01:00 510.0 2009-12-12T06:00:13+01:00
    AWPL 10YDE-VE-------2 2009-12-12T03:45:00+01:00 510.0 2009-12-12T06:00:13+01:00
    TELI 24

    Die Daten auf die es ankommt sind fett markiert. Wie man sieht geht’s bei der Formatierung von Datum und Uhrzeit schon los:

    2009-12-12T03:00:00+01:00

    Die Zelle sollte so getrennt sein, das man damit arbeiten kann; 12.12.2009 (in einer Zelle) und die Uhrzeit 03:00 in einer weiteren Zelle.

    Die Zahlen in der Spalte [ActualWindEnergy] sind ebenfalls alles andere als anwenderfreundlich… ein Komma als Dezimaltrennzeichen
    Wäre wünschenswert…

    Idealfall einer Lösung wäre die, dass automatisiert alle csv-Dateien in einem Verzeichnis (entsprechend der Angaben oben) „beschnitten“ und modifiziert werden, und automatisch in einer xls-datei laufend gespeichert werden, ohne bereits eingelesene Daten zu überschreiben. Das ganze in 3 Spalten: [ConnectingArea], [TimeStamp] und [ActualWindEnergy].

    Wer hat Ideen oder Lösungsvorschläge? Danke vorab.
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. richko

    richko Grünschnabel

    Dabei seit:
    06.11.2010
    Beiträge:
    7
    Zustimmungen:
    0
    Screenshots:

    [​IMG]

    [​IMG]
     
  4. #3 schwedenmann, 07.11.2010
    schwedenmann

    schwedenmann Foren Gott

    Dabei seit:
    18.11.2003
    Beiträge:
    2.635
    Zustimmungen:
    2
    Ort:
    Wegberg
    Hallo

    Das sollte mit Python gehen
    CSV parsen, dann per re zurechtstutzen und dann alles in eienr satei speichern (appand).

    geht aber auch bestimmt per bash oder perl

    mfg
    schwedenmann
     
  5. richko

    richko Grünschnabel

    Dabei seit:
    06.11.2010
    Beiträge:
    7
    Zustimmungen:
    0
    @schwedenmann

    Danke für die prompte Antwort.

    Ich habe den Hinweis bekommen, dass es so per UNIX gehen sollte:

    cat Importdatei
    grep "^AWPL"
    sed "ersetze Punkt durch Komma" und "Formatiere Datum"
    >> Datendatei


    Problem ist nur, dass UNIX für mich ein böhmisches Dorf ist... :hilfe2:

    Kann mir wer den Dreizeiler evtl. so umsetzen dass es auf Knopfdruck geht?

    Das wäre Spitze!
     
  6. zst

    zst Foren As

    Dabei seit:
    06.09.2006
    Beiträge:
    95
    Zustimmungen:
    0
    Hallo richko,
    natürlich sind die Anforderungen umsetzbar, aber hast du überhaupt Zugang zu einem LINUX-Rechner?
    Wäre es für dich nicht einfacher, das Thema in Excel zu lösen?
    Gruß zst
     
  7. richko

    richko Grünschnabel

    Dabei seit:
    06.11.2010
    Beiträge:
    7
    Zustimmungen:
    0
    Hallo zst,

    es ist doch einfacher ein kleines UNIX-Programm unter einer emulierten Linux-Umgebung laufen zu lassen, statt tausende Zeilen Programmcode unter VBA zu schreiben (???).

    Hab schon zahlreiche Versuche in dieser Hinsicht unternommen, aber die Lösung ist alles andere als hilfreich. Zum einen ist es sehr aufwendig, Datum und Uhrzeit zu trennen, zum anderen klappt das ersetzen des Dezimaltrennzeichens (Komma statt Punkt) ebenso wenig, wie das automatisierte importieren und anfügen (ohne überschreiben bestehender Daten) in eine Excel-Datei... :(
     
  8. #7 rikola, 07.11.2010
    Zuletzt bearbeitet: 07.11.2010
    rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Du hast die Syntax ja schon fast hingeschrieben. Zumindest zum Ersetzen kannst Du den Befehl 'tr' benutzen:
    Code:
    grep "^AWPL" deine_datei | tr '.' ','
    
    Fuer die Uhrzeit muesste
    Code:
    sed  -e 's/\(2009\)-\([0-9]\{1,2\}\)-\([0-9]\{1,2\}\)T\([012][0-9]\):\([0-6][0-9]\)\(.*\)/\3.\2.\1\n\4:\5/' test.text 
    
    ein guter Ansatzpunkt sein.
     
  9. #8 zst, 07.11.2010
    Zuletzt bearbeitet: 07.11.2010
    zst

    zst Foren As

    Dabei seit:
    06.09.2006
    Beiträge:
    95
    Zustimmungen:
    0
    Hallo richko,

    wenn du den Code von rikola erweiterst, hast du es ja.
    Code:
    grep "^AWPL" deine-Datei | sed "s/T-/?-/g" | tr '.' ',' | tr '+' ';' | tr 'T' ';' | sed "s/?-
    /T-/g" | tr ' ' ';'  >>GESAMTDATEI.csv
    
    Statt ";" ggf. das richtige Excel-Trennzeichen für die csv-Datei benutzen.
    Und beim Excel-Import ggf. noch das korrekte Datum-Format wählen, falls das nicht automatisch erkannt wird.
    Gruß zst

    ERGEBNIS:
    Code:
    AWPL;10YDE-ENBW-----N;2009-12-12;03:00:00;01:00;40,0;2009-12-12;06:00:12;01:00
    AWPL;10YDE-ENBW-----N;2009-12-12;03:15:00;01:00;38,6;2009-12-12;06:00:12;01:00
    AWPL;10YDE-ENBW-----N;2009-12-12;03:30:00;01:00;40,4;2009-12-12;06:00:12;01:00
    AWPL;10YDE-ENBW-----N;2009-12-12;03:45:00;01:00;42,9;2009-12-12;06:00:12;01:00
    AWPL;10YDE-EON------1;2009-12-12;03:00:00;01:00;1041,5;2009-12-12;06:00:12;01:00
    AWPL;10YDE-EON------1;2009-12-12;03:15:00;01:00;1101,6;2009-12-12;06:00:12;01:00
    AWPL;10YDE-EON------1;2009-12-12;03:30:00;01:00;1121,3;2009-12-12;06:00:12;01:00
    AWPL;10YDE-EON------1;2009-12-12;03:45:00;01:00;1115,3;2009-12-12;06:00:12;01:00
    AWPL;10YDE-RWENET---I;2009-12-12;03:00:00;01:00;271,0;2009-12-12;06:00:11;01:00
    AWPL;10YDE-RWENET---I;2009-12-12;03:15:00;01:00;291,0;2009-12-12;06:00:11;01:00
    AWPL;10YDE-RWENET---I;2009-12-12;03:30:00;01:00;336,0;2009-12-12;06:00:11;01:00
    AWPL;10YDE-RWENET---I;2009-12-12;03:45:00;01:00;336,0;2009-12-12;06:00:11;01:00
    AWPL;10YDE-VE-------2;2009-12-12;03:00:00;01:00;514,0;2009-12-12;06:00:13;01:00
    AWPL;10YDE-VE-------2;2009-12-12;03:15:00;01:00;542,0;2009-12-12;06:00:13;01:00
    AWPL;10YDE-VE-------2;2009-12-12;03:30:00;01:00;510,0;2009-12-12;06:00:13;01:00
    AWPL;10YDE-VE-------2;2009-12-12;03:45:00;01:00;510,0;2009-12-12;06:00:13;01:00
    
     
  10. richko

    richko Grünschnabel

    Dabei seit:
    06.11.2010
    Beiträge:
    7
    Zustimmungen:
    0
    @rikola & zst:

    Danke - Das sieht ja sehr gut aus.

    Wenn ihr mir jetzt noch verratet, mit (bzw. in) welchem Proggi ich aus dem Code ein kleines Programm zimmern kann, bin ich euch noch mehr dankbar.

    Und gegen das Vorhaben, dieses Programm dann in einer emulierten Linux-Umgebung unter Windows auszuführen ist nichts einzuwenden? Mal abgesehen davon, dass Windows im Spiel ist... ;-)
     
  11. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Das einzige Problem, dass eventuell bestehen koennte, ist, dass Zeilenumbrueche in Windows und Unix unterschiedliche Zeichen haben. Wenn Du z.B. unter Cygwin arbeitest, sollte das jedoch kein Problem sein.
    Du kannst eine Datei erstellen 'formatiere_meine_Daten_fuer_excel_um.sh' und die Zeilen dort hinein schreiben:
    Code:
    #!/bin/bash
    grep "^AWPL" $1 | kram-zum-ersetzen-der-Zeichen > temporaere_Datei.text
    sed  -e '... kram-zum-ersetzen-der-Uhrzeit...' temporaere_Datei.text >> gesamtdatei.csv
    
    Durch das '$1' in der ersten Zeile musst Du dann beim Aufrufen der Datei den Namen der Eingabedatei mituebergeben (mittels 'bash formatiere_meine_Daten_fuer_excel_um.sh deine_urspruengliche_Datei')
     
  12. richko

    richko Grünschnabel

    Dabei seit:
    06.11.2010
    Beiträge:
    7
    Zustimmungen:
    0
    Danke noch mal an zst und rikola für die schnelle Hilfe – und auch an alle anderen, die sich Gedanken darüber gemacht haben, wie man dieses Problem lösen könnte.

    Also, ich hab mir Cygwin besorgt und entsprechend installiert.

    Frage:

    Wie könnte man die Schritte wiederum automatisieren, mit einer Datei, die unter windows ausführbar ist, aber durchaus auf Cygwin zugreifen darf???

    In etwa in dieser Reihenfolge:

    ***Ausführende Datei anklicken***

    Cygwin wird automatisch geladen

    Einlesen des Quellcodes von zst und rikola

    (Ausführung)

    ***Ausführung beendet***​

    Wenn ich rikolas letzten Beitrag richtig verstanden habe, geht das ja in die richtige Richtung.

    Allerdings weiß ich nicht, wie der Code des gesamten Programms dann auszusehen hätte. Geschweige denn mit welchem Programm ich wiederum so eine Batch-Datei erstellen kann und wie die Endung dieser auszusehen hätte…

    DANKE für die weitere Hilfe.
     
  13. richko

    richko Grünschnabel

    Dabei seit:
    06.11.2010
    Beiträge:
    7
    Zustimmungen:
    0
    Hallo,

    ich hab ein paar weitere Versuche durchgeführt - allerdings ohne Erfolg :-(

    Hat jemand noch ne Idee?
     
  14. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  15. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    An sich musst Du ja nur eine bat-Datei erzeugen (das Praktische an Windows ist ja, dass die Dateiart mit ihrer Endung festgelegt wird ;->), mit der Du Cygwin aufrufst und dabei das Skript, dass ich im Beitrag 10 angedeutet habe, mit den zugehoerigen Parametern aufrufst. Das ist allerdings zu Windows/Cygwin-spezifisch fuer mich, als dass ich da weiterhelfen koennte.
     
  16. zst

    zst Foren As

    Dabei seit:
    06.09.2006
    Beiträge:
    95
    Zustimmungen:
    0
    Wenn du auf "Cygwin wird automatisch geladen" verzichtest, kannst du das Skript doch einfach im Cygwin aufrufen. Cygwin öffnen ist ja nur ein Doppelklick.
     
Thema:

csv-Datei mit UNIX zurecht stutzen und Daten in xls-Datei laufend abspeichern

Die Seite wird geladen...

csv-Datei mit UNIX zurecht stutzen und Daten in xls-Datei laufend abspeichern - Ähnliche Themen

  1. ca. 1200 PDF-Dateien auslesen und bestimmte Daten in eine CSV-Datei speichern

    ca. 1200 PDF-Dateien auslesen und bestimmte Daten in eine CSV-Datei speichern: Hallo Leute, heute brauche ich mal einen dringenden Rat von Euch. Ich habe hier etwas mehr als 1200 PDF-Dateien (Text), die jeweils ein...
  2. CSV-Datei mit einem Bash-Script erstellen

    CSV-Datei mit einem Bash-Script erstellen: Hallo, Ich stehe unerfreulicherweise vor einem kleinen Problem ^^ Ich soll mittels eines Bash-Scriptes eine CSV-Datei erstellen, die jeweils in...
  3. Per Shell Script CSV-Datei auslesen, anschliessend Dateien umbenennen

    Per Shell Script CSV-Datei auslesen, anschliessend Dateien umbenennen: Hallo Board, ich habe eine CSV datei, in der Name;Vorname;RECNUMBER;AUSBILENDE;Geburtsdatum;Geschlecht;Klasse...
  4. CSV-Datei auslesen und Dateien zuordnen

    CSV-Datei auslesen und Dateien zuordnen: Hallo Zusammen, Meine Aufgabe ist es aus einer CSV-Datei bestimmte Zonen auszulesen und jeder Zone ein xml-File (von tausenden von Files)...
  5. Kompatiblen Drucker für UNIX (HP-UX) 10.2

    Kompatiblen Drucker für UNIX (HP-UX) 10.2: Ich absolviere zur Zeit ein Praktikum in einem mittelständischen Unternehmen (Bereich Maschinenbau). Heute wurde mir die 3D-Messmaschine gezeigt,...