Markdown-Tabellen-Generator
Markdown-Tabelle aus CSV, TSV oder JSON erzeugen oder eine vorhandene neu ausrichten, mit Spaltenausrichtung und CJK-genauer Auffüllung. Im Browser.
Als CSV gelesen. Nichts hat die Eingabe eindeutig gemacht, das ist also der Rückfall — wählen Sie oben ein Format, falls das falsch ist.
Spaltenausrichtung
| city | country | population |
| --------- | ------- | ---------- |
| 東京 | Japan | 37400068 |
| Delhi | India | 28514000 |
| São Paulo | Brazil | 21650000 |Spalten: 3 · Zeilen: 3
Vier Eingaben, eine Ausgabe
Eine Markdown-Tabelle ist leicht geschrieben und mühsam gepflegt. Ein einziges Wort mehr in einer Zelle bringt jeden senkrechten Strich darunter aus der Reihe, und eine Tabelle aus Daten zu bauen, die man schon hat — ein Abfrageergebnis, ein Tabellenexport, eine API-Antwort — heißt, alles noch einmal von Hand abzutippen. Dieses Werkzeug nimmt die Daten in der Form, in der sie vorliegen, und gibt eine saubere Tabelle im Markdown-Dialekt von GitHub zurück.
Es liest vier Formate und sagt Ihnen, für welches es sich entschieden hat, statt still zu entscheiden:
- Eine Markdown-Tabelle, sodass eine aus der Reihe geratene Tabelle einfach wieder eingefügt und geradegerückt wird.
- CSV, nach RFC 4180 geparst — ein Feld in Anführungszeichen darf Kommas, Anführungszeichen und sogar Zeilenumbrüche enthalten, und alles davon überlebt.
- TSV, also das, was beim Kopieren eines Bereichs aus einer Tabellenkalkulation oder einem Datenbank-Client herauskommt.
- Ein JSON-Array, entweder aus Objekten (die Schlüssel werden zu Spalten) oder aus Arrays (die erste Zeile wird zur Kopfzeile).
Die Erkennung sucht zuerst das eindeutigste Indiz: eine öffnende eckige Klammer kann nur JSON sein, eine Zeile aus Bindestrichen nur eine Markdown-Trennzeile, ein Tabulator in der ersten Zeile nur TSV. Kommagetrennt bleibt übrig, wird also als Rückfall gemeldet und nicht als Fund — musste das Werkzeug raten, sagt es das, und die Formatauswahl sticht es.
Die Ausgabe ist Markdown und sonst nichts. Eine Tabelle zurück nach CSV oder JSON zu wandeln ist eine andere Aufgabe, und dafür hat diese Seite bereits Werkzeuge; ein zweiter Allzweckkonverter würde ihnen nur Konkurrenz machen und diese Seite schwerer erklärbar machen.
Eine Zelle wird nach Breite aufgefüllt, nicht nach Länge
Die Striche auszurichten heißt, jede Zelle einer Spalte auf dieselbe Breite aufzufüllen, und dafür muss man wissen, wie breit eine Zelle ist. Die naheliegende Antwort — Zeichen zählen — ist für die meisten Schriftsysteme der Welt falsch, und zwar in beide Richtungen.
Eine Schrift mit fester Zeichenbreite ist nicht ein Zeichen, eine Spalte. Ein chinesisches oder japanisches Ideogramm, ein Kana, eine Hangul-Silbe, ein lateinischer Buchstabe in voller Breite und fast jedes Emoji werden genau doppelt so breit gezeichnet wie ein lateinischer Buchstabe. Ein kombinierendes Zeichen — ein Akzent, ein hebräischer Vokalpunkt, ein arabisches diakritisches Zeichen — wird über den Buchstaben davor gezeichnet und nimmt gar keine Breite ein. Füllt man nach Zeichenzahl auf, kommt eine Spalte mit Japanisch zu kurz heraus und eine mit akzentuiertem Text zu lang.
'日本語'.length // 3 UTF-16 code units
[...'日本語'].length // 3 code points
displayWidth('日本語') // 6 columns in the editorDeshalb wird die Auffüllung in Anzeigespalten gemessen. Der Text wird zuerst in Graphem-Cluster zerlegt — das, was eine Leserin als ein Zeichen zählt, sodass ein aus mehreren Codepunkten zusammengesetztes Emoji eine Einheit bleibt — und jedes Cluster gegen die Eigenschaft East_Asian_Width aus der Unicode-Zeichendatenbank gemessen. Diese Eigenschaft ist das Einzige, was ein Browser nicht selbst beantworten kann: JavaScript gibt Kategorie, Schrift und Groß- und Kleinschreibung über reguläre Ausdrücke preis, diese aber nicht, weshalb eine kleine Tabelle der breiten Bereiche mit der Seite ausgeliefert wird. Alles andere kommt aus der Engine.
Eine Kategorie wird bewusst als schmal behandelt. Unicode markiert eine Reihe von Zeichen — Rahmengrafik, einige griechische und kyrillische Buchstaben, mehrere Satzzeichen — als „mehrdeutig“: breit in einer alten ostasiatischen Schrift, schmal überall sonst. Eine Markdown-Datei wird in einem Editor mit lateinischer Standardschrift gelesen, also zählen sie als eine Spalte — genau so, wie es die Terminals und Editoren tun, in denen Sie die Datei öffnen werden.
Was eine Markdown-Tabelle nicht aufnehmen kann
Das Format hat zwei harte Grenzen, und echte Daten stoßen an beide. Eine Zelle kann keinen nackten senkrechten Strich enthalten, denn genau der trennt die Zellen; er muss maskiert geschrieben werden. Und eine Tabellenzeile ist genau eine Zeile, eine Zelle kann also überhaupt keinen Zeilenumbruch enthalten — den ein CSV-Feld ganz selbstverständlich haben darf.
Beides wird umgeschrieben, und jede Umschreibung wird mit der Zahl der betroffenen Zellen und der Position der ersten gemeldet. Darum geht es: ein Werkzeug, das Ihre zweizeilige Adresse stillschweigend zu einer Zeile macht, hat Ihre Daten beschädigt, ohne es zu sagen. Ein Zeilenumbruch wird standardmäßig zu einem Umbruch-Tag, das GitHub, GitLab und die meisten Renderer als neue Zeile in der Zelle anzeigen; entfernt Ihr Renderer HTML, stellen Sie stattdessen auf Leerzeichen um.
Eine Zeile, die länger als die Kopfzeile ist, ist der dritte Fall. Der Markdown-Dialekt von GitHub verwirft die überzähligen Zellen einfach, und das verliert Daten im Stillen. Hier wird die Tabelle stattdessen verbreitert, mit leeren Kopfzellen, und die Abweichung gemeldet — eine merkwürdig aussehende Kopfzeile, die man korrigieren kann, ist besser als eine Spalte, von der man nie erfährt. Eine Zeile, die kürzer als die Kopfzeile ist, wird mit leeren Zellen aufgefüllt und ebenso gemeldet.
Mit umgekehrten Schrägstrichen wird hier sorgfältiger umgegangen als in den meisten Werkzeugen. Ein Schrägstrich wird nur dort verdoppelt, wo er den folgenden senkrechten Strich verschlucken könnte: vor einem Strich im Text oder ganz am Ende einer Zelle, wo der Trenner kommt. Überall sonst bleibt er stehen, sodass ein Windows-Pfad in einer Zelle lesbar bleibt, statt zu einer Reihe doppelter Schrägstriche zu werden.
Die Ausrichtung wohnt in der Trennzeile
Die Zeile aus Bindestrichen unter der Kopfzeile erledigt zwei Aufgaben. Sie macht den Block überhaupt erst zu einer Tabelle, und ihre Doppelpunkte legen die Ausrichtung jeder Spalte fest: ein Doppelpunkt links richtet links aus, rechts richtet rechts aus, auf beiden Seiten zentriert. Ohne Doppelpunkt nimmt der Renderer seinen eigenen Standard, und der ist in jeder Implementierung links — was aber nicht dasselbe ist, wie links zu verlangen.
Jede Spalte hat hier ihre eigene Einstellung, denn so wird Ausrichtung tatsächlich benutzt: Text nach links, Zahlen nach rechts, eine Statusspalte zentriert. Und wenn Sie eine Tabelle einfügen, die bereits eine Ausrichtung trägt, wird diese aus der Trennzeile gelesen und in den Einstellungen angezeigt, sodass das Neuformatieren einer bestehenden Tabelle die Arbeit anderer nie stillschweigend verwirft.
Auch die Auffüllung folgt der Ausrichtung. Eine rechtsbündige Spalte wird links aufgefüllt, sodass der Quelltext so aussieht, wie die gerenderte Tabelle aussehen wird. Markdown ignoriert diese Leerzeichen vollständig, und genau deshalb kann man sie kostenlos dafür ausgeben, den Quelltext lesbar zu machen.
Aufgefüllt oder kompakt — und warum Text von rechts nach links anders ist
Auffüllen lohnt sich in einem Dokument, das ein Mensch bearbeitet, und kostet etwas in einem Repository. Jede Zelle, die wächst, füllt ihre ganze Spalte neu auf, sodass eine Änderung an einem Wort im Diff als Änderung an jeder Zeile der Tabelle erscheint. Die kompakte Form schreibt die schmalste zulässige Tabelle — keine Auffüllung, drei Bindestriche je Spalte — und hält den Diff auf die Zeilen begrenzt, die sich wirklich geändert haben. Beide werden identisch gerendert. Die Striche am Anfang und Ende jeder Zeile sind im Markdown von GitHub optional, aber für manche älteren Renderer Pflicht, deshalb sind sie ein Schalter und keine Entscheidung.
In einer Tabelle mit Hebräisch oder Arabisch kann Auffüllen überhaupt nicht funktionieren, und das Werkzeug sagt das, statt so zu tun als ob. Die Leerzeichen werden richtig gezählt, aber ein Editor setzt eine gemischte Zeile nach dem bidirektionalen Algorithmus: der Abschnitt von rechts nach links wird umgeordnet, und die Striche um ihn herum wandern mit. Die Zeichen stehen an den richtigen Stellen, und die Striche wirken trotzdem nicht ausgerichtet, weil visuelle und logische Position in einer solchen Zeile nicht dasselbe sind. Dagegen hilft nichts, deshalb meldet das Werkzeug rechts-nach-links-Text in einer Zelle und schlägt die kompakte Form vor, in der es keine Ausrichtung gibt, die enttäuschen könnte.
Aus demselben Grund wird die Markdown-Ausgabe auf dieser Seite immer von links nach rechts gezeigt, auch wenn Sie die Seite auf Hebräisch oder Arabisch lesen. Es ist Quelltext, und Quelltext hat eine eigene Richtung.
Wo das läuft
Alles passiert in Ihrem Browser. Die Tabelle wird auf Ihrem eigenen Rechner geparst, vermessen und neu gebaut, und nichts, was Sie einfügen, wird hochgeladen, gespeichert oder protokolliert — was zählt, denn die Tabellen, die man neu formatieren muss, sind meist Abfrageergebnisse und Exporte und keine öffentlichen Daten.
Häufig gestellte Fragen
- Werden meine Daten an einen Server geschickt?
- Nein. Das Parsen, die Breitenmessung und die Ausgabe werden alle in Ihrem Browser berechnet, und nichts, was Sie einfügen, wird hochgeladen oder protokolliert.
- Wie mache ich aus einer CSV eine Markdown-Tabelle?
- Einfügen. Das Werkzeug erkennt kommagetrennten Text, nimmt die erste Zeile als Kopfzeile und gibt eine ausgerichtete Markdown-Tabelle zurück. Felder in Anführungszeichen mit Kommas, Anführungszeichen oder Zeilenumbrüchen werden korrekt behandelt, und alles, was für das Format umgeschrieben werden musste, wird gemeldet.
- Warum steht meine Tabelle mit japanischem oder chinesischem Text immer noch nicht gerade?
- Prüfen Sie die Schrift. Die Auffüllung setzt eine Schrift mit fester Zeichenbreite voraus, in der ein Ideogramm genau doppelt so breit ist wie ein lateinischer Buchstabe — genau das nutzen Terminals und Code-Editoren. In einer Proportionalschrift oder einer Schrift, deren CJK-Glyphen nicht exakt doppelt so breit sind, richtet keine Auffüllung die Spalten aus: nehmen Sie dort die kompakte Form.
- Was passiert mit einem Zeilenumbruch innerhalb einer Zelle?
- Er wird standardmäßig zu einem Umbruch-Tag, denn eine Zeile einer Markdown-Tabelle ist genau eine Zeile und kann keinen echten Umbruch enthalten. Stellen Sie auf Leerzeichen um, wenn Ihr Renderer HTML entfernt. In beiden Fällen meldet das Werkzeug, welche Zellen es geändert hat.
- Warum fügt meine Zeile mit überzähligen Zellen eine leere Spalte hinzu?
- Weil die Alternative wäre, diese Zellen zu verlieren. Der Markdown-Dialekt von GitHub verwirft alles jenseits der Kopfzeilenbreite, deshalb wird die Tabelle stattdessen mit leeren Kopfzellen verbreitert und die Abweichung gemeldet. Löschen Sie die Spalte oder benennen Sie sie, sobald Sie gesehen haben, was darin stand.
- Sollte ich die aufgefüllte oder die kompakte Form nehmen?
- Aufgefüllt für ein Dokument, das Menschen lesen und von Hand bearbeiten — eine README, eine Entwurfsnotiz — weil der Quelltext lesbar bleibt. Kompakt für alles unter Versionskontrolle, dessen Tabelle sich oft ändert: mit Auffüllung füllt eine bearbeitete Zelle die ganze Spalte neu auf und erscheint im Diff, als hätten sich alle Zeilen geändert.
- Brauche ich die Striche am Anfang und Ende jeder Zeile?
- Der Markdown-Dialekt von GitHub verlangt sie nicht, die meisten modernen Renderer auch nicht. Einige ältere Parser schon, und sie machen eine von Hand bearbeitete Tabelle lesbarer, deshalb sind sie standardmäßig an und lassen sich abschalten.
- Warum kann das Werkzeug eine Tabelle mit Hebräisch oder Arabisch nicht ausrichten?
- Weil der Editor die Zeile umordnet. Das bidirektionale Layout stellt den Abschnitt von rechts nach links in visueller Reihenfolge dar, und die Striche um ihn herum wandern mit, sodass die Auffüllung rechnerisch stimmt und optisch nutzlos ist. Das Werkzeug meldet es und schlägt die kompakte Form vor, statt eine Tabelle zu erzeugen, die kaputt aussieht.