CSV-Konvertierung, Farbbereinigung und Berechnung von Datumsdifferenzen für sc-Spreadsheets
Querverweise:
Inhalt:
 |  |
Ein wunderbares Kleinod für Kommandozeilen-/vi-Adepten ist das Urgestein sc, der Spreadsheet-Calculator, welcher ermöglicht, ohne störende
Wechselgriffe zu Maus und GUI(-Behinderung), sehr schnell ballastfreie Tabellenkalkulationen im Terminal, damit auch via ssh,
zu erstellen und aufgrund des bestechend einfachen, direkt editier- wie scriptbaren ASCII-Dateiformates beliebig zu automatisieren.
Externe eigene Funktionen (ganze Scripte und beliebige *nix-Befehle) lassen sich mit @ext maximal flexibel einbinden und eigenen Programmen/Filtern zur Formatkonvertierung sind
dank des perfekt leserlichen wie verständlichen Formates weder Hürden noch Grenzen gesetzt.
Ich möchte dieses Jahrzehnte alte Programm (ursprünglich des späteren Java-Schöpfers James Gosling) als Geniestreich bezeichnen.
Aus intensiver Einarbeitung in so ziemlich jedes Feature (die Lernkurve ist zugegeben extrem flach (x-Achse Zeit, y-Achse Fortschritt), aber wie alles Schwierige ebenso wertvoll und mit dem Folgenden stark vereinfacht) enstand folgende
persönliche Eigen-Referenz Knowledge-Base
Schwachstelle bisher waren
- wirklich funktionerende Wandlungen von und nach CSV als Austauschformat für den Im-/Export vorwiegend zu OpenDocument-,
aber auch beliebigen anderen Formaten, also GUI-basierten Applikationen.
- die Berechnung von Datumsdifferenzen, also der Anzahl Tage zwischen 2 Datumswerten
Bash-Konverter für sc-Spreadsheets von und nach csv
Die erste Lücke schließen (für deutsche Systemeinstellungen) die beiden Scripte des Downloadbereiches
sehr weitgehend (i.e. ohne Farbformatierungen).
Zu beachten sind
- CSV-Export aus (beispielhaft) LibreOffice
- Endung: csv
- Anhaken: Filtereinstellungen bearbeiten
- Unicode (UTF-8)
- Feldtrenner: ';'
- Texttrenner: '"'
- Abhaken: Zellinhalt wie angezeigt speichern
- Anhaken: Formeln statt berechneter Werte speichern
- Anhaken: Text zwischen Hochkommata ausgeben
- Cave: Normale String dürfen nicht mit "=" beginne, um Formelerkennung zu ermöglichen
- CSV-Import nach (beispielhaft) Libreoffice
- Trennzeichen: ';'
- Texttrennung: '"'
- Abhaken: Werte in Hochkommata als Text (zumindst nicht nötig)
- Abhaken: Erweiterte Zahlenerkennung (zumindest nicht nötig)
- Abhaken: Feldtrenner zusammenfassen
Ein perfekter, für die meisten Fälle jedoch unnötiger Konverter einschließlich vorwiegend optischer Formatwandlungen könnte mit der Lösung aus RODS erstellt werden.
Ausschnitt aus mysc2csv ...

Berechnung von Datumsdifferenzen in sc
Bisher gibt es keine Implementierung in sc , um die Spanne an Tagen zwischen 2 Datumswerten ohne Umweg über EPOC-Sekunden
- Eingabe z.B. in Feld A22 im Datumschnelleingabeformat=2022.12.21 wird automatisch gewandelt zu @dts(2022,12,31) und als EPOC-Sekunden angezeigt
- Eine Darstellung als EPOC-Sekunden kann mit @date(A22,"%F") wiederum als lesbares Datum 2022-12-31 ausgegeben werden
- Die Anzahl Tage zwischen 2 EPOC-Sekundendarstellungen in den Feldern A22 und A20 ergibt sich mit =(A22-A20)/86400
zu berechnen. Mit folgender Variante ist dies jedoch direkt zwischen 2 Datumstrings, z.B. 2022-12-31 und 2022-01-01 möglich.
Grundlagen (cf. hierzu die oben genannte Referenz)
- Jede Zelle kann gleichzeitig sowohl ein Label/einen String als auch einen numerischen Wert haben
- Der Konkatenierungs-Operator für sc ist #
- # ist gleichzeitig auch das Kommentierungszeichen der bash
- Mit der Funktion @ext(arg1,arg2) können wir ein externes Programm oder eigenes Script aufrufen, welches die Differenz zu 2 Datums-Strings berechnet
- @ext(arg1,arg2) darf nicht als Formel mit =@ext, sondern muss als String mit >@ext(arg1,arg2), also ohne Gänsefüßchen eingegeben werden
- arg1 ist dabei der erste Teil der aufrufenden Kommandozeile und muss ein String oder ein Zellbezug hierauf sein
- arg2 ist der zweite Teil und muss ein numerischer Wert oder ein Zellbezug hierauf sein (welcher implizit in einen String gewandelt wird)
- nicht möglich ist, für arg2 gleich einen String (oder einen Zellbezug auf einen String) anzugeben !
- Hieraus ergeben sich sowohl die Schwierigkeit als auch die Lösung des Problemes: Wir konkatenieren das gesamte Kommando, also den Aufruf der Datumsberechnung
in arg1 und verwerfen arg2 durch Kommentierung in arg1 (mit obigem Hinweis zu #)
Im folgenden Beispiel
- verwenden wir das externe Programm dateutils.ddiff aus dem Lubuntu-Paket dateutils
- natürlich ist auch jedes eigene Script möglich (cf. Beispiel in der Referenz)
- fügen Anfangs- und Enddatum in 2 Zellen als Strings und die @ext-Formel ebenfalls als String (ohne Gänsefüßchen) ein
- und beachten, dass die Ausgabe von @ext(...) wiederum ein String ist. Um mit dem Ergebnis weiterzurechnen, müssen wir diesen String folglich zunächst
mit @ston in einen numerischen Wert ändern ...
Abschlussbemerkung:
Formeln bitte nicht mit sc-Bordmitteln kopieren yy => pp; rc; mx => cx,
sondern als reine Texte mit STRG+SHIFT+c kopieren und mit SHIFT+EINFG direkt nach '>' ohne
Gänsefüßchen als reine Texte einfügen und kopierte Zellbezüge manuell editieren. sc würde sonst beim Versuch, die Zellbezüge dieser Formeln
zu aktualisieren, einen Core Dump produzieren. Mit reinem Cut/Paste des Formeltextes funktioniert alles erste Sahne ;-).
Tipps:
- Formeln wie vordem rein textlich kopieren (zuvor automatische Aktualisierung mit CTRL-ta deaktivieren), *.sc mit
vim editieren
, dort Formeln im Batch anpassen und in *.sc automatische Aktualisierung mit CTRL-ta wieder einschalten :-)
- oder in ~/.scrc einen Funktionskey definieren mit z.B.
fkey 4 = "rightstring $$ = (@ext\"dateutils.ddiff \"#A1#\" \"#A2#\" #\",0)"
Nach Einfuegen mit <F4> sind die Fehlermeldung durch dateutils.ddiff (da die Platzhalter A1 und A2
keinen Datumsstring der Form "2020-12-31" aufweisen) zu ignorieren und die Formel durch Editieren des Strings mit E schlicht anzupassen :-)
- $$ in der Key-Definition bezeichnet die aktuelle Zelle (cf. Man-Page unter Programmable Function Keys)
Bereinigung veralteter Farbzuweisungen in sc-Spreadsheets
Im (per vim editierbaren) Dateiformat *.sc werden Farbzuweisungen an Ranges/Zellen in der Reihenfolge ihrer Eingabe abgelegt ...

... , weswegen bei überlappenden Ranges von Zellen der jeweils letzte Eintrag "gewinnt".
Das Script mysccolor des Downloadbereiches bereinigt *.sc-Dateien um solcherart
verdeckte und daher veraltete Farbzuweisungen.
Impressum und Datenschutzerklärung