Dividere una riga CSV in righe rispettando i campi tra virgolette
Trasformi un record CSV orizzontale in un elenco verticale pulito senza separare i valori che contengono virgole.
Esegui gratis nel browser
Il parser riconosce campi tra virgolette, escape con virgolette doppie, colonne vuote e un terminatore di riga finale facoltativo. È utile quando una riga copiata da un foglio di calcolo, un’esportazione, un log o un comando deve diventare un elenco per un documento, un modulo, uno script o un confronto. La stessa conversione deterministica viene eseguita nel browser e tramite API, senza accesso alla rete né ipotesi sul formato.
Incolli un solo record CSV completo
Inserisca esattamente un record separato da virgole nel campo di testo. Un input semplice come <code>rosso,verde,blu</code> diventa tre righe nello stesso ordine. Le colonne vuote non vengono eliminate: <code>rosso,,blu,</code> produce quattro valori, compresi il secondo e l’ultimo vuoti. Questo comportamento è importante quando la posizione delle colonne ha un significato, perché rimuovere gli spazi vuoti sposterebbe ogni valore successivo. Può includere un solo terminatore finale LF, CRLF o CR, comodo quando la riga proviene da un file o dal terminale. Qualsiasi ulteriore separatore di record fuori da un campo tra virgolette viene rifiutato, poiché questa capacità è dedicata a una riga, non a un intero documento CSV. Non elimina gli spazi e non interpreta numeri, date, booleani o parole simili a valori nulli. Dopo la decodifica della sintassi CSV, i caratteri di ogni campo restano quelli forniti da Lei. Il risultato rimane quindi prevedibile per identificativi, etichette, indirizzi, celle e valori generati automaticamente, nei quali una pulizia implicita potrebbe distruggere contenuti significativi.
I campi tra virgolette vengono analizzati come CSV
Una semplice divisione in corrispondenza di ogni virgola fallisce appena un indirizzo, una descrizione o una frase contiene punteggiatura. Questa capacità utilizza un parser CSV a stati. Se un campo inizia con virgolette doppie, le virgole rimangono nel valore fino alla virgoletta di chiusura corrispondente. Due virgolette doppie consecutive all’interno del campo diventano una sola virgoletta letterale, secondo la comune regola di escape CSV. Anche le interruzioni di riga possono comparire in un campo tra virgolette e restano parte del valore. Dopo la virgoletta di chiusura sono validi soltanto una virgola o la fine del record; un carattere inatteso genera un errore di input chiaro invece di un elenco verosimile ma scorretto. Per lo stesso motivo, una virgoletta nel mezzo di un campo non citato viene rifiutata. Questi controlli rigorosi segnalano presto le esportazioni malformate ed evitano cambiamenti silenziosi del significato. Il parser compie un solo passaggio limitato, non utilizza servizi esterni e produce sempre lo stesso risultato a parità di testo.
Usi il risultato verticale dove le righe sono più pratiche
La risposta offre un risultato unito da interruzioni di riga per la copia immediata, un array lines per l’uso strutturato e il conteggio dei campi per una verifica rapida. Il testo unito è comodo in moduli multilinea, editor, allowlist, configurazioni, segnalazioni o intervalli a colonna singola. L’array è più sicuro nel codice perché conserva il confine di ogni campo CSV, inclusi quelli vuoti e i valori che contengono a loro volta un’interruzione di riga. Prima di automatizzare la conversione, confronti field_count con il numero di colonne previsto dal sistema di destinazione; una differenza spesso rivela una virgola mancante, una colonna finale in più o virgolette malformate all’origine. Scelga un parser CSV completo se l’input contiene intestazioni e più record, richiede il rilevamento del delimitatore o necessita di convalida dello schema. Questa capacità mirata è ideale quando la sorgente è già nota come singolo record separato da virgole e serve soltanto trasformare campi orizzontali in valori verticali. Ogni richiesta API costa $0.002; la versione nel browser esegue localmente la stessa analisi deterministica.
Casi d'uso
Trasformare celle del foglio in un elenco
Incolli una riga esportata e copi le colonne, una per riga, senza danneggiare le virgole tra virgolette.
Preparare un modulo multilinea
Converta un record CSV di identificativi o etichette nel formato a righe accettato da molti moduli massivi.
Esaminare un record problematico
Visualizzi ogni campo separatamente per controllare colonne vuote, virgolette escape e numero effettivo di valori.
Domande frequenti
Gestisce le virgole all’interno dei valori?
Sì. Le virgole in un campo correttamente racchiuso tra virgolette restano nel valore e non creano un’altra riga.
Come si esegue l’escape delle virgolette?
In un campo citato, due virgolette doppie consecutive diventano una sola virgoletta doppia letterale.
I campi CSV vuoti vengono conservati?
Sì. I campi vuoti iniziali, intermedi e finali restano presenti, così le posizioni delle colonne non cambiano.
Posso inviare un intero file CSV?
No. Invii esattamente un record. Per intestazioni e più righe utilizzi una capacità completa di conversione CSV.
Elimina gli spazi o converte i tipi di dati?
No. Gli spazi nei campi non citati vengono mantenuti e tutti i campi analizzati restano testo.
Quanto costa?
La versione nel browser funziona localmente e gratis. Una richiesta API costa $0.002.
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo stack
curl -X POST https://api.kit.forhosting.com/str/csv-row-to-lines \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"alpha,\"New York, NY\",\"She said \"\"hello\"\"\",omega"}'const res = await fetch("https://api.kit.forhosting.com/str/csv-row-to-lines", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "alpha,\"New York, NY\",\"She said \"\"hello\"\"\",omega"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/str/csv-row-to-lines",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "alpha,\"New York, NY\",\"She said \"\"hello\"\"\",omega"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/str/csv-row-to-lines", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"alpha,\\"New York, NY\\",\\"She said \\"\\"hello\\"\\"\\",omega"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"alpha,\"New York, NY\",\"She said \"\"hello\"\"\",omega"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/str/csv-row-to-lines", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Esempio di richiesta
{
"text": "alpha,\"New York, NY\",\"She said \"\"hello\"\"\",omega"
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.csv_row_to_lines",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Limiti
max_chars | 100000 |
max_fields | 10000 |
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |