
CSV für QR-Serien: aufbauen, prüfen, archivieren
Zwölfhundert Geräteetiketten kamen aus der Druckerei zurück und wurden an vier Standorten auf Maschinen geklebt. Drei Wochen später meldete ein Techniker, dass das Etikett an einem Kompressor eine defekte Seite öffnete. Dann noch eines. Am Ende waren es einundvierzig fehlerhafte Etiketten, alle aus demselben Zeilenblock der Ausgangstabelle, alle mit einer URL, die ein Zeichen zu früh endete. Solche Blöcke entstehen fast immer an einer der drei Stellen, an denen eine deutsche Büroumgebung anders arbeitet als die Vorgabe des Generators.
Die Ursache war ein Komma. Jemand hatte in ein Feld die Ortsangabe "Gebäude 4, Halle 2" getippt, die Datei wurde als CSV gespeichert, und der Parser auf der Gegenseite las dieses Komma als Spaltenende. Alles dahinter rutschte eine Position nach links.
Massenerzeugung ist ein Datenproblem im Grafikkostüm. Fast jeder Fehler im großen Maßstab lässt sich auf die Tabelle zurückführen.
Die Tabelle entwerfen, bevor Sie irgendetwas exportieren
Eine Zeile pro Code, ein Code pro Zeile. Keine verbundenen Zellen, keine Summenzeile, keine leeren Trennzeilen, keine Notizspalte voller Fließtext.
Spalten, die sich lohnen:
- Eine Kennung, die Sie vergeben und nie ändern. Nicht die Zeilennummer und nichts, was sich beim Neusortieren der Tabelle verschiebt. Das ist der Schlüssel, auf den sich jedes andere System bezieht, einschließlich der Dateinamen beim Druckdienstleister.
- Die Ziel-URL, vollständig, mit Schema.
- Ein Label oder Name nach dem Namensschema, das Sie verwenden.
- Metadaten, die Sie später brauchen werden: Standort, Anbringungsort, Verantwortlicher, Druckcharge, Datum.
Geben Sie der Datei eine Kopfzeile mit kurzen, maschinenfreundlichen Namen. Vermeiden Sie Leerzeichen und Satzzeichen in den Spaltenüberschriften, weil manche Importer damit falsch umgehen und andere sie stillschweigend umbenennen.
Die schädlichste Angewohnheit ist das Neunummerieren. Sortieren Sie die Tabelle, erzeugen Sie fortlaufende IDs neu, und schon zeigt jede Referenz in jedem anderen System auf das Falsche, während die Etiketten längst an den Maschinen kleben.
Die Fallen bei Trennzeichen und Anführungszeichen
CSV hat kein Schema und nur schwache Konventionen. Was kaputtgeht:
- Kommas innerhalb von Feldwerten. Ein in Anführungszeichen gesetztes Feld verkraftet das korrekt, aber nur wenn die schreibende Stelle die Anführungszeichen auch gesetzt hat. Tabellenexporte tun das meist. Von Hand bearbeitete Dateien und schnelle Skripte oft nicht.
- Anführungszeichen innerhalb eines gequoteten Feldes, die verdoppelt werden müssen. Ein Produktname mit einem Zollzeichen reicht, um eine Zeile aus der Spur zu werfen.
- Zeilenumbrüche innerhalb eines Feldes. Jemand fügt eine mehrzeilige Adresse in eine Label-Zelle ein, aus einer Zeile werden zwei, und der zweiten fehlen die meisten Spalten.
- Uneinheitliche Spaltenzahlen zwischen den Zeilen, die Importer unterschiedlich behandeln und manchmal kommentarlos akzeptieren.
Zwei Verteidigungslinien. Exportieren Sie aus der Tabellenkalkulation, statt CSV von Hand zu bauen. Und wenn das Werkzeug es annimmt, verwenden Sie stattdessen tabulatorgetrennte Werte, denn Tabulatoren tauchen in einer URL oder einem Label so gut wie nie auf, Kommas dagegen ständig.
Legen Sie eine Prüfspalte an, die jedes Textfeld mit Komma, Anführungszeichen oder Zeilenumbruch markiert, und kontrollieren Sie sie vor dem Export. In der Tabelle kostet das nichts. Nach einem Druckauftrag schon. Diese Prüfung gehört in dieselbe Routine wie der Schritt der Massenerzeugung selbst.
Die Kodierung ist die Falle, nach der niemand sucht
Eine CSV-Datei enthält keine Angabe zu ihrer eigenen Kodierung, also rät die lesende Seite.
Speichern Sie als UTF-8. Wenn Labels Akzentzeichen, nichtlateinische Schriften oder Währungssymbole enthalten, kommt eine in einer alten Codepage geschriebene Datei als Zeichensalat an, und dieser Zeichensalat landet in den Codes selbst. Was am Ende im Symbol steckt, hängt von Byte-Details ab, die in der Tabelle unsichtbar sind: genau das Terrain von Zeichenkodierung und ECI.
Achten Sie außerdem auf eine Byte Order Mark am Dateianfang. Sie erscheint als Zeichensalat direkt am ersten Spaltennamen und zerstört still die Zuordnung der ersten Spalte.
Wenn ein Label oder eine URL Zeichen außerhalb von ASCII enthält, erzeugen Sie einen Code, dekodieren ihn und lesen die Zeichenkette zurück, bevor Sie den Rest laufen lassen. Nicht-ASCII verbraucht außerdem mehr Kapazität als reines ASCII, was bei dichten Codes zählt. Die Grenzen behandelt wie viele Daten ein QR-Code fasst.
Was Tabellenkalkulationen ungefragt mit Ihren Daten machen
Hier lebt die stille Korruption, denn nichts davon erzeugt eine Fehlermeldung.
- Führende Nullen verschwinden. Aus Inventarnummer 00742 wird 742, sobald die Spalte als Zahl behandelt wird.
- Lange Zahlen werden zu wissenschaftlicher Notation. Eine zwölfstellige Seriennummer wird als 1.23457E+11 angezeigt und exportiert.
- Zahlen jenseits von fünfzehn Stellen verlieren ihr Ende an die Fließkommadarstellung und sind nicht wiederherstellbar.
- Werte, die wie Datumsangaben aussehen, werden zu Datumsangaben. Ein Code, der 12-3 lautet, wird je nach Spracheinstellung zu einem Datum im Dezember oder im März.
- Die Autokorrektur verwandelt gerade Anführungszeichen und Bindestriche in typografische. Ein typografischer Apostroph in einem Label ist Kosmetik. Ein typografischer Bindestrich in einer URL ist tödlich, und auf dem Bildschirm sieht er dem echten fast gleich.
- Kopieren aus einer Webseite schleppt geschützte Leerzeichen und Leerraum am Ende mit.
Gegenmaßnahmen nach Verlässlichkeit: Setzen Sie das Spaltenformat auf Text, bevor Sie irgendetwas hineinkopieren; wählen Sie beim Import für ID- und URL-Spalten ausdrücklich Text, statt die Voreinstellung zu übernehmen; schalten Sie die Autokorrektur in jeder Tabelle ab, die URLs enthält. Eine Spalte nachträglich umzuformatieren stellt das Verlorene nicht wieder her, es ändert nur die Anzeige des beschädigten Werts.
Ziele prüfen, bevor Sie erzeugen
Führen Sie das gegen die Tabelle aus, nicht gegen fertige Grafiken.
- Jede URL lässt sich parsen und hat ein Schema. Zeilen, die mit "www." beginnen, sind die üblichen Verdächtigen.
- Jede URL antwortet. Halten Sie den Status und die endgültige Adresse nach Weiterleitungen fest.
- Markieren Sie alles, was kein direkter Erfolg ist. Ein Ziel, das heute weiterleitet, ist ein Ziel, das irgendwann 404 liefert.
- Markieren Sie doppelte URLs, die eindeutig sein sollten, und eindeutige URLs, die doppelt hätten sein sollen.
- Prüfen Sie die Länge. Sehr lange Tracking-URLs ergeben dichte Codes, die in kleinen Größen schlecht lesbar sind, und sie jetzt zu kürzen ist deutlich einfacher als nach dem Druck. Eine kurze URL hinter dem Code ist der übliche Weg.
- Vergleichen Sie die Zeilenzahl in Ihrer Tabelle mit der Zahl, die der Generator meldet. Eine Abweichung ist das schnellstmögliche Signal dafür, dass beim Parsen etwas schiefging.
Der QA-Durchgang: ein Muster dekodieren, mit der Zeile vergleichen
Wählen Sie das Muster nach der Erzeugung und vor dem Druck bewusst statt zufällig.
Nehmen Sie die erste Zeile, die letzte Zeile, jede Zeile mit einem Zeichen außerhalb von ASCII, jede Zeile mit einem Komma oder Anführungszeichen in irgendeinem Feld und zufällige fünf Prozent des Rests. In diesen Kategorien häufen sich die Fehler.
Dekodieren Sie jedes ausgewählte Bild mit einem Reader und vergleichen Sie die dekodierte Zeichenkette Zeichen für Zeichen mit ihrer Quellzeile. Machen Sie den Vergleich mit einer Formel oder einem Skript, nicht mit dem Auge. Menschliches Korrekturlesen langer URLs mit Tracking-Parametern hat eine schlechte Trefferquote, und der Fehlerfall ist ein falsches Zeichen mitten in der Zeichenkette.
Drucken Sie dann einen Andruck in Endgröße auf dem echten Material und scannen Sie ihn vom Papier. Die Dekodierung am Bildschirm beweist, dass die Daten stimmen. Papier beweist, dass der Code benutzbar ist, und beide scheitern aus völlig unterschiedlichen Gründen, weshalb Drucktests keines von beidem ersetzen.
Semikolon, Umlaute, Tabellenkalkulation auf Deutsch
Das Listentrennzeichen zuerst. In einer deutschsprachigen Windows-Umgebung ist es das Semikolon, weil das Komma als Dezimaltrennzeichen belegt ist. Eine Tabellenkalkulation in deutscher Spracheinstellung schreibt eine CSV deshalb mit Semikolon und liest eine kommagetrennte Datei als eine einzige Spalte ein. Wenn Ihr Generator Komma erwartet und eine Kollegin die Datei am deutschen Arbeitsplatz noch einmal öffnet und speichert, kommt sie mit Semikolon zurück, und der Import legt tausend Codes mit einem einzigen Feld an. Legen Sie das Trennzeichen im Team fest, schreiben Sie es in die Anleitung, und öffnen Sie die Datei zur Kontrolle in einem Texteditor und nicht in der Tabellenkalkulation, die genau die Umformung versteckt, nach der Sie suchen.
Dann die Umlaute. Dateien, die auf deutschen Arbeitsplätzen entstehen, landen gern in der westeuropäischen Windows-Kodierung statt in UTF-8. Solange nur ASCII darin steht, fällt das nie auf. Sobald ein Straßenname, ein Maschinenname oder eine Standortbezeichnung ein ä, ö, ü oder ß trägt, kommt nach dem Import Zeichensalat heraus, und der landet unbemerkt in der Nutzlast des Codes. Speichern Sie ausdrücklich als UTF-8, und setzen Sie in Ihre Prüfliste eine Zeile, die absichtlich einen Umlaut enthält. Kommt diese Zeile heil durch, kommen die anderen auch heil durch.
Und die deutsche Spracheinstellung bringt eigene stille Umformungen mit. Ein Feld mit dem Inhalt 1.5 wird zum ersten Mai, eine Zahl mit Punkt wird als Tausendertrennung gelesen, eine Kennung mit führender Null verliert sie. Formatieren Sie alle Schlüsselspalten vor der ersten Eingabe als Text. Und wenn die gedruckte Serie zu Anlagen, Belegen oder Beständen gehört, gehört die freigegebene Datei danach unverändert ins Archiv, weil sie dann Teil Ihrer Nachweisführung gegenüber Prüfern ist und nicht nur ein Arbeitsstand.
Die Tabelle als Nachweis dessen aufbewahren, was gedruckt wurde
Ist der Auftrag durch, frieren Sie die Datei ein und legen Sie sie zum Auftrag, zusammen mit dem Datum, der Auflagenhöhe und dem Namen der Person, die freigegeben hat.
Nehmen Sie das Exportdatum auf, die verwendeten Generator-Einstellungen, Druckdienstleister und Auftragsnummer, die produzierte Menge und den Verbleib des Materials. Benennen Sie die Datei nach der Chargenkennung, damit sie sich ausgehend von jedem einzelnen Etikett finden lässt.
In zwei Jahren schickt ein Techniker das Foto eines unlesbaren Etiketts, auf dem die Inventarnummer noch erkennbar ist. Ist die Tabelle archiviert, ist die Antwort ein Nachschlagen. Ist sie es nicht, ist die Antwort geraten.
Frieren Sie Ihren nächsten Export ein, bevor er zur Druckerei geht, und nehmen Sie den Schritt "dekodieren und vergleichen" vor der Freigabeunterschrift in die Auftragscheckliste auf.
