Tronquer au milieu
Faites tenir un chemin de 62 caractères en 36 sans perdre ses extrémités : /Users/alex/Docum...engines/parse.js montre encore le dossier racine et le nom du fichier. Les points comptent dans la limite, et vous choisissez combien garder du début. Gratuit dans votre navigateur.
- Gratuit
- Fonctionne dans votre navigateur
- Sans inscription
- Vos données restent sur votre appareil
Lancer gratuitement
Exemple résolu
- Longueur
- 36
- Texte
- /Users/alex/Docum...engines/parse.js
- Longueur d'origine
- 62
- Longueur du résultat
- 36
- Points de suspension
- ...
La troncature au milieu raccourcit une chaîne à une longueur d'affichage cible en retirant le centre et en insérant des points de suspension, afin que le début et la fin restent lisibles. C'est le schéma qu'emploient les gestionnaires de fichiers, les terminaux, le fil d'Ariane, les visionneuses de journaux et les cellules de tableau lorsqu'un chemin ou un nom de fichier dépasse la colonne : vous voyez encore le répertoire racine et le fichier réel, ou le début d'un UUID et ses derniers chiffres. Saisissez le texte et la longueur entière que le résultat doit respecter ; choisissez éventuellement combien de caractères initiaux conserver et quel marqueur d'ellipse insérer. Le solveur renvoie la chaîne raccourcie, le préfixe et le suffixe conservés, l'indication d'une coupure, les longueurs d'origine et de résultat, ainsi qu'un bref message.
Ce que tronquer au milieu signifie face à une coupe de préfixe
La troncature au milieu est une contrainte d'affichage stricte, d'une forme différente de la troncature ordinaire en préfixe. Une coupe de préfixe ne conserve que le début de la source et ajoute des points de suspension à la fin ; cela convient aux phrases et aux titres, mais masque ce dont on a habituellement besoin sur un chemin ou un nom de fichier : le nom feuille, l'extension, le dernier dossier ou les derniers chiffres d'un identifiant.
Tronquer au milieu retire un segment contigu de l'intérieur et insère des points de suspension entre un préfixe et un suffixe conservés, de sorte que les deux ancres restent visibles. La longueur maximale que vous envoyez est la longueur maximale du résultat entier, ellipse comprise lorsqu'une coupe est requise. Si la source tient déjà, l'outil la renvoie inchangée, place truncated à false, met la chaîne complète dans start et laisse end vide afin que les appelants puissent omettre les éléments d'interface qui suggèrent un contenu caché.
Si elle ne tient pas, le solveur calcule un budget de contenu égal à length moins la longueur de l'ellipse. Lorsque vous omettez head, ce budget est réparti aussi équitablement que possible, le caractère impair restant allant au début. Lorsque vous fixez head, autant de caractères initiaux sont conservés (plafonnés au budget) et le reste du budget va à la fin, ce qui force un long nom de fichier à garder son extension tout en montrant un court indice de répertoire.
Les longueurs inférieures à un ne sont jamais acceptées : un aperçu de largeur nulle n'est pas un contrat utile pour les tableaux, le fil d'Ariane ou les journaux, et les limites négatives sont toujours des erreurs client. Un texte vide avec une longueur valide est autorisé et renvoyé vide, sans ellipse, ce qui évite que des flux passant des champs de chemin facultatifs n'échouent seulement parce qu'un nom est blanc.
Conseils pratiques pour les chemins, les noms de fichier et les recherches liées
Utilisez cette capacité lorsque l'intention de recherche est de tronquer au milieu, de raccourcir un nom de fichier avec une ellipse ou de garder visibles le début et la fin d'un chemin en ligne. Préférez une répartition équilibrée pour les identifiants génériques et les UUID ; préférez un head petit lorsque le jeton utile se trouve à la fin, comme un rapport avec extension ; préférez un head grand lorsque le jeton utile se trouve au début, comme un hôte ou une lettre de lecteur à ne pas masquer.
Une ellipse personnalisée — un seul caractère Unicode d'ellipse horizontale, un point médian espacé ou une étiquette « plus » entre crochets — fonctionne tant que sa longueur tient encore dans le budget. Cette page n'est pas un résumeur d'IA, ni un troncateur de préfixe seul pour les phrases, ni un compteur de paragraphes ou de mots, ni un normalisateur de chemins qui résout les points ou les répertoires personnels.
Préférez un outil de troncature de préfixe lorsque le produit a déjà décidé de ne garder que le début d'une phrase ; préférez un raccourcisseur LLM lorsque vous avez besoin d'une compression qui préserve le sens ; préférez cette capacité lorsqu'une personne doit reconnaître les deux extrémités d'un chemin, d'un nom de fichier, d'une URL ou d'un identifiant dans une grille fixe de caractères.
Cas d’usage
Colonnes de gestionnaire de fichiers et fil d'Ariane
Bornez les longs chemins absolus pour qu'un tableau ou un fil d'Ariane montre encore la racine et le nom feuille, au lieu de cacher l'extension derrière une ellipse finale.
Visionneuses de journaux et artefacts de CI
Faites tenir les chemins d'artefacts de compilation et les noms de rapports téléversés dans une ligne de journal à largeur fixe, en gardant lisibles le dernier dossier et l'extension.
Tests unitaires pour formateurs de chemins
Produisez des troncatures au milieu de référence, des coupes biaisées par head et des rejets pour longueur inférieure à un, destinés aux aides frontend et aux interfaces de stockage.
Questions fréquentes
Comment la troncature au milieu décide-t-elle ce qu'il faut garder ?
Elle soustrait la longueur de l'ellipse de votre maximum, puis conserve un préfixe et un suffixe qui remplissent ensemble ce budget. Omettez head pour une répartition paire (le reste impair va au début), ou fixez head pour figer le nombre de caractères initiaux à conserver.
Est-ce la même chose que tronquer le texte à la fin ?
Non. La troncature en fin masque le suffixe. La troncature au milieu sert aux chemins, noms de fichier et identifiants dont le début et la fin doivent rester visibles dans une longueur fixe.
Que se passe-t-il si length vaut zéro ou si l'ellipse ne tient pas ?
Length doit être un entier d'au moins un et, lorsqu'une coupe est requise, l'ellipse ne doit pas dépasser cette longueur. Les tâches en échec ne sont jamais facturées.
Peut-on garder davantage du nom de fichier que du répertoire ?
Oui. Fixez head à un petit entier afin que la plus grande part du budget restant aille à la fin. C'est le schéma habituel lorsque l'extension ou le nom feuille est le jeton qu'une personne doit reconnaître.
L'outil de troncature au milieu est-il gratuit ?
L'outil du navigateur est gratuit et s'exécute en local.
Outils associés
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/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)Exemple de requête
{
"text": "/Users/alex/Documents/projects/kit-taller/src/engines/parse.js",
"length": 36
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.truncate_middle",
"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_chars | 100000 |
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. |
Notes techniques
Une longueur inférieure à un est rejetée avec invalid_input, afin que la validation de formulaire et l'intégration continue ne traitent jamais un plafond nul ou négatif comme un succès. Le traitement repose sur une logique de chaînes pure et déterministe — aucun réseau, aucune graine aléatoire, aucune horloge — donc l'exécuteur gratuit du navigateur et l'API prépayée renvoient le même JSON à chaque appel.
Comment appeler l'API et ce que contient la réponse
Associez l'appel à votre propre code de mise en page si vous devez mesurer des glyphes dans une police proportionnelle ; ce point de terminaison compte les indices de chaîne JavaScript, non les pixels rendus, soit le même contrat que la plupart des formateurs de chemins côté serveur utilisent déjà. Envoyez un corps JSON avec le text obligatoire (alias input, value, string, s, content et body) et le length obligatoire (alias max_length, max, n, limit et max_len). La longueur doit être un entier de un à cent mille inclus ; les valeurs inférieures à un, les non-entiers et les limites excessives sont invalid_input. Le head facultatif (alias start, keep_start et prefix) est un entier non négatif qui privilégie le nombre de caractères initiaux à conserver ; omettez-le pour une répartition équilibrée. L'ellipsis facultatif (alias marker, separator et gap) vaut par défaut trois points ASCII et peut être n'importe quelle chaîne jusqu'à trente-deux caractères ; lorsque la troncature est requise, l'ellipse ne doit pas dépasser length, sinon la requête échoue plutôt que d'inventer un marqueur rogné. Le texte doit rester dans la limite de cent mille caractères afin qu'une seule requête n'épuise pas la mémoire du Worker ni du navigateur. En cas de succès, la réponse renvoie input comme chaîne d'origine, text comme chaîne finale à afficher, length comme maximum demandé, original_length et result_length comme comptes de caractères, truncated comme booléen, ellipsis comme marqueur utilisé, start comme préfixe conservé, end comme suffixe conservé et message comme un court résumé en anglais. Une validation échouée — text ou length manquant, un text qui n'est pas une chaîne, un length non entier ou inférieur à un, un head négatif, une charge trop volumineuse ou une ellipse qui ne tient pas sous la limite lorsqu'une coupe est nécessaire — renvoie invalid_input et n'est jamais facturée. Le tarif est un forfait de $0.002 par requête réussie, unité item.
Conseils pratiques pour les chemins, les noms de fichier et les recherches liées
Les contrôles aller-retour pour les tests sont simples : fournissez un long chemin absolu avec une longueur de trente-six et attendez truncated true, un start non vide, un end non vide et un result_length d'au plus trente-six ; fixez head à douze sur le même chemin et attendez que le préfixe soit exactement ces douze caractères lorsque le budget le permet ; envoyez un length égal à zéro ou un entier négatif et attendez invalid_input mentionnant une longueur inférieure à un. Les tâches en échec qui renvoient invalid_input ne consomment pas le solde prépayé, ce qui maintient peu coûteuses la validation de formulaire et les tests négatifs de CI. Pour former les relecteurs, montrez le même long chemin en répartition équilibrée et avec une préférence head afin qu'ils voient que seuls la position de coupe et les champs start et end changent, tandis que les règles de longueur et d'ellipse restent identiques.