Aligner du texte en colonnes à largeur fixe
Transformez des lignes de texte structurées en colonnes nettes de largeur fixe sans compter les espaces à la main.
Lancer gratuitement
Tout se passe dans votre navigateur : gratuit, sans envoi de vos données.
Fournissez les lignes et le nombre de colonnes attendu : le formateur mesure la valeur la plus large à chaque position, puis complète chaque champ jusqu’à cette largeur. Le résultat comprend les largeurs réutilisables, les champs complétés et un bloc multiligne prêt à afficher. Les lignes incohérentes sont refusées afin d’éviter toute sortie ambiguë, ce qui convient aux journaux, rapports en ligne de commande, courriels en texte brut et documents.
Préparez les lignes avec un contrat de colonnes précis
Commencez par une liste de lignes, chacune étant une liste de champs textuels. Définissez column_count sur le nombre exact de champs que chaque ligne doit contenir. La première ligne peut servir d’en-tête, mais ce n’est ni obligatoire ni traité spécialement : elle participe au calcul comme toute autre valeur. Conservez le texte exactement comme vous souhaitez l’afficher, y compris les majuscules et les espaces internes voulus. Une chaîne vide reste un champ valide et reçoit le complément déterminé par les autres valeurs de sa colonne. Le décompte explicite protège les assemblages provenant de plusieurs sources. Si une ligne contient trop ou trop peu de champs, la requête échoue avec une erreur qui indique la ligne et son nombre réel de champs. Une valeur manquante ne peut donc pas décaler silencieusement les suivantes. Pour un résultat prévisible, normalisez les tabulations et retours à la ligne présents dans les champs avant l’envoi.
Comprenez la mesure et le remplissage des largeurs
Le formateur étudie chaque colonne séparément et mémorise le plus grand nombre de caractères rencontré à cette position. Il ajoute ensuite des espaces ordinaires à la fin de chaque champ jusqu’à la largeur enregistrée, plus un espace séparateur entre deux champs voisins. La mesure repose sur les points de code Unicode plutôt que sur les unités UTF-16 de JavaScript, afin de ne pas compter deux fois certains caractères supplémentaires. Le calcul n’invente aucune règle propre aux terminaux pour les signes combinés, tabulations, emoji ou caractères asiatiques larges, dont l’affichage dépend de la police. Avec des lettres, nombres et signes courants dans une police à chasse fixe, les lignes restent alignées. Le dernier champ est également complété, car le contrat concerne tous les champs. La réponse livre à la fois les tableaux complétés et le texte assemblé, sans vous obliger à analyser de nouveau les lignes formatées.
Exploitez le résultat dans des flux de texte fiables
Choisissez la représentation adaptée à l’étape suivante. Utilisez aligned_text pour obtenir un bloc complet destiné à une console, un bloc de code, un rapport en texte brut ou un message à chasse fixe. Préférez aligned_rows si vous souhaitez ajouter préfixes, bordures, retraits ou couleurs tout en conservant le remplissage calculé. Le tableau column_widths permet à un autre système de présenter des lignes supplémentaires selon les mêmes dimensions. La transformation ne supprime aucun espace, ne trie pas les lignes, ne devine pas d’en-tête, ne tronque rien et ne change pas la casse. Elle préserve donc les identifiants et les données où les espaces comptent. Les limites publiées empêchent une consommation de mémoire illimitée. Sans réseau, hasard, horloge ni comparaison régionale, une entrée JSON identique produit toujours la même sortie JSON. L’automatisation par API coûte $0.002 par requête.
Cas d’usage
Mettre en forme des rapports en console
Alignez noms, états, durées et identifiants avant de produire un rapport à chasse fixe facile à parcourir.
Créer des synthèses en texte brut
Composez des tableaux lisibles pour les courriels, tickets, documents ou messageries sans tableau HTML.
Valider des exports structurés en lignes
Repérez les champs manquants ou superflus tout en générant un aperçu aligné et stable.
Questions fréquentes
Quel est le prix d’une requête ?
Chaque requête API coûte $0.002. La page peut aussi exécuter le formateur localement dans le navigateur.
Que se passe-t-il si une ligne a un mauvais nombre de champs ?
La requête échoue avec une erreur qui précise la première ligne incohérente, le nombre constaté et celui attendu.
Les valeurs sont-elles raccourcies ou modifiées ?
Non. Le texte original est préservé ; seuls des espaces finaux de remplissage et de séparation sont ajoutés.
Le texte Unicode est-il pris en charge ?
Oui. La largeur utilise les points de code Unicode, sans estimer le rendu particulier des glyphes larges ou combinés.
La dernière colonne reçoit-elle aussi des espaces ?
Oui. Chaque champ atteint la largeur de la valeur la plus longue de sa colonne, y compris dans la dernière colonne.
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
curl -X POST https://api.kit.forhosting.com/text/text-column-align \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"rows":[["Name","Role","City"],["Ada","Engineer","London"],["Grace Hopper","Admiral","New York"]],"column_count":3}'const res = await fetch("https://api.kit.forhosting.com/text/text-column-align", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"rows": [
[
"Name",
"Role",
"City"
],
[
"Ada",
"Engineer",
"London"
],
[
"Grace Hopper",
"Admiral",
"New York"
]
],
"column_count": 3
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/text/text-column-align",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"rows": [
[
"Name",
"Role",
"City"
],
[
"Ada",
"Engineer",
"London"
],
[
"Grace Hopper",
"Admiral",
"New York"
]
],
"column_count": 3
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/text/text-column-align", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"rows":[["Name","Role","City"],["Ada","Engineer","London"],["Grace Hopper","Admiral","New York"]],"column_count":3}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"rows":[["Name","Role","City"],["Ada","Engineer","London"],["Grace Hopper","Admiral","New York"]],"column_count":3}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/text/text-column-align", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemple de requête
{
"rows": [
[
"Name",
"Role",
"City"
],
[
"Ada",
"Engineer",
"London"
],
[
"Grace Hopper",
"Admiral",
"New York"
]
],
"column_count": 3
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "text.text_column_align",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Limites
max_rows | 10000 |
max_columns | 100 |
max_field_chars | 10000 |
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |