[GastForen Programmierung/Entwicklung AppleScript CSV-Datei Splitten

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

CSV-Datei Splitten

Gruiny
Beiträge gesamt: 6

11. Feb 2020, 19:14
Beitrag # 1 von 6
Bewertung:
(28225 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Zusammen
Habe mal einwenig geggoglet und bin mir sicher das wenn mir hier jemand helfen kann.

Habe eine CSV-Datei mit diversen Zeilen in verschidenen Währungen und würde jetzt gerne diese Datei aufteilen / sortieren anhand einer Spalte die jeweils die Währung angiebt (EUR / CHF / USD) also das ich schlussendlich 3 CSV Dateien aus der einen Erhalte.
Daher das ich jeweils die 1 Zeile in jeder Datei und dann alle EUR in einer Datei alle CHF in einer usw.

des weiteren müsste ich in der einen Spalte die , aus dem Betrag ersetzen mit '

VIELEN DANK BEREITS für eure Hilfe
X

CSV-Datei Splitten

Hans Haesler
  
Beiträge gesamt: 5826

11. Feb 2020, 19:39
Beitrag # 2 von 6
Beitrag ID: #574041
Bewertung:
(28214 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Gruiny,

herzlich willkommen im AppleScript-Forum auf HilfDirSelbst! :-)

Würdest Du bitte eine Musterdatei zur Verfügung stellen? Irgendwo hochladen. Du kannst sie mir auch per E-Mail zustellen (die Adresse ist in meinem Profil).

Klar, ich könnte selber eine basteln. Aber mit Deiner Datei wäre sichergestellt, dass eine vorgeschlagene Lösung auch funktionieren wird.

Gruss, Hans


als Antwort auf: [#574039]

CSV-Datei Splitten

Hans Haesler
  
Beiträge gesamt: 5826

12. Feb 2020, 20:46
Beitrag # 3 von 6
Beitrag ID: #574071
Bewertung:
(28151 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Abend Gruiny,

die erste Version des Scripts habe ich Dir per "WeTransfer" zugestellt.

Zum Gebrauch: Das Script kann ab Script-Editor gestartet werden.
Aber einfacher ist, es im Benutzer-Ordner "Scripts" unterzubringen, welcher sich in der Bibliothek befindet.
Dann kann das Script über das Script-Icon in der Menüleiste gestartet werden.

Es macht keinen grossen Sinn, den Code hier zu veröffentlichen, weil kaum jemand genau diese Anforderung hat.
Zudem müsste er über die Original-CSV-Datei verfügen, deren Inhalt vertraulich ist.

Nur soviel sei verraten: Sie enthält weltrekordverdächtige einundvierzig Spalten! :-)

Dennoch nachstehend eine Outline der Aktionen:
01. Der Anwender wird aufgefordert, eine CSV-Datei zu wählen.
02. Einer Variablen wird der Dateipfad zugewiesen.
03. Das Script prüft, ob es eine CSV-Datei ist: Endet der Pfad mit ".csv"?
04. Falls nicht, wird der Anwender informiert und die Ausführung abgebrochen.
05. Der Basispfad wird gespeichert (Dateipfad ohne ".csv").
06. Die CSV-Datei wird in eine Variable eingelesen, mit dem Zusatz 'as «class utf8»' (weil mit UTF-8 formatiert).
07. Die Kopfzeile wird gespeichert, damit sie in jeder neuen Datei eingefügt werden kann.
08. Drei separate Listen (für die drei Währungen) werden initialisiert, mit der Kopfzeile als erstes Element.
09. Der String der Absätze wird in eine Liste verwandelt, mithilfe des MS-DOS-Absatztrenners 'CRLF'.
10. Ein Schleife geht die Absätze durch; bei jedem wird geprüft, ob er "CHF", "EUR" oder "USD" enthält.
11. Je nach Fund wird der aktuelle Absatz der entsprechenden Liste angefügt.
12. Die drei Listen werden separat in Strings verwandelt.
13. Bei jedem String wird die Anzahl Absätze geprüft. Ist diese grösser als eins, wird der neue Pfad zusammengesetzt.
14. Für die Schweizer Franken, z.B., wird ganz einfach "_CHF.csv" an den Basispfad gehängt.
15. Der entsprechende String und der neue Pfad werden zum Handler 'writeFile()' gesandt.
16. Der String wird in die neue Datei geschrieben.
17. Dem Anwender wird der Dialog "Fertig." gezeigt, welcher nach zwei Sekunden entschwindet.

Die drei neuen Dateien werden im selben Order erzeugt, welcher die gewählte CSV-Datei enthält.
Am besten steckt man weitere Original-Dateien in einen eigenen Ordner, damit nichts überschrieben wird.

*****
Noch nicht gelöst ist das Ersetzen der Kommas durch Apostrophe (oder Punkte?).

Warum? Weil für die CSV-Datei vorsichtshalber das Komma als Trenner gewählt wurde (anstelle des üblichen Strichpunkts), können die Kommas der Summen nicht auf einfache Weise durch ein anderes Zeichen ersetzt werden.
Ich werde morgen versuchen, das Ersetzen mithilfe von GREP-Mustern zu schaffen. Mit JavaScript wäre das kein Problem. Aber das Basis-AppleScript ist nicht dafür gerüstet.

Gruss, Hans


als Antwort auf: [#574039]

CSV-Datei Splitten

Hans Haesler
  
Beiträge gesamt: 5826

14. Feb 2020, 08:05
Beitrag # 4 von 6
Beitrag ID: #574090
Bewertung:
(28101 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Scripter,

das Script funktionierte bei mir wie erwartet. Aber Gruiny gab eine Fehlermeldung durch. Ich versuchte erfolglos, dem Problem auf die Spur zu kommen.

Schliesslich machte ich drei kleine Testscripts, in der Hoffnung, etwas über die Ursache zu erfahren. Das Ergebnis ist erstaunlich. Dieselbe Datei wird bei Gruiny als Mac-formatiert erkannt, aber bei mir ist sie im MS-DOS-Format (= CRLF).

Ins gleiche Archiv mit den Testscripts – also bevor das Testergebnis bekannt war – steckte ich eine abgeänderte Version des Originals, in welcher das Erzeugen der Liste der Absätze (der Punkt 09. in der obigen Aufzählung) in zwei Schritten gemacht wird.

Und siehe da: Das vierte Script funktionierte bei Gruiny wie erwartet. Jetzt bleibt noch das Ersetzen des Dezimal-Trenner. Das hatte ich schon am Dienstag spätabends mithilfe der "RegexAndStuffLib" geschafft. Gruiny muss mir nur noch durchgeben, durch welches Zeichen das Komma ersetzt werden soll.

Gruss, Hans


als Antwort auf: [#574039]

CSV-Datei Splitten

Hans Haesler
  
Beiträge gesamt: 5826

14. Feb 2020, 22:06
Beitrag # 5 von 6
Beitrag ID: #574115
Bewertung:
(28072 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Scripter,

so ... die definitive Version des Scripts ist nun mit dem Suchen/Ersetzen mithilfe der RegEx-Bibliothek ausgestattet.
Gruiny hat es problemlos geschafft, diese Hilfsdatei am richtigen Ort unterzubringen. Und das Ersetzen der Dezimaltrenner Komma durch einen Punkt funktioniert wie gewünscht.

Weil das Suchen und Ersetzen eines Zeichens mit definierten GREP-Mustern von allgemeinem Interesse ist, nachfolgend die entsprechenden Zeilen:

Der Variablen 'tmpString' wird zu Beginn der Inhalt der gewählten CSV-Datei zugewiesen:

Code
# die CSV-Datei wählen lassen  
set csvPath to (choose file with prompt "Eine CSV-Datei auswählen:") as Unicode text

# die CSV-Datei in eine Variable einlesen
set tmpString to read file csvPath as «class utf8»

Und das braucht es, um die Kommas durch Punkte zu ersetzen:

Code
# das Suchen/Ersetzen vorbereiten 
use AppleScript version "2.7" --> macOS 10.13 oder neuer
use scripting additions
use script "RegexAndStuffLib" version "1.0.5" --> /Library/Script Libraries/RegexAndStuffLib.scptd

# die Suchen/Ersetzen-Muster
set searchPattern to "(\\d),(\\d\\d)"
set replaceTemplate to "$1.$2"

# die Dezimal-Trenner-Kommas durch Punkte ersetzen
set tmpString to regex change tmpString search pattern searchPattern replace template replaceTemplate

Das Suchen-Muster bedeutet: Finde eine beliebige Ziffer, gefolgt von einem Komma, gefolgt von zwei beliebigen Ziffern.
Die Klammern bilden die Gruppen eins und zwei.

Im Ersetzen-Muster stehen die beiden Dollarzeichen, gefolgt von der Nummer der Gruppe. Deren Inhalt wird unverändert übernommen. Dazwischen der Punkt, welcher das Komma ersetzen wird.

Gruss, Hans


als Antwort auf: [#574041]

CSV-Datei Splitten

Gruiny
Beiträge gesamt: 6

19. Feb 2020, 12:03
Beitrag # 6 von 6
Beitrag ID: #574193
Bewertung:
(27928 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Vielen Vielen Vielen Dank an Hans!!!! Es ist genial das Script funktioniert perfekt!

Dieses Forum ist absolut der Hammer. Bin begeister wie schnell und einfach mir hier geholfen wurde.

Eine Spende wird noch folgen da solch ein Forum noch lange bestehen sollte!!!

Liebe grüsse


als Antwort auf: [#574115]
X