CSV gegen ein Spaltenschema prüfen und Fehler finden
Eine CSV-Datei kann ordentlich aussehen und dennoch Werte enthalten, die einen Import, einen Bericht oder eine Datenpipeline scheitern lassen.
Im Browser ausführen – kostenlos
Läuft direkt in Ihrem Browser – kostenlos. Ihre Datei verlässt Ihren Browser nicht und wird an keinen Server übertragen.
Dieser Validator vergleicht die Kopfzeile mit den von Ihnen erwarteten Spalten und prüft jede Datenzeile nach eindeutigen Regeln für Text, Zahlen, Ganzzahlen, boolesche Werte und ISO-Daten. Statt beim ersten fehlerhaften Feld abzubrechen, liefert er eine vollständige Liste aller Verstöße mit CSV-Zeilennummer und Spaltenname. Sie können ihn kostenlos im Browser ausführen oder die API für $0.002 pro Anfrage in einem automatisierten Ablauf einsetzen.
Definieren Sie zuerst den Datenvertrag
Beschreiben Sie jede erwartete Spalte mit drei Eigenschaften: dem genauen Namen, dem Typ und der Angabe, ob sie erforderlich ist. Die Reihenfolge ist wichtig, weil CSV-Daten positionsabhängig sind. Eine Datei mit der Kopfzeile name,id lässt sich nicht sicher wie id,name behandeln, obwohl beide Namen vorkommen. Deshalb vergleicht der Validator zunächst die vollständige Kopfzeile mit dem Schema. Eine fehlende, zusätzliche, umbenannte, doppelte oder verschobene Spalte führt zu einem Eingabefehler und nicht zu einem irreführenden Prüfbericht. Unterstützt werden string, number, integer, boolean und date. Zahlen dürfen dezimal oder wissenschaftlich notiert sein, Ganzzahlen müssen sichere ganze Zahlen sein, boolesche Werte akzeptieren true oder false unabhängig von der Großschreibung, und Datumswerte verwenden YYYY-MM-DD mit echter Kalenderprüfung. Ein Textfeld akzeptiert jeden nicht leeren Wert; required bestimmt davon unabhängig, ob eine leere Zelle erlaubt ist. Eine optionale Ganzzahl darf also fehlen, muss aber bei vorhandenem Wert weiterhin gültig sein.
Lesen Sie Zeilen- und Spaltenverstöße richtig
Das Ergebnis beginnt mit dem Kennzeichen valid sowie den Summen der geprüften Zeilen, Spalten und Verstöße. Wenn valid den Wert false hat, beschreibt das Array violations jedes Problem durch Zeilennummer, Spaltenname, stabilen Code und verständliche Meldung. Die Nummerierung entspricht der CSV-Datei: Zeile 1 ist die Kopfzeile, der erste Datensatz steht in Zeile 2. So können Sie die Quelldatei öffnen und direkt zur gemeldeten Stelle wechseln. Ein required-Verstoß bedeutet, dass eine vorgeschriebene Zelle leer ist. Ein type-Verstoß bedeutet, dass ein vorhandener Wert nicht dem deklarierten Typ entspricht. Zeilen mit zu vielen oder zu wenigen Feldern erhalten column_count unter der besonderen Spalte _row, weil sich der Strukturfehler keiner einzelnen benannten Zelle zuverlässig zuordnen lässt. Der Parser verarbeitet Kommas in Anführungszeichen, maskierte Anführungszeichen, eingebettete Zeilenumbrüche und CRLF-Dateien. Gültige Satzzeichen in einem zitierten Feld verschieben daher keine nachfolgenden Spalten.
Prüfen Sie Dateien direkt am Eingang
Validieren Sie eine Datei möglichst nahe an dem Punkt, an dem sie in Ihr System gelangt. Sie können den Upload eines Partners ablehnen, bevor er die Datenbank erreicht, einen geplanten Export vor nachgelagerten Berechnungen prüfen oder in einem Importwerkzeug alle korrigierbaren Zellen gemeinsam anzeigen. Da der Algorithmus deterministisch arbeitet und keine Netzwerkverbindung nutzt, erzeugen dieselbe CSV-Datei und dasselbe Schema stets denselben Bericht. Die Ausgabe eignet sich damit sowohl für automatische Sperren als auch für interaktive Bereinigungen. Behandeln Sie eine abweichende Kopfzeile anders als Zeilenverstöße: Erstere zeigt, dass die Datei nicht dem erwarteten Datensatz entspricht; Letztere betreffen erkennbare Datensätze, die korrigiert werden müssen. Der Validator meldet Fehler nur und bearbeitet, konvertiert, kürzt oder ersetzt keine Quellwerte. Falls Ihre Pipeline eine Normalisierung verlangt, führen Sie diese bewusst als separaten Schritt aus und prüfen Sie anschließend erneut gegen den tatsächlich vom Ziel verlangten Vertrag.
Anwendungsfälle
Qualitätskontrolle vor dem Import
Lehnen Sie CSV-Uploads von Kunden oder Partnern vor dem Datenbankimport mit genauen Zeilen- und Spaltenhinweisen ab.
Überwachung regelmäßiger Exporte
Erkennen Sie geänderte Kopfzeilen, leere Pflichtfelder und Werte, die nicht mehr dem deklarierten Typ entsprechen.
Gebündelte Fehlerkorrektur
Geben Sie alle erkennbaren Verstöße gemeinsam aus, damit eine Fachkraft die Datei in einem Durchgang berichtigen kann.
Häufige Fragen
Muss die CSV-Kopfzeile dieselbe Reihenfolge wie das Schema haben?
Ja. Namen und Reihenfolge müssen exakt übereinstimmen; andernfalls schlägt die Anfrage mit einem Eingabefehler zur Kopfzeile fehl.
Welche Spaltentypen werden unterstützt?
Das Schema unterstützt string, number, integer, boolean und date. Datumswerte müssen echte Kalendertage im Format YYYY-MM-DD sein.
Bricht die Prüfung nach der ersten fehlerhaften Zeile ab?
Nein. Nach erfolgreicher Kopfzeilenprüfung werden alle Datenzeilen untersucht und sämtliche gefundenen Verstöße gemeinsam zurückgegeben.
Wie werden Kommas und Zeilenumbrüche in Anführungszeichen behandelt?
Zitierte Felder dürfen Kommas, maskierte doppelte Anführungszeichen und Zeilenumbrüche enthalten, ohne zusätzliche Spalten zu erzeugen.
Verändert oder konvertiert das Werkzeug CSV-Werte?
Nein. Es meldet ausschließlich Verstöße und kürzt, konvertiert, ergänzt oder überschreibt die übermittelte CSV-Datei nie.
Für Entwickler — API-Zugang
Alles auf dieser Seite ist auch per API verfügbar. Dieser Abschnitt richtet sich an Teams, die es in ihre eigenen Systeme einbinden möchten; alle anderen nutzen einfach das Tool oben.
Endpunkt
Authentifizierung per Bearer-Token. Ein einziger POST stellt die Aufgabe in die Warteschlange; das Ergebnis erhalten Sie per Webhook oder über einen signierten Link.
Aufruf aus Ihrem Stack
curl -X POST https://api.kit.forhosting.com/data/csv-validate-schema \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"csv":"id,email,active\n1,ada@example.com,true\n2,grace@example.com,false","schema":[{"name":"id","type":"integer","required":true},{"name":"email","type":"string","required":true},{"name":"active","type":"boolean","required":true}]}'const res = await fetch("https://api.kit.forhosting.com/data/csv-validate-schema", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"csv": "id,email,active\n1,ada@example.com,true\n2,grace@example.com,false",
"schema": [
{
"name": "id",
"type": "integer",
"required": true
},
{
"name": "email",
"type": "string",
"required": true
},
{
"name": "active",
"type": "boolean",
"required": true
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/data/csv-validate-schema",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"csv": "id,email,active\n1,ada@example.com,true\n2,grace@example.com,false",
"schema": [
{
"name": "id",
"type": "integer",
"required": true
},
{
"name": "email",
"type": "string",
"required": true
},
{
"name": "active",
"type": "boolean",
"required": true
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/data/csv-validate-schema", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"csv":"id,email,active\\n1,ada@example.com,true\\n2,grace@example.com,false","schema":[{"name":"id","type":"integer","required":true},{"name":"email","type":"string","required":true},{"name":"active","type":"boolean","required":true}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"csv":"id,email,active\n1,ada@example.com,true\n2,grace@example.com,false","schema":[{"name":"id","type":"integer","required":true},{"name":"email","type":"string","required":true},{"name":"active","type":"boolean","required":true}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/data/csv-validate-schema", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Beispiel-Anfrage
{
"csv": "id,email,active\n1,ada@example.com,true\n2,grace@example.com,false",
"schema": [
{
"name": "id",
"type": "integer",
"required": true
},
{
"name": "email",
"type": "string",
"required": true
},
{
"name": "active",
"type": "boolean",
"required": true
}
]
}Beispiel-Antwort
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "data.csv_validate_schema",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}Die API arbeitet asynchron: Sie erhalten sofort eine task_id. Polling ist mit 1 Anfrage pro Sekunde erlaubt.
Preis
Der Preis steht auf der Seite – keine Tokens, keine Credits. Fehlgeschlagene Aufgaben werden nicht berechnet.
Limits
max_mb | 25 |
Fehler
| HTTP | Code | Bedeutung |
|---|---|---|
401 | unauthorized | Der API-Schlüssel fehlt oder ist ungültig – prüfen Sie den Authorization-Header (Bearer). |
402 | insufficient_balance | Ihr Guthaben reicht für diese Aufgabe nicht aus – Aufladungen verfallen nicht. |
404 | unknown_type | Unbekannter Aufgabentyp – prüfen Sie das Feld „type“ gegen den Katalog. |
429 | rate_limited | Zu viele Anfragen – warten Sie kurz; Polling ist mit 1 Anfrage pro Sekunde erlaubt. |