Truncar en el medio
Encaje una ruta de 62 caracteres en 36 sin perder sus extremos: /Users/alex/Docum...engines/parse.js sigue mostrando la carpeta raíz y el nombre del archivo. Los puntos cuentan dentro del límite y usted decide cuánto del inicio conservar. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Ejemplo resuelto
- Longitud
- 36
- Texto
- /Users/alex/Docum...engines/parse.js
- Longitud original
- 62
- Longitud del resultado
- 36
- Puntos suspensivos
- ...
El truncado por el medio acorta una cadena hasta una longitud de visualización objetivo recortando el centro e insertando puntos suspensivos, de modo que el comienzo y el final sigan siendo legibles. Es el patrón que usan los gestores de archivos, las terminales, las migas de pan, los visores de registros y las celdas de tabla cuando una ruta o un nombre de archivo no cabe en la columna: usted sigue viendo el directorio raíz y el archivo real, o el inicio de un UUID y sus últimos dígitos. Introduzca el texto y la longitud entera que debe respetar el resultado; opcionalmente elija cuántos caracteres iniciales conservar y qué marcador de elipsis insertar. El resolvedor devuelve la cadena acortada, el prefijo y el sufijo conservados, si hubo corte, las longitudes original y final, y un mensaje breve.
Qué significa truncar por el medio frente a un corte de prefijo
El truncado por el medio es una restricción estricta de visualización con una forma distinta del truncado ordinario de prefijo. Un corte de prefijo conserva solo el inicio del origen y añade puntos suspensivos al final; resulta útil en frases y títulos, pero oculta lo que suele necesitarse en una ruta o un nombre de archivo: el nombre hoja, la extensión, la última carpeta o los dígitos finales de un identificador.
Truncar por el medio elimina un tramo contiguo del interior e inserta puntos suspensivos entre un prefijo y un sufijo conservados, de modo que ambos anclajes permanecen visibles. La longitud máxima que usted envía es la longitud máxima del resultado completo, incluidos los puntos suspensivos cuando hace falta un corte. Si el origen ya cabe, la herramienta lo devuelve sin cambios, pone truncated en false, coloca la cadena completa en start y deja end vacío para que quien invoca pueda omitir elementos de interfaz que implican contenido oculto.
Si no cabe, el resolvedor calcula un presupuesto de contenido igual a length menos la longitud de los puntos suspensivos. Cuando omite head, ese presupuesto se reparte lo más equitativamente posible y el carácter impar sobrante se asigna al inicio. Cuando fija head, se conservan esos caracteres iniciales (limitados al presupuesto) y el resto del presupuesto va al final, que es cómo obliga a un nombre largo a conservar su extensión y aún mostrar un breve indicio de directorio.
Las longitudes inferiores a uno nunca se aceptan: una vista previa de ancho cero no es un contrato útil para tablas, migas de pan o registros, y los límites negativos son siempre errores del cliente. El texto vacío con una longitud válida se admite y se devuelve vacío, sin puntos suspensivos, lo que evita que los flujos con campos de ruta opcionales fallen solo porque un nombre está en blanco.
Consejos prácticos para rutas, nombres de archivo y búsquedas afines
Utilice esta capacidad cuando la intención de búsqueda sea truncar por el medio, acortar un nombre de archivo con puntos suspensivos o mantener visibles el inicio y el final de una ruta en línea. Prefiera un reparto equilibrado para identificadores genéricos y UUID; prefiera un head pequeño cuando el token valioso está al final, como un informe con extensión; prefiera un head grande cuando el token valioso está al inicio, como un anfitrión o una letra de unidad que no debe ocultarse.
Una elipsis personalizada (un único carácter Unicode de elipsis horizontal, un punto medio con espacios o una etiqueta «más» entre corchetes) funciona cuando su longitud aún cabe en el presupuesto. Esta página no es un resumidor con IA, ni un truncador solo de prefijo para frases, ni un contador de párrafos o palabras, ni un normalizador de rutas que resuelve puntos o directorios personales.
Prefiera una herramienta de truncado de prefijo cuando el producto ya decidió conservar solo el comienzo de una frase; prefiera un acortador con LLM cuando necesite compresión que preserve el significado; prefiera esta capacidad cuando una persona deba reconocer ambos extremos de una ruta, un nombre de archivo, una URL o un identificador dentro de una cuadrícula fija de caracteres.
Qué puede hacer con ella
Columnas de gestor de archivos y migas de pan
Limite rutas absolutas largas para que una tabla o una miga de pan siga mostrando la raíz y el nombre hoja, en lugar de ocultar la extensión tras unos puntos suspensivos finales.
Visores de registro y artefactos de CI
Encaje rutas de artefactos de compilación y nombres de informes cargados en una línea de registro de ancho fijo, manteniendo legibles la última carpeta y la extensión.
Preguntas frecuentes
¿Cómo decide el truncado por el medio qué conservar?
Resta la longitud de la elipsis de su máximo y luego conserva un prefijo y un sufijo que juntos llenan ese presupuesto. Omita head para un reparto par (el resto impar va al inicio) o fije head para clavar cuántos caracteres iniciales conservar.
¿Es lo mismo que truncar el texto al final?
No. El truncado al final oculta el sufijo. El truncado por el medio sirve para rutas, nombres de archivo e identificadores en los que el comienzo y el final deben permanecer visibles dentro de una longitud fija.
¿Qué ocurre si length es cero o la elipsis no cabe?
Length debe ser un entero de al menos uno y, cuando hace falta un corte, la elipsis no puede ser más larga que esa longitud. Las tareas fallidas nunca se cobran.
¿Puede conservar más del nombre de archivo que del directorio?
Sí. Fije head en un entero pequeño para que la mayor parte del presupuesto restante vaya al final. Es el patrón habitual cuando la extensión o el nombre hoja es el token que una persona necesita reconocer.
¿Es gratuita la herramienta de truncar por el medio?
La herramienta del navegador es gratuita y se ejecuta en local.
Herramientas relacionadas
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/str/truncate-middle \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"/Users/alex/Documents/projects/kit-taller/src/engines/parse.js","length":36}'const res = await fetch("https://api.kit.forhosting.com/str/truncate-middle", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "/Users/alex/Documents/projects/kit-taller/src/engines/parse.js",
"length": 36
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/str/truncate-middle",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "/Users/alex/Documents/projects/kit-taller/src/engines/parse.js",
"length": 36
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/str/truncate-middle", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"/Users/alex/Documents/projects/kit-taller/src/engines/parse.js","length":36}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"/Users/alex/Documents/projects/kit-taller/src/engines/parse.js","length":36}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/str/truncate-middle", 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": "/Users/alex/Documents/projects/kit-taller/src/engines/parse.js",
"length": 36
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.truncate_middle",
"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_chars | 100000 |
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. |
Notas técnicas
Una longitud inferior a uno se rechaza con invalid_input para que la validación de formularios y el CI nunca traten un tope cero o negativo como un éxito. El proceso es lógica de cadenas puramente determinista (sin red, sin semillas aleatorias, sin reloj), así que el ejecutor gratuito del navegador y la API de prepago devuelven el mismo JSON en cada llamada.
Cómo llamar a la API y qué contiene la respuesta
Combine la llamada con su propio código de maquetación si necesita medir glifos en una fuente proporcional; este extremo cuenta índices de cadena de JavaScript, no píxeles renderizados, que es el mismo contrato que ya usan la mayoría de los formateadores de rutas en el servidor. Envíe un cuerpo JSON con el text obligatorio (alias input, value, string, s, content y body) y el length obligatorio (alias max_length, max, n, limit y max_len). La longitud debe ser un entero entre uno y cien mil inclusive; los valores inferiores a uno, los no enteros y los límites excesivos son invalid_input. El head opcional (alias start, keep_start y prefix) es un entero no negativo que indica cuántos caracteres iniciales se prefieren conservar; omítalo para un reparto equilibrado. El ellipsis opcional (alias marker, separator y gap) vale por defecto tres puntos ASCII y puede ser cualquier cadena de hasta treinta y dos caracteres; cuando se requiere truncado, la elipsis no puede ser más larga que length o la solicitud falla en lugar de inventar un marcador recortado. El texto debe permanecer dentro de cien mil caracteres para que una sola solicitud no agote la memoria del Worker ni del navegador. En caso de éxito, la respuesta devuelve input como la cadena original, text como la cadena final a mostrar, length como el máximo solicitado, original_length y result_length como recuentos de caracteres, truncated como booleano, ellipsis como el marcador usado, start como el prefijo conservado, end como el sufijo conservado y message como un breve resumen en inglés. Una validación fallida (falta text o length, un text que no es cadena, un length no entero o inferior a uno, un head negativo, una carga excesiva o una elipsis que no cabe bajo el límite cuando hace falta un corte) devuelve invalid_input y nunca se cobra. El precio es una tarifa plana de $0.002 por solicitud exitosa, con unidad item.
Consejos prácticos para rutas, nombres de archivo y búsquedas afines
Las comprobaciones de ida y vuelta para pruebas son sencillas: envíe una ruta absoluta larga con longitud treinta y seis y espere truncated true, un start no vacío, un end no vacío y result_length de treinta y seis como máximo; fije head en doce sobre la misma ruta y espere que el prefijo sea exactamente esos doce caracteres cuando el presupuesto lo permita; envíe length cero o un entero negativo y espere invalid_input mencionando longitud inferior a uno. Las tareas fallidas que devuelven invalid_input no consumen saldo prepagado, lo que mantiene baratas la validación de formularios y las pruebas negativas de CI. Al enseñar a los revisores, muestre la misma ruta larga con reparto equilibrado y con preferencia head para que vean que solo cambian la posición del corte y los campos start y end, mientras las reglas de longitud y de elipsis permanecen iguales.
Casos de integración
Pruebas unitarias de formateadores de rutas
Genere truncados por el medio conocidos, cortes sesgados con head y rechazos por longitud inferior a uno para auxiliares de frontend e interfaces de almacenamiento.