Dividir texto en columnas equilibradas
Divida un bloque de texto en el número elegido de columnas equilibradas sin contar, cortar ni reorganizar líneas a mano.
Ejecutar — gratis
El resultado mantiene cada línea en su orden original, conserva los espacios vacíos intencionales y devuelve tanto la lista de líneas de cada columna como un texto listo para mostrar. Resulta útil para programas, listas, guiones, etiquetas y cualquier material organizado por líneas que necesite una presentación paralela limpia. La misma operación determinista puede ejecutarse en el navegador o automatizarse mediante la API.
Convierta una lista larga en un diseño equilibrado
Pegue el texto completo y elija cuántas columnas necesita la presentación final. El divisor trata el contenido como una secuencia ordenada de líneas y la reparte en grupos contiguos cuyos tamaños difieren como máximo en una línea. Cuando la división no es exacta, las primeras columnas reciben las líneas sobrantes. Por ejemplo, siete líneas divididas en tres columnas forman grupos de tres, dos y dos. Así, el resultado es predecible y se evita el desequilibrio visual que causaría acumular todos los restos en la última columna. Cada columna devuelta incluye su posición desde uno, una lista de sus líneas y un texto unido con saltos de línea. Use la lista para representar elementos o celdas, y el texto para insertar una columna completa en un campo de texto sin formato. El orden de lectura original se mantiene de la primera columna a la última, sin ordenar ni interpretar el contenido.
Comprenda el tratamiento de líneas y espacios vacíos
Los límites de línea se reconocen tanto si la entrada usa saltos de Unix como terminaciones de Windows o separadores antiguos de retorno de carro. La salida normaliza el texto combinado de cada columna con saltos de línea, lo que ofrece a los scripts un resultado estable entre sistemas operativos. Las líneas vacías tienen significado y se conservan como cadenas vacías; también cuentan para equilibrar, pues eliminarlas podría alterar párrafos, versos, formularios o notas espaciadas cuidadosamente. Incluso un texto vacío representa una línea vacía, de acuerdo con el comportamiento coherente de la división de campos de texto. También se respeta exactamente el número de columnas solicitado. Si pide más columnas que líneas, las adicionales se devuelven con una lista y un texto vacíos. Esta precisión ayuda cuando el diseño exterior ya tiene un número fijo de paneles. No se ajustan, miden, dividen ni trasladan palabras entre líneas: prepare antes cualquier ajuste necesario.
Represente, exporte o automatice el resultado con seguridad
En una interfaz paralela, recorra las columnas devueltas en orden y coloque cada una en un contenedor del mismo ancho. Dentro de una columna, represente las líneas de la lista para conservar filas vacías explícitas o muestre el texto en un elemento preformateado. Un flujo de impresión puede convertir la misma estructura en columnas de página, etiquetas, tarjetas de apoyo o una plantilla documental. Como el algoritmo es determinista y no usa red, valores aleatorios ni marcas de tiempo, una entrada idéntica siempre genera la misma salida. Por ello sirve para sistemas de compilación, procesos editoriales, pruebas repetibles y transformaciones almacenadas en caché. La validación es estricta: el texto debe ser una cadena y la cantidad de columnas, un entero de al menos uno. Los valores inválidos fallan en vez de redondearse o adivinarse. Para tareas rápidas puede usar el navegador; mediante la API, la solicitud cuesta $0.002 cuando necesite automatizar el proceso.
Qué puede hacer con ella
Dé formato a un programa de eventos
Divida una lista ordenada de ponentes o sesiones en bloques equilibrados para un programa compacto impreso o en pantalla.
Cree una lista de control en varias columnas
Convierta tareas organizadas por líneas en un número fijo de paneles, conservando cada elemento y su secuencia original.
Prepare diseños editoriales
Envíe grupos equilibrados de líneas a una plantilla documental, un generador de etiquetas, un sitio estático o una presentación.
Preguntas frecuentes
¿Cómo se distribuyen las líneas sobrantes?
Los tamaños difieren como máximo en una línea. Si la división no es exacta, cada primera columna recibe una línea adicional.
¿Se conservan las líneas vacías?
Sí. Permanecen como cadenas vacías y cuentan como líneas, por lo que no se pierden los espacios entre párrafos ni los huecos intencionales.
¿Qué ocurre si solicito más columnas que líneas?
Se devuelve la cantidad solicitada. Las columnas sin líneas asignadas contienen una lista de líneas vacía y un texto vacío.
¿Ajusta las líneas largas a un ancho?
No. Solo equilibra las líneas existentes; no mide el ancho visible, ajusta palabras, divide con guiones ni modifica el texto.
¿Cuánto cuesta una solicitud de API?
Cada solicitud de API cuesta $0.002. El mismo divisor determinista también puede ejecutarse directamente en el navegador.
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/split-columns \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Alpha\nBravo\nCharlie\nDelta\nEcho\nFoxtrot\nGolf","column_count":3}'const res = await fetch("https://api.kit.forhosting.com/text/split-columns", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "Alpha\nBravo\nCharlie\nDelta\nEcho\nFoxtrot\nGolf",
"column_count": 3
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/text/split-columns",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "Alpha\nBravo\nCharlie\nDelta\nEcho\nFoxtrot\nGolf",
"column_count": 3
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/text/split-columns", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"Alpha\\nBravo\\nCharlie\\nDelta\\nEcho\\nFoxtrot\\nGolf","column_count":3}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"Alpha\nBravo\nCharlie\nDelta\nEcho\nFoxtrot\nGolf","column_count":3}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/text/split-columns", 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
{
"text": "Alpha\nBravo\nCharlie\nDelta\nEcho\nFoxtrot\nGolf",
"column_count": 3
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "text.split_columns",
"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_tokens | 20000 |
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. |