Oc: Unterschied zwischen den Versionen

Aus OrgaMon Wiki
Zur Navigation springen Zur Suche springen
 
(101 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Oc steht für <b>O</b>rientation <b>C</b>onvert. Es ist ein Open-Source Tool, das Daten in horizontaler Ausrichtung (z.B. ein Text) in vertikale Spalten ausrichtet. Auch die Übertragung von einzelnen xls Spalten in andere ist möglich. ".txt", ".csv" und ".xls" wird nativ unterstützt.<br>
Oc steht für <b>O</b>rientation <b>C</b>onvert. Es ist ein Open-Source Tool, das z.B. Daten in horizontaler Ausrichtung (z.B. ein Text) in vertikale Spalten ausrichtet. Auch die Übertragung von einzelnen xls Spalten in andere ist möglich. ".txt", ".csv" und ".xls" wird nativ unterstützt. Inzwischen sind die Fähigkeiten von Oc recht umfangreich<br>
 
{|class="wikitable"
|+
!Bezeichnung||Modus||Beschreibung
|-
|Michelbach||1||undokumentiert
|-
|&nbsp;||2||nicht verwendet
|-
|xls2xls||3||xls+Vorlage.xls -> xls
|-
|xls2csv||4||xls+[Fixed-Formats.ini] -> csv
|-
|KK20||5||txt -> csv
|-
|KK22||6||xls -> txt
|-
|csv||7||undokumentiert
|-
|txt||8||undokumentiert
|-
|xml2csv||9||.xml + Mapping.txt -> .csv
|-
|tab2csv||10||.tab + Mapping.txt -> .csv
|-
|xls2idoc||11||.xls + IDOC.Mappings.ini -> .idoc
|-
|xls2Argos2007||12||xls -> Argos-2007 XML (mit XML.BLA)
|-
|xls2ml||13||xls+Vorlage.(ht)ml -> html /xml
|-
|enBW||14||undokumentiert
|-
|Datev||15||xls+Datev.xls -> .xls
|-
|xsd||16||Prüfe xml Datei gegen eine "Schema.xsd"
|-
|dtd||17||Prüfe xml Datei gegen eine "*.dtd"
|-
|xls2flood||18||xls+Fixed-Flood.ini -> Auftrag füllen
|-
|csvMap||19||.csv Datei mit Mappings nach -> -mapped.csv Datei
|-
|xls2gm||20||GM
|-
|xls2html||21||xls+Vorlage.html -> multible html
|-
|Huffman||22||.huff -> .pas
|-
|xls2xml||23||xls+Vorlage.xml -> multible xml
|-
|xls2Argos2018||24||xls -> Argos-2018 XML (mit XML-2018.BLA)
|-
|}
 
 


== Download ==
== Download ==
Zeile 5: Zeile 61:
Die Open-Source Anwendung incl. Quelltexte kann man hier downloaden:
Die Open-Source Anwendung incl. Quelltexte kann man hier downloaden:


http://cargobay.orgamon.de/Oc.html
https://cargobay.orgamon.org/Oc.html


== .txt nach .xls Konverter ==
== .txt nach .xls Konverter ==


<b>Quelle ".txt":</b> Trenner ist hier " - "<br>
<b>Quelle ".txt":</b> Trenner ist hier " - "<br>
== .xls nach .html Konverter ==
* hier wird für jede einzelne Zeile der .xls ein oder mehrere .html Dokument(e) erstellt
* Als Template wird zunächst immer die Datei Vorlage.html sowie Vorlage.unmoeglich.html verwendet, für die einzelen Dokumente möglicherweise weitere Vorlagen
* Beschreibung aller Möglichkeiten [[HTML_-_Vorlagen|hier]]
#
# Folgende Blöcke können definiert werden
#
<i>Zählerart</i>
AUFTRAG
UNMOEGLICH
VORGEZOGEN
=== Fotos ===
* In der Vorlage.html sowie in Vorlage.unmoeglich.html gibt man mit <code>&lt;!-- set Anlagenverzeichnis J:\Pfad\Fotos\firma\ --&gt;</code>
* Alternativ in der Spalte "Anlagenverzeichnis"
=== Ausgabe von mehreren Dateien pro Zeile ===
In den Intern-Feldern muss es in jedem Datensatz jetzt ein Feld
Vorlagen=
geben. Will man die Mehr-Dateien-Fähigkeit nicht, dann kann man das Feld weglassen. Ok, Da muss was drin sein, sonst wird die Meldung verhindert (Ich habe Vorlagen! in der Spaltenreihenfolge) . Damit nicht was rausgeht, was noch gar nicht einsortiert ist.
OK, im Falle eines reinen Anschluss-PDF muss man reinschreiben:
Vorlagen=Anschluss
Wenn man beides haben will muss man reinschreiben:
Vorlagen=Anschluss;Armatur
ok - er belichtet also mehrere PDF. Für jedes Wort, das man so in Vorlagen= verwendet muss es eine Datei geben: Hier also:
Vorlage-Anschluss.html
Vorlage-Armatur.html
Eine normale/ zentrale "Vorlage.html" muss es aber dennoch als Platzhalter geben, wo man z.B. den Foto-Pfad definieren muss.


== .xls nach .xml Konverter ==
== .xls nach .xml Konverter ==
=== Spalte "Quelle" ===
In dieser Spalte kann der Dateiname einer XML-Datei angegeben werden, der als Referenzdatei für weitere Spalten benutzt werden kann. Dabei haben folgende Spalten weitere Bedeutungen
* <code>Referenz</code> der Tag der gesucht wird
* <code>Referenz-Prefix</code> dessen Prefix
* <code>Referenz-Postfix</code> dessen Postfix
* <code>Referenz-Numerisch</code> JA|NEIN Feld


=== ohne Vorlage.ml ===
=== ohne Vorlage.ml ===
Zeile 19: Zeile 126:
=== mit Vorlage.ml ===
=== mit Vorlage.ml ===


==== vordefinierte Variable ====
~AusgabeDatum~
~AusgabeTAN~
~AusgabeUhr~
~Anlagenverzeichnis~
==== Verarbeitungs/Formatier Zusätze ====
das XML-Gerüst wird in der Vorlage.ml gespeichert. Mit  
das XML-Gerüst wird in der Vorlage.ml gespeichert. Mit  


  ~VariablenName~[ { "!" ["Komma", "Boolean", "Null8", "Zeit", "^Y"] }
  ~VariablenName~[ { "!" ["Komma", "Boolean", "Null<b><i>n</i></b>", "Zeit", "^Y"] }


können Werte in dieses Gerüst eingesetzt werden. Der Wert für VariablenName wird aus der Spaltenüberschrift "VaraiblenName" entnommen.
können Werte in dieses Gerüst eingesetzt werden. Der Wert für VariablenName wird aus der Spaltenüberschrift "VaraiblenName" entnommen.


* <code>!Komma</code> eine Zahl wird immer als Kommazahl ausgegeben
* <code>!1</code> nur der erste Teil einer ","-speparierten Liste
* <code>!Komma</code> eine Zahl wird immer als ISO-Kommazahl ausgegeben (mit "." als Komma Symbol)
* <code>!EchtesKomma</code> eine Zahl wird immer als deutsche Kommazahl ausgegeben (mit "," als Komma Symbol)
* <code>!Boolean</code> eines aus 'xXyYjJ1' wird in true umgesetzt, Rest in false
* <code>!Boolean</code> eines aus 'xXyYjJ1' wird in true umgesetzt, Rest in false
* <code>!Null8</code> Zahl wird immer 8 stellig ausgegebn, ggf wird mit führenden '0'en aufgefüllt
* <code>!Null<b><i>n</i></b></code> z.B. <code>!Null<b>8</b></code> Zahl wird immer 8 stellig ausgegebn, ggf wird mit führenden '0'en aufgefüllt. Für <b><i>n</i></b> kann man die Ziffern 1 bis 9 oder A (für 10) bis F (für 15) einsetzen.
* <code>!Zeit</code> Zeitangabe wird als HH:MM:SS ausgegeben
* <code>!Zeit</code> Zeitangabe wird als HH:MM:SS ausgegeben
* <code>!^Y</code> Zeile wird gelöscht sobald der Variablenwert leer ist
* <code>!ZeitDefault</code> wie Zeit, jedoch wenn keine Zeit angegeben ist wird 12:00:00 ausgegeben
* <code>!Datum</code> Datum im Format JJJJ-MM-TT
* <code>!Zeitstempel</code> Datum+Uhrzeit wird als 2015-05-11T10:02:13 ausgegeben. "JJJJ-MM-TT\THH:MM:SS"
* <code>!^E</code> Der (tag)(/tag) wird in (tag/) verwandelt sobald der Wert leer ist (in Erinnerung an Empty Element)
* <code>!^T</code> Zeile wird von doppelten Blanks entledigt (in Erinnerung an die Funktion Trim)
* <code>!^Y</code> Zeile wird gelöscht sobald der Variablenwert leer ist (in Erinnerung an <Strg>&<Y> = "Delete Line")
* <code>!Base64</code> die als Dateinamen definierte Datei wird base64 codiert eingefügt


==== automatisch generierte Spalten ====
~WechselDatum_2~ WechselDatum im Format JJJJ-MM-TT
~WechselDatum_3~ WechselDatum im Format JJJJMMTT
~WechselZeit_2~ WechselUhrzeit im Format HH:MM:SS
==== Prüfung der Ausgabe ====


Eine Datei Schema.xsd kann zur Schema-Prüfung bereitgestellte werden.
Eine Datei Schema.xsd kann zur Schema-Prüfung bereitgestellte werden.
Zeile 49: Zeile 180:
  // default = ;
  // default = ;
  Separator=|   
  Separator=|   
 
  // Kann die Ausgabe der ersten Zeile (oft Kopfzeile) verhindern
  // Kann die Ausgabe der ersten Zeile (oft Kopfzeile) verhindern
  //  
  //  
Zeile 59: Zeile 190:
  // default = Unbegrenzt
  // default = Unbegrenzt
  MaxColumn=76
  MaxColumn=76
// Beachtet, wie Excel die Zellen darstellt
//
// default = NEIN
RespectFormats=JA
// Gibt zu Testzwecken nicht den Wert der Zelle aus,
// sondern deren Excel-Formatierungsstring, also
// z.B. "DD.MM.YYYY"
//
// default = NEIN
OnlyFormats=JA
// Einfluss auf den Ausgabe-Dateinamen
//
// default=<Eingabe-Dateinamen>.csv
//
// '*' Es kann im Dateinamen ein '*' angegeben werden
//    um die Meldungsnummer (und alle anderen Ziffern) im Dateinamen zu erhalten:
//
//    FileName=Meldung_*.txt
//
// '+' Es kann für den Dateinamen weiterhin Bestandteile aus
//    dem alten Dateinamen übernommen werden, dabei werden
//    Bruchstücke, die im alten Dateinamen erkannt werden
//    durch neue Worte ersetzt. An der Stelle '+' wird dann
//    der neue Text ausgegeben.
//
//    FileName=+Daten_*.csv
//
FileName=foo.csv
// Mehr Optionen für die '+' Textersetzung
//
// default=.unmoeglich|u
//
// Semikolon spepariert können Namensbruchstücke des originalen
// Dateinamens ersetzt werden durch kürzere oder andere Texte
// Dabei muss die Syntax Bruchstück|NeuerText eingehalten werden.
//
FileNamePlus=.unmoeglich|u;Zaehlerdaten|z;Konvertiert|k
// Eine Referenz-Datei bereithalten
//
// default=
Auftrag=
AuftragReferenzSpalten=


==== Feld-Formatierungen ====
==== Feld-Formatierungen ====
* Bei der Angabe des Spaltennamens, kann die Spaltenüberschrift
<Spaltenname1>=<Formatierung>
* aber auch die Spalten-Nummer (beginnend links bei "1") verwendet werden
"Column_"<NummerDerSpalte>=<Formatierung>


* Ausgabe mit 5 Nachkommastellen und "." als Komma
* Ausgabe mit 5 Nachkommastellen und "." als Komma


<code>
   <Feldname1>=#.#####
   <Feldname1>=#.#####
   <Feldname2>=#.#####
   <Feldname2>=#.#####
</code>
 
* Ausgabe mit führenden Nullen auffüllen
 
// n gibt als Ganzzahl die Gesamtlänge an
<Feldname1>=0n


* Datum in ein gewisses Format zwingen
* Datum in ein gewisses Format zwingen


<code>
  <Feldname1>=TTMMJJ
  <Feldname1>=TTMMJJ
</code>
<Feldname2>=JJJJ
 
* Uhrzeit in ein gewisses Format zwingen


* Länge eines Feldes beschränken
<Feldname1>=hhmm


<code>
==== Feld-Länge ====
  "Max"<Feldname1>=4
</code>


* Wert aus einer anderen Spalte holen, falls eigener Inhalt leer
* Die Ausgabelänge beschränken, notfalls den Text abschneiden


<code>
  "Max"<Feldname1>=4
"Alternative"<Feldname1>=<Feldname2>
</code>


==== Beispiel ====
==== Feld-Konstante ====


<code>
* Unabhängig vom Quell-Wert kann direkt eine Konstante in eine Spalte ausgegeben werden. Vor die Konstante muss das Hochkomma-Zeichen ' gesetzt werden.
ZaehlerStandNeu=#.#####<br>
ZaehlerStandAlt=#.#####<br>
</code>


==== Feld-Konstanten ====
<Feldname1>='ABC


Unabhängig vom Quell-Wert kann direkt eine Konstante in eine Spalte ausgegeben werden. Vor die Konstante muss das Zeichen "'" gesetzt werden.
==== Feld-Alternative ====


<code>
* Wert aus einer anderen Spalte holen, falls eigener Inhalt leer
FeldName='0815
</code>


"Alternative_"<Feldname1>=<Feldname2>


==== Feld-Filter ====
==== Feld-Filter ====
Zeile 116: Zeile 298:
FeldName=-0123456789
FeldName=-0123456789
</code>
</code>


==== Felder zusammenfügen ====
==== Felder zusammenfügen ====


* Verbinden von benachbarten Spalten, der Spaltennummern, die verbunden werden sollen muss 3 stellig erfolgen, die erste Spalte hat Nummer 000
* Verbinden von benachbarten Spalten
* Durch Angabe einer Spaltennummer kann der Feldtrenner, der die beiden Benachbarten Spalten trennt unterdrückt werden. Dadurch werden benachbarte Spalten zu einer Spalte zusammengefügt
* Die Angabe der Spaltennummern, die verbunden werden sollen muss 3 stellig erfolgen, die erste Spalte hat Nummer 000
* ACHTUNG: Pro Nummer werden 2 Spalten zusammengefügt
* ACHTUNG: Es verschiebt sich nach hinten nichts, also immer die Spaltennummern aus Sicht der Original-Datei vergeben


<code>
<code>
Zeile 147: Zeile 332:
<i>Es folgen die Möglichkeiten im Einzelnen:</i>
<i>Es folgen die Möglichkeiten im Einzelnen:</i>


'''Spalte''' an dieser Stelle wird der Wert von Spalte übernommen.<br>
'''Spalte''' an dieser Stelle wird der Wert aus der Quelle aus der Spalte mit der Überschrift ~Spalte~ übernommen.<br>
''''Spalte''' (Hochkomma "'" vor dem Spaltennamen) es wird eine vorhandene Textformatierung ("@") respektiert<br>
'''>externe Spalte''' verwende die referenzierte Spalte aus einem Nachschlagewerk.<br>
'''>externe Spalte''' verwende die referenzierte Spalte aus einem Nachschlagewerk.<br>
'''"Text''' oder '''\Text''' in jede Zelle wird der konstante Wert <u>Text</u> übernommen.<br>
'''"'''Text oder '''\'''Text in jede Zelle wird der konstante Wert <u>Text</u> übernommen.<br>
'''.1.Spalte''' ersten Teil der Spalte bis zum ersten Leerzeichen.<br>
'''.1.Spalte''' ersten Teil der Spalte bis zum ersten Leerzeichen (" ") bzw. Zeitstempeltrenner (" - ").<br>
'''.2.Spalte''' zweiten Teil der Spalte nach dem ersten Leerzeichen.<br>
'''.2.Spalte''' zweiten Teil der Spalte nach dem ersten Leerzeichen (" ") bzw. Zeitstempeltrenner (" - ").<br>
'''.+.Spalte1.Spalte2''' Werte aus beiden Spalten.<br>
'''.+.Spalte1.Spalte2''' Werte aus beiden Spalten.<br>
'''.*.Spalte1.Spalte2''' Entweder Spalte A wenn B = X ist.<br>
'''.*.Spalte1.Spalte2''' Entweder Spalte A wenn B = X ist.<br>
'''.j''' X wird in j, leer wird in n umgesetzt.<br>
'''.j''' X wird in j, leer wird in n umgesetzt.<br>
'''.ja''' X wird in ja, leer wird in nein umgesetzt.<br>
'''.J''' echte JA/NEIN umsetzung.<br>
'''.J''' echte JA/NEIN umsetzung.<br>
'''.t''' (Transaktionen) mit bisher 2 Funktionen: ISL1 und ISL2.<br>
'''.t''' (Transaktionen) mit bisher 2 Funktionen: ISL1 und ISL2.<br>
'''.l.''' (Logik) "(".Spalte.["und"|"oder"|"nicht"].Spalte.")"
'''.l.''' (Logik) "(".Spalte.["und"|"oder"|"nicht"].Spalte.")"<br>
'''.komma.''' Die Zahl wird immer mit einer Nachkommastelle angegeben<br>
'''.zeit.''' Die Uhrzeit wird immer im Format HH:MM angegeben<br>


Möglichkeiten bei Spaltenangaben
Möglichkeiten bei Spaltenangaben


Spalte1 = SpaltenName | 'Konstanter Wert | !SpaltenName<br>
Spalte1 = SpaltenName | "Konstanter Wert | \Konstanter Wert | !SpaltenName<br>
!Spaltenname : Es wird kein Leerschritt dazwischen gemacht!<br>
!Spaltenname : Es wird kein Leerschritt dazwischen gemacht!<br>


== xls Umsetzter mit Zaehlerdaten_Referenz.csv ==
=== Nachschlagewerk: Zaehlerdaten_Referenz.csv ===


* Anker ist hier die Spalte, die in beiden Dateien (Zaehlerdaten_Referenz & Quelldatei) vorhanden ist.
optional kann eine Nachschlagewerk in Form einer CSV Datei bereitgestellt werden. Aus dieser Datei können dann zusätzlich benötigte Daten in die Ergebnisdatei hinzugeladen werden. Ein Import in den OrgaMon wird so unnötig.
Ev. ist in den Ergebnisdaten auch sicherzustellen, dass Daten unverändert ausgegeben werden. Dazu ist die Referenz sinvoll.
 
* Anker ist hier die Spalte, die in beiden Dateien (Zaehlerdaten_Referenz & Quelldatei) vorhanden ist. Oft werden reine Nutzdatensplaten mit einem '@' Markiert. Die Ankerspalten selbst haben dann kein '@' als Spaltenüberschriftprefix.
 
#
# Beispielhafte Zaehlerdaten_Referenz.csv Spaltenüberschriften
@Vorname;@Nachname;@Straße;@HsNr;@PLZ;@Ort;@Zählernummer;@Gerätetyp alt;@Rechn.PLZ;@Rech.Ort;@Rech.Straße;@Rech.HsNr;;
 
 
* Warum so viele '@'?: ALLE Spaltenüberschriftsnamen die in BEIDEN Datein (Daten.xls+Zaehlerdaten_Referenz.csv) vorkommen sind ja Ankerspalten, man könnte bei Mehrtarifzählern also "Zaehler_Nummer" und "Zaehlwerk" als Ankerspalten benutzen. Damit man durch zufällige Namensgleichheit in den Spaltenüberschriften nicht in Probleme kommt hab ich mal einfach alle Spaltenüberschriften in der Referenzdatein, die NICHT Ankerspalten sind, mit einem "@" versehen. Sieht gut aus und man weis direkt, hey die Spalten kommen aus der Referenzdatei und NICHT aus der Daten.xls.
* In der Vorlage.xls nimmt man per ">" Spaltenname Bezug auf die Spalten in den Referenzdaten
 
=== Vorlage-Regler.xls ===
 
* optional kann neben der Vorlage.xls zusätzlich auch eine Vorlage-Regler.xls bereitgestellt werden. Diese muss den gleichen Spaltenaufbau haben wie die Vorlage.xls (1. Zeile).
* im Falle dass nun die Ergebnisdaten einen Reglerwechsel enthällt wird <b>eine weitere Zeile</b> in die .konvertiert Datei geschrieben
* Für diese weitere Zeile wird die Formatierungsinfo aus Vorlage-Regler.xls verwendet, man kann also die Werte (Bauform, Baujahr, ...) aus ganz anderen Quellen laden
 
== xml nach csv Konverter ==
 
* xml Dateien werden oft zur Datenhaltung von 2D Daten benutzt. Diese würden sich also auch als Tabelle abbilden lassen. Eine Konvertierung zu einer csv ist in diesem Fall möglich.
 
* Erstellen Sie ein eine "Mappings.txt" mit dem einzigen Inhalt
 
DEBUG=JA
 
* Starten Sie Oc und öffnen Sie nun Mappings.tmp und Mappings.txt
 
=== Umsetzter an Bord ===
 
=== Optionen der Mappings.txt ===
 
#
# DEBUG="JA"|"NEIN"
# default=NEIN 
#
# =JA, erstellt
#
# Mapping.tmp
# Values.tmp
#
#
# =NEIN
#
# normaler Arbeitsmodus ohne Erstellung dieser
# Info-Dateien
#
DEBUG=JA
#
# ARGOS="JA"|"NEIN"
# default=NEIN
#
# ARGOS=JA
# der <xml>-Wert wird in der Form <tag>Wert</tag> angegeben
#
# ARGOS=NEIN
# der <xml>-Wert wird in der Form <tag value="Wert"> angegeben
#
ARGOS=JA
#
# MIXED="JA"|"NEIN"
# default=NEIN
#
# =JA
# die <xml>-Werte können in der Form <tag>Wert</tag> auftreten oder
# auch als <tag value="Wert"> angegeben
#
# =NEIN
# die XML Werte kommen entweder im ARGOS=JA Format oder
# im ARGOS=NEIN Format, der jeweils andere Typ wird ignoriert
MIXED=JA
#
# UTF8="JA"|"NEIN"
# default=NEIN
#
# =JA
# die xml-Datei ist UTF8-Codiert
#
# =NEIN
# die xml-Datei ist ANSI-Codiert
#
UTF8=JA
   
   
#
# WRITE_AT=CloseTagName
# default=<leer>
#
# Bestimmt bei welchem Tag eine Zeile in die CSV
# geschrieben werden sollte
#
WRITE_AT=<xml Tag>
#
#
# - ohne Doku -
#
ADD_ZW=
#
#
# - ohne Doku -
#
#
ZW_SAME_NAME_OK=
#
#
#
#
#
IGNORE=[ ~Value~ { "|" ~Value~ } ]
#
# NAMESPACE=~Spaltenüberschrift~ { ";" ~Spaltenüberschrift~ }
# default=<leer>
#
#
# Bei der Speicherung der Daten in eine CSV kann anhand des Inhaltes der Datei
# in verschiedene Dateien gespeichert werden. Die Daten werden also anhand eines
# gewissen "Tag" Feldes aufgesplittet und in verschiedene Dateien verteilt.
#
NAMESPACE=
#
# REPLACE=~Spaltenüberschrift-Alt~ "=" ~Spaltenüberschrift-Neu~
#
REPLACE=
#
# COALESCE="JA"|"NEIN"
# default=NEIN
#
# =JA
# behalte Werte aus xml-Tags bei, auch wenn sie später durch "null" / "leer"
# überschrieben werden.
#
COALESCE=JA
== csv nach csv Konverter ==
* mit [[Umsetzer]] Dateien (~Spaltenüberschrift~.ini)
* Ergebnis-Datei heisst -mapped.csv
== Anwendung ==
== Anwendung ==


* Im Windows Explorer einen rechten Mausklick auf die zu konvertierende Datei machen. Es öffnet sich das Kontextmenü.
* Im Rahmen des Setups von Oc, wird das Programm mit verschiedenen Dateierweiterungen verbunden (.xls, .csv, .tab)
* Den Menüeintrag "Konvertieren mit Oc" auswählen.
** Im Windows Explorer einen rechten Mausklick auf die zu konvertierende Datei machen. Es öffnet sich das Kontextmenü.
* Im gleichen Verzeichnis wie die Quelldatei ist nun das Konvertierungsergebnis entstanden.
** Den Menüeintrag "Konvertieren mit Oc" auswählen.
** Im gleichen Verzeichnis wie die Quelldatei ist nun das Konvertierungsergebnis entstanden.


== automatisierte Anwendung ==
* Des weiteren kann Oc in der Kommandozeile aufgerufen werden
 
C:\Programme\Oc\Oc.exe <i>"Pfad+Dateiname"</i> <i>Konvertierungs-Modus</i> [<i>Optionen</i>]
 
<u>Konvertierungs-Modi</u>
 
--tab    tab2csv
--huff  Huffman
--csv    Autodetect csv oder csvMap
--txt    Autodetect aller .txt Modi
--xls    Autodetect aller .xls Modi
--xml    Autodetect xsd oder xml2csv
--html  xls2html
--val    Autodetect xsd oder ddt
<u>Optionen</u>
-al      Aktiviert den DebugModus
-tm      Aktiviert den TestMode
--d      Aktiviert den Startup Debugger


Oc ist als Konsolen-Anwendung Batch-Fähig. Geben Sie dazu in der Kommandozeile den Dateinamen einfach in Anführunszeichen (") an, auf den Sie einen rechten Mausklick machen würden. Die Integration in einen Transaktions-Server ist problemlos möglich. Die Ergebnis Datei (Diagnose.txt) kann fehlerbestimmend ausgewertet werden. kompilierte Linux - Version auf Anfrage.


<code>
* Oc ist als Konsolen-Anwendung Batch-Fähig. Geben Sie dazu in der Kommandozeile den Dateinamen einfach in Anführunszeichen (") an, auf den Sie einen rechten Mausklick machen würden. Die Integration in einen Transaktions-Server ist problemlos möglich. Die Ergebnis Datei (Diagnose.txt) kann fehlerbestimmend ausgewertet werden. kompilierte Linux - Version auf Anfrage.
C:\Programme\Oc\Oc.exe "C:\MeinPfad\Meine zu verarbeitende Datei.xls"
</code>

Aktuelle Version vom 26. April 2022, 09:21 Uhr

Oc steht für Orientation Convert. Es ist ein Open-Source Tool, das z.B. Daten in horizontaler Ausrichtung (z.B. ein Text) in vertikale Spalten ausrichtet. Auch die Übertragung von einzelnen xls Spalten in andere ist möglich. ".txt", ".csv" und ".xls" wird nativ unterstützt. Inzwischen sind die Fähigkeiten von Oc recht umfangreich

Bezeichnung Modus Beschreibung
Michelbach 1 undokumentiert
  2 nicht verwendet
xls2xls 3 xls+Vorlage.xls -> xls
xls2csv 4 xls+[Fixed-Formats.ini] -> csv
KK20 5 txt -> csv
KK22 6 xls -> txt
csv 7 undokumentiert
txt 8 undokumentiert
xml2csv 9 .xml + Mapping.txt -> .csv
tab2csv 10 .tab + Mapping.txt -> .csv
xls2idoc 11 .xls + IDOC.Mappings.ini -> .idoc
xls2Argos2007 12 xls -> Argos-2007 XML (mit XML.BLA)
xls2ml 13 xls+Vorlage.(ht)ml -> html /xml
enBW 14 undokumentiert
Datev 15 xls+Datev.xls -> .xls
xsd 16 Prüfe xml Datei gegen eine "Schema.xsd"
dtd 17 Prüfe xml Datei gegen eine "*.dtd"
xls2flood 18 xls+Fixed-Flood.ini -> Auftrag füllen
csvMap 19 .csv Datei mit Mappings nach -> -mapped.csv Datei
xls2gm 20 GM
xls2html 21 xls+Vorlage.html -> multible html
Huffman 22 .huff -> .pas
xls2xml 23 xls+Vorlage.xml -> multible xml
xls2Argos2018 24 xls -> Argos-2018 XML (mit XML-2018.BLA)


Download

Die Open-Source Anwendung incl. Quelltexte kann man hier downloaden:

https://cargobay.orgamon.org/Oc.html

.txt nach .xls Konverter

Quelle ".txt": Trenner ist hier " - "

.xls nach .html Konverter

  • hier wird für jede einzelne Zeile der .xls ein oder mehrere .html Dokument(e) erstellt
  • Als Template wird zunächst immer die Datei Vorlage.html sowie Vorlage.unmoeglich.html verwendet, für die einzelen Dokumente möglicherweise weitere Vorlagen
  • Beschreibung aller Möglichkeiten hier
#
# Folgende Blöcke können definiert werden
#
Zählerart
AUFTRAG
UNMOEGLICH
VORGEZOGEN

Fotos

  • In der Vorlage.html sowie in Vorlage.unmoeglich.html gibt man mit <!-- set Anlagenverzeichnis J:\Pfad\Fotos\firma\ -->
  • Alternativ in der Spalte "Anlagenverzeichnis"

Ausgabe von mehreren Dateien pro Zeile

In den Intern-Feldern muss es in jedem Datensatz jetzt ein Feld

Vorlagen=

geben. Will man die Mehr-Dateien-Fähigkeit nicht, dann kann man das Feld weglassen. Ok, Da muss was drin sein, sonst wird die Meldung verhindert (Ich habe Vorlagen! in der Spaltenreihenfolge) . Damit nicht was rausgeht, was noch gar nicht einsortiert ist.

OK, im Falle eines reinen Anschluss-PDF muss man reinschreiben:

Vorlagen=Anschluss

Wenn man beides haben will muss man reinschreiben:

Vorlagen=Anschluss;Armatur

ok - er belichtet also mehrere PDF. Für jedes Wort, das man so in Vorlagen= verwendet muss es eine Datei geben: Hier also:

Vorlage-Anschluss.html

Vorlage-Armatur.html

Eine normale/ zentrale "Vorlage.html" muss es aber dennoch als Platzhalter geben, wo man z.B. den Foto-Pfad definieren muss.

.xls nach .xml Konverter

Spalte "Quelle"

In dieser Spalte kann der Dateiname einer XML-Datei angegeben werden, der als Referenzdatei für weitere Spalten benutzt werden kann. Dabei haben folgende Spalten weitere Bedeutungen

  • Referenz der Tag der gesucht wird
  • Referenz-Prefix dessen Prefix
  • Referenz-Postfix dessen Postfix
  • Referenz-Numerisch JA|NEIN Feld

ohne Vorlage.ml

in diesem Modus wird aus einem Auftrag (EXPORT*.xml) und einer Ergebnis xls-Datei eine xml-Datei erzeugt.

mit Vorlage.ml

vordefinierte Variable

~AusgabeDatum~
~AusgabeTAN~
~AusgabeUhr~
~Anlagenverzeichnis~

Verarbeitungs/Formatier Zusätze

das XML-Gerüst wird in der Vorlage.ml gespeichert. Mit

~VariablenName~[ { "!" ["Komma", "Boolean", "Nulln", "Zeit", "^Y"] }

können Werte in dieses Gerüst eingesetzt werden. Der Wert für VariablenName wird aus der Spaltenüberschrift "VaraiblenName" entnommen.

  • !1 nur der erste Teil einer ","-speparierten Liste
  • !Komma eine Zahl wird immer als ISO-Kommazahl ausgegeben (mit "." als Komma Symbol)
  • !EchtesKomma eine Zahl wird immer als deutsche Kommazahl ausgegeben (mit "," als Komma Symbol)
  • !Boolean eines aus 'xXyYjJ1' wird in true umgesetzt, Rest in false
  • !Nulln z.B. !Null8 Zahl wird immer 8 stellig ausgegebn, ggf wird mit führenden '0'en aufgefüllt. Für n kann man die Ziffern 1 bis 9 oder A (für 10) bis F (für 15) einsetzen.
  • !Zeit Zeitangabe wird als HH:MM:SS ausgegeben
  • !ZeitDefault wie Zeit, jedoch wenn keine Zeit angegeben ist wird 12:00:00 ausgegeben
  • !Datum Datum im Format JJJJ-MM-TT
  • !Zeitstempel Datum+Uhrzeit wird als 2015-05-11T10:02:13 ausgegeben. "JJJJ-MM-TT\THH:MM:SS"
  • !^E Der (tag)(/tag) wird in (tag/) verwandelt sobald der Wert leer ist (in Erinnerung an Empty Element)
  • !^T Zeile wird von doppelten Blanks entledigt (in Erinnerung an die Funktion Trim)
  • !^Y Zeile wird gelöscht sobald der Variablenwert leer ist (in Erinnerung an <Strg>&<Y> = "Delete Line")
  • !Base64 die als Dateinamen definierte Datei wird base64 codiert eingefügt

automatisch generierte Spalten

~WechselDatum_2~ WechselDatum im Format JJJJ-MM-TT
~WechselDatum_3~ WechselDatum im Format JJJJMMTT
~WechselZeit_2~ WechselUhrzeit im Format HH:MM:SS

Prüfung der Ausgabe

Eine Datei Schema.xsd kann zur Schema-Prüfung bereitgestellte werden.

.xls nach .csv Konverter

Die Quelle ist dabei eine ".xls"-Datei. Dieser Modus wird über das Kontextmenü im Windows Explorer angesprochen, sobald man die Menü-Option "speichern als csv" auswählt. csv ist eine Semikolon (in USA "comma separated values") separierte Textdatei und in der Weiterverarbeitung (automatisierter Import) usw. leicht zu handhaben.

Fixed-Formats.ini

  • Durch die Konfigurationsdatei "Fixed-Formats.ini" kann Oc gezwungen werden, einzelne Spalten vor Ausgabe in die csv-Datei in ein Sonderformat zu konvertieren. Im Moment sind folgende Sonderformate konfiguriert:

Parameter

// Legt das Trennungszeichen fest, das in der 
// Datei verwendet wird.
//
// default = ;
Separator=|   

// Kann die Ausgabe der ersten Zeile (oft Kopfzeile) verhindern
// 
// default = NEIN
NoHeader=JA

// Kann die Ausgabe ab einer bestimmten Spalte stoppen
//
// default = Unbegrenzt
MaxColumn=76

// Beachtet, wie Excel die Zellen darstellt
//
// default = NEIN
RespectFormats=JA

// Gibt zu Testzwecken nicht den Wert der Zelle aus, 
// sondern deren Excel-Formatierungsstring, also 
// z.B. "DD.MM.YYYY"
//
// default = NEIN
OnlyFormats=JA

// Einfluss auf den Ausgabe-Dateinamen
//
// default=<Eingabe-Dateinamen>.csv
//
// '*' Es kann im Dateinamen ein '*' angegeben werden
//     um die Meldungsnummer (und alle anderen Ziffern) im Dateinamen zu erhalten:
//
//     FileName=Meldung_*.txt
//
// '+' Es kann für den Dateinamen weiterhin Bestandteile aus
//     dem alten Dateinamen übernommen werden, dabei werden
//     Bruchstücke, die im alten Dateinamen erkannt werden
//     durch neue Worte ersetzt. An der Stelle '+' wird dann
//     der neue Text ausgegeben.
//
//     FileName=+Daten_*.csv
//
FileName=foo.csv
// Mehr Optionen für die '+' Textersetzung
//
// default=.unmoeglich|u
// 
// Semikolon spepariert können Namensbruchstücke des originalen
// Dateinamens ersetzt werden durch kürzere oder andere Texte
// Dabei muss die Syntax Bruchstück|NeuerText eingehalten werden.
// 
FileNamePlus=.unmoeglich|u;Zaehlerdaten|z;Konvertiert|k

// Eine Referenz-Datei bereithalten
//
// default=
Auftrag=
AuftragReferenzSpalten=

Feld-Formatierungen

  • Bei der Angabe des Spaltennamens, kann die Spaltenüberschrift
<Spaltenname1>=<Formatierung>
  • aber auch die Spalten-Nummer (beginnend links bei "1") verwendet werden
"Column_"<NummerDerSpalte>=<Formatierung>
  • Ausgabe mit 5 Nachkommastellen und "." als Komma
 <Feldname1>=#.#####
 <Feldname2>=#.#####
  • Ausgabe mit führenden Nullen auffüllen
// n gibt als Ganzzahl die Gesamtlänge an
<Feldname1>=0n
  • Datum in ein gewisses Format zwingen
<Feldname1>=TTMMJJ
<Feldname2>=JJJJ
  • Uhrzeit in ein gewisses Format zwingen
<Feldname1>=hhmm

Feld-Länge

  • Die Ausgabelänge beschränken, notfalls den Text abschneiden
 "Max"<Feldname1>=4

Feld-Konstante

  • Unabhängig vom Quell-Wert kann direkt eine Konstante in eine Spalte ausgegeben werden. Vor die Konstante muss das Hochkomma-Zeichen ' gesetzt werden.
<Feldname1>='ABC

Feld-Alternative

  • Wert aus einer anderen Spalte holen, falls eigener Inhalt leer
"Alternative_"<Feldname1>=<Feldname2>

Feld-Filter

  • damit können unerwünschte Zeichen aus Feldinhalten entfernt werden ("+" Filter).

FeldName=+G-

  • alternativ können Feldinhalte auf einen genau bezeichneten Zeichvorrat beschränkt werden ("-" Filter).

FeldName=-0123456789

Felder zusammenfügen

  • Verbinden von benachbarten Spalten
  • Durch Angabe einer Spaltennummer kann der Feldtrenner, der die beiden Benachbarten Spalten trennt unterdrückt werden. Dadurch werden benachbarte Spalten zu einer Spalte zusammengefügt
  • Die Angabe der Spaltennummern, die verbunden werden sollen muss 3 stellig erfolgen, die erste Spalte hat Nummer 000
  • ACHTUNG: Pro Nummer werden 2 Spalten zusammengefügt
  • ACHTUNG: Es verschiebt sich nach hinten nichts, also immer die Spaltennummern aus Sicht der Original-Datei vergeben

JoinColumn=NNN,NNN,NNN ...

xls Umsetzer mit Vorlage.xls

Oc kann dazu dienen einzelne Datenspalten aus einer XLS Quelle in eine neues XLS-Dokument zu kopieren. Dabei kann Oc folgende Operationen ausführen:

  • es können XLS Spalten in eine andere Reihenfolge gebracht werden
  • es können Spalten weggelassen werden
  • es können andere oder keine Spaltenüberschriften verwendet werden
  • es können mehrzeilige Spaltenüberschriften verwendet werden

Funktionsweise

Die Quelldatei "Namen.xls" muss Spaltenüberschriften in der ersten Zeile haben. Diese Spaltenüberschriften haben eine zentrale Funktion in der Vorlage.xls. Die Vorlage.xls beschreibt Reihenfolge und Umfang aller einzelnen Spalten.

  • In der ersten Zeile der Vorlage werden die zukünftigen Spaltenüberschriften angegeben, diese können völlig anders lauten als die der Quelldatei. Diese Zeile kann auch entfallen.
  • Die 2. Zeile ist eine Beispielzeile in der für jede Zelle eine passendes Format eingerichtet werden sollte. Das Format jeder einzelnen Zelle wird in die Datenspalte der Ausgabe übernommen.
  • Die 3. Zeile enthält nun die Spaltenüberschriften der Quell-Datei. Dadurch können Sie per Querverweis angeben welche Datenspalte an diese Stelle eingesetzt werden soll. Neben der 1:1 Übernahme von Spalten können auch z.B. feste Werte übernommen werden.


Es folgen die Möglichkeiten im Einzelnen:

Spalte an dieser Stelle wird der Wert aus der Quelle aus der Spalte mit der Überschrift ~Spalte~ übernommen.
'Spalte (Hochkomma "'" vor dem Spaltennamen) es wird eine vorhandene Textformatierung ("@") respektiert
>externe Spalte verwende die referenzierte Spalte aus einem Nachschlagewerk.
"Text oder \Text in jede Zelle wird der konstante Wert Text übernommen.
.1.Spalte ersten Teil der Spalte bis zum ersten Leerzeichen (" ") bzw. Zeitstempeltrenner (" - ").
.2.Spalte zweiten Teil der Spalte nach dem ersten Leerzeichen (" ") bzw. Zeitstempeltrenner (" - ").
.+.Spalte1.Spalte2 Werte aus beiden Spalten.
.*.Spalte1.Spalte2 Entweder Spalte A wenn B = X ist.
.j X wird in j, leer wird in n umgesetzt.
.ja X wird in ja, leer wird in nein umgesetzt.
.J echte JA/NEIN umsetzung.
.t (Transaktionen) mit bisher 2 Funktionen: ISL1 und ISL2.
.l. (Logik) "(".Spalte.["und"|"oder"|"nicht"].Spalte.")"
.komma. Die Zahl wird immer mit einer Nachkommastelle angegeben
.zeit. Die Uhrzeit wird immer im Format HH:MM angegeben

Möglichkeiten bei Spaltenangaben

Spalte1 = SpaltenName | "Konstanter Wert | \Konstanter Wert | !SpaltenName
!Spaltenname : Es wird kein Leerschritt dazwischen gemacht!

Nachschlagewerk: Zaehlerdaten_Referenz.csv

optional kann eine Nachschlagewerk in Form einer CSV Datei bereitgestellt werden. Aus dieser Datei können dann zusätzlich benötigte Daten in die Ergebnisdatei hinzugeladen werden. Ein Import in den OrgaMon wird so unnötig. Ev. ist in den Ergebnisdaten auch sicherzustellen, dass Daten unverändert ausgegeben werden. Dazu ist die Referenz sinvoll.

  • Anker ist hier die Spalte, die in beiden Dateien (Zaehlerdaten_Referenz & Quelldatei) vorhanden ist. Oft werden reine Nutzdatensplaten mit einem '@' Markiert. Die Ankerspalten selbst haben dann kein '@' als Spaltenüberschriftprefix.
#
# Beispielhafte Zaehlerdaten_Referenz.csv Spaltenüberschriften
#  
@Vorname;@Nachname;@Straße;@HsNr;@PLZ;@Ort;@Zählernummer;@Gerätetyp alt;@Rechn.PLZ;@Rech.Ort;@Rech.Straße;@Rech.HsNr;;


  • Warum so viele '@'?: ALLE Spaltenüberschriftsnamen die in BEIDEN Datein (Daten.xls+Zaehlerdaten_Referenz.csv) vorkommen sind ja Ankerspalten, man könnte bei Mehrtarifzählern also "Zaehler_Nummer" und "Zaehlwerk" als Ankerspalten benutzen. Damit man durch zufällige Namensgleichheit in den Spaltenüberschriften nicht in Probleme kommt hab ich mal einfach alle Spaltenüberschriften in der Referenzdatein, die NICHT Ankerspalten sind, mit einem "@" versehen. Sieht gut aus und man weis direkt, hey die Spalten kommen aus der Referenzdatei und NICHT aus der Daten.xls.
  • In der Vorlage.xls nimmt man per ">" Spaltenname Bezug auf die Spalten in den Referenzdaten

Vorlage-Regler.xls

  • optional kann neben der Vorlage.xls zusätzlich auch eine Vorlage-Regler.xls bereitgestellt werden. Diese muss den gleichen Spaltenaufbau haben wie die Vorlage.xls (1. Zeile).
  • im Falle dass nun die Ergebnisdaten einen Reglerwechsel enthällt wird eine weitere Zeile in die .konvertiert Datei geschrieben
  • Für diese weitere Zeile wird die Formatierungsinfo aus Vorlage-Regler.xls verwendet, man kann also die Werte (Bauform, Baujahr, ...) aus ganz anderen Quellen laden

xml nach csv Konverter

  • xml Dateien werden oft zur Datenhaltung von 2D Daten benutzt. Diese würden sich also auch als Tabelle abbilden lassen. Eine Konvertierung zu einer csv ist in diesem Fall möglich.
  • Erstellen Sie ein eine "Mappings.txt" mit dem einzigen Inhalt
DEBUG=JA
  • Starten Sie Oc und öffnen Sie nun Mappings.tmp und Mappings.txt

Umsetzter an Bord

Optionen der Mappings.txt

# 
# DEBUG="JA"|"NEIN"
# default=NEIN  
#
# =JA, erstellt 
#
# Mapping.tmp
# Values.tmp
#
#
# =NEIN
#
# normaler Arbeitsmodus ohne Erstellung dieser 
# Info-Dateien
#
DEBUG=JA

#
# ARGOS="JA"|"NEIN"
# default=NEIN
#
# ARGOS=JA
# der <xml>-Wert wird in der Form <tag>Wert</tag> angegeben
#
# ARGOS=NEIN
# der <xml>-Wert wird in der Form <tag value="Wert"> angegeben
#
ARGOS=JA

#
# MIXED="JA"|"NEIN"
# default=NEIN
#
# =JA
# die <xml>-Werte können in der Form <tag>Wert</tag> auftreten oder
# auch als <tag value="Wert"> angegeben
# 
# =NEIN 
# die XML Werte kommen entweder im ARGOS=JA Format oder 
# im ARGOS=NEIN Format, der jeweils andere Typ wird ignoriert
MIXED=JA

#
# UTF8="JA"|"NEIN"
# default=NEIN
#
# =JA
# die xml-Datei ist UTF8-Codiert
#
# =NEIN
# die xml-Datei ist ANSI-Codiert
#
UTF8=JA

#
# WRITE_AT=CloseTagName
# default=<leer>
# 
# Bestimmt bei welchem Tag eine Zeile in die CSV 
# geschrieben werden sollte
#
WRITE_AT=<xml Tag>

#
#
# - ohne Doku -
#
ADD_ZW=
#
#
# - ohne Doku -
#
# 
ZW_SAME_NAME_OK=
#
#
#
#
#
IGNORE=[ ~Value~ { "|" ~Value~ } ]

#
# NAMESPACE=~Spaltenüberschrift~ { ";" ~Spaltenüberschrift~ }
# default=<leer>
#
#
# Bei der Speicherung der Daten in eine CSV kann anhand des Inhaltes der Datei
# in verschiedene Dateien gespeichert werden. Die Daten werden also anhand eines
# gewissen "Tag" Feldes aufgesplittet und in verschiedene Dateien verteilt.
#
NAMESPACE=

#
# REPLACE=~Spaltenüberschrift-Alt~ "=" ~Spaltenüberschrift-Neu~
#
REPLACE=

#
# COALESCE="JA"|"NEIN"
# default=NEIN
# 
# =JA
# behalte Werte aus xml-Tags bei, auch wenn sie später durch "null" / "leer"
# überschrieben werden.
#
COALESCE=JA

csv nach csv Konverter

  • mit Umsetzer Dateien (~Spaltenüberschrift~.ini)
  • Ergebnis-Datei heisst -mapped.csv

Anwendung

  • Im Rahmen des Setups von Oc, wird das Programm mit verschiedenen Dateierweiterungen verbunden (.xls, .csv, .tab)
    • Im Windows Explorer einen rechten Mausklick auf die zu konvertierende Datei machen. Es öffnet sich das Kontextmenü.
    • Den Menüeintrag "Konvertieren mit Oc" auswählen.
    • Im gleichen Verzeichnis wie die Quelldatei ist nun das Konvertierungsergebnis entstanden.
  • Des weiteren kann Oc in der Kommandozeile aufgerufen werden
C:\Programme\Oc\Oc.exe "Pfad+Dateiname" Konvertierungs-Modus [Optionen]
 
Konvertierungs-Modi
 
--tab    tab2csv
--huff   Huffman
--csv    Autodetect csv oder csvMap
--txt    Autodetect aller .txt Modi
--xls    Autodetect aller .xls Modi
--xml    Autodetect xsd oder xml2csv
--html   xls2html
--val    Autodetect xsd oder ddt

Optionen

-al      Aktiviert den DebugModus
-tm      Aktiviert den TestMode
--d      Aktiviert den Startup Debugger


  • Oc ist als Konsolen-Anwendung Batch-Fähig. Geben Sie dazu in der Kommandozeile den Dateinamen einfach in Anführunszeichen (") an, auf den Sie einen rechten Mausklick machen würden. Die Integration in einen Transaktions-Server ist problemlos möglich. Die Ergebnis Datei (Diagnose.txt) kann fehlerbestimmend ausgewertet werden. kompilierte Linux - Version auf Anfrage.