Alinear texto en columnas de ancho fijo
Convierta filas estructuradas de texto en columnas limpias de ancho fijo sin contar espacios a mano.
Ejecutar — gratis
Corre en su navegador. Gratis y sin límite: sus datos no salen de esta página.
Indique las filas y el número previsto de columnas; el formateador medirá el valor más ancho de cada posición y completará cada campo hasta esa anchura. El resultado incluye anchos reutilizables, campos rellenados y un bloque multilínea listo para mostrar. Las filas incoherentes se rechazan para evitar resultados ambiguos, por lo que esta función resulta útil en registros, informes de consola, correos de texto plano y documentación.
Prepare las filas con un contrato de columnas claro
Comience con una lista de filas, cada una formada por una lista de campos de texto. Establezca column_count con el número exacto de campos que debe contener cada fila. La primera fila puede ser una cabecera, pero no es obligatoria ni recibe un trato especial: interviene en el cálculo igual que los demás valores. Conserve el texto tal como desea mostrarlo, incluidas mayúsculas y espacios internos intencionados. Las cadenas vacías son campos válidos y se completan según la anchura determinada por otros valores de su columna. El recuento explícito protege cuando se combinan datos de distintas fuentes. Si una fila tiene campos de más o de menos, la solicitud devuelve un error que identifica la fila y el recuento real. Así, un valor ausente no desplaza silenciosamente los campos posteriores. Para obtener una salida previsible, normalice tabulaciones y saltos de línea dentro de los campos antes de enviarlos.
Comprenda cómo se miden y rellenan las columnas
El formateador examina cada columna por separado y registra la mayor cantidad de caracteres encontrada en esa posición. Después añade espacios normales al final de cada campo hasta alcanzar la anchura registrada. Entre campos contiguos se inserta además un espacio separador. La anchura se mide por puntos de código Unicode, no por unidades UTF-16 de JavaScript, para que los caracteres suplementarios habituales no se cuenten dos veces. El cálculo evita suposiciones propias de terminales sobre marcas combinadas, tabulaciones, emoji o caracteres asiáticos anchos, cuya representación depende de la fuente. Con letras, números y signos ordinarios en una fuente monoespaciada, las líneas quedan alineadas. También se rellena el último campo, ya que el contrato se aplica a todos los campos. La respuesta ofrece tanto las matrices rellenadas como el texto unido, sin obligar a analizar de nuevo las líneas formateadas.
Integre el resultado en flujos de texto fiables
Elija la salida adecuada para el siguiente paso. Use aligned_text si necesita un bloque completo para una consola, un bloque de código, un informe de texto plano o un mensaje con fuente monoespaciada. Use aligned_rows si desea añadir prefijos, bordes, sangrías o colores conservando el relleno calculado. La matriz column_widths permite que otro sistema formatee filas adicionales con las mismas dimensiones. La transformación no recorta valores, ordena filas, deduce cabeceras, trunca contenido ni cambia mayúsculas. Por ello es segura para identificadores y datos con espacios significativos. Los límites publicados de filas, columnas y caracteres evitan el consumo de memoria sin control. Como no hay red, azar, reloj ni comparaciones dependientes de la configuración regional, una misma entrada JSON produce siempre la misma salida JSON. La automatización mediante API cuesta $0.002 por solicitud.
Qué puede hacer con ella
Formatear informes de consola
Alinee nombres, estados, duraciones e identificadores antes de escribir un informe monoespaciado fácil de revisar.
Crear resúmenes de texto plano
Genere tablas legibles para correo, incidencias, documentación o chats que no admiten tablas HTML.
Validar exportaciones por filas
Detecte campos ausentes o sobrantes mientras crea una vista previa alineada y estable.
Preguntas frecuentes
¿Cuánto cuesta una solicitud?
Cada solicitud API cuesta $0.002. La página también puede ejecutar el formateador localmente en el navegador.
¿Qué ocurre si una fila tiene un número incorrecto de campos?
La solicitud falla con un error de entrada que indica la primera fila incoherente, su recuento y el esperado.
¿Se recortan o modifican los valores?
No. El texto original se conserva; solo se añaden espacios finales de relleno y separación.
¿Admite texto Unicode?
Sí. La anchura usa puntos de código Unicode, aunque no estima el comportamiento visual de glifos anchos o combinados.
¿También se rellena la última columna?
Sí. Cada campo se completa hasta el valor más ancho de su columna, incluido el último de cada fila.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su 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)Ejemplo de solicitud
{
"rows": [
[
"Name",
"Role",
"City"
],
[
"Ada",
"Engineer",
"London"
],
[
"Grace Hopper",
"Admiral",
"New York"
]
],
"column_count": 3
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "text.text_column_align",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_rows | 10000 |
max_columns | 100 |
max_field_chars | 10000 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |