Inverser l’ordre des paragraphes en ligne
Une introduction, ses détails et une conclusion reviennent dans l'ordre conclusion, détails, introduction : 3 paragraphes inversés, chacun intact à l'intérieur, lignes coupées comprises. Les lignes vides marquent la fin de chaque paragraphe. Gratuit dans votre navigateur.
- Gratuit
- Fonctionne dans votre navigateur
- Sans inscription
- Vos données restent sur votre appareil
Lancer gratuitement
L’outil inverse les paragraphes du dernier au premier sans retourner les mots, les phrases ni les caractères qu’ils contiennent. Collez un texte dont les blocs sont séparés par des lignes vides : vous obtenez les mêmes blocs dans l’ordre opposé, avec un espacement régulier. Les retours à la ligne internes restent attachés à leur paragraphe, ce qui préserve citations, adresses, listes et passages multilignes. Cette opération locale et déterministe convient aux plans, brouillons, transcriptions et notes exportés dans le mauvais ordre.
Fonctionnement de l’inversion des paragraphes
Un paragraphe est ici un bloc non vide séparé du suivant par une ou plusieurs lignes blanches. L’outil vérifie que le texte existe, qu’il s’agit d’une chaîne avec un caractère visible et qu’il respecte la limite de cent mille caractères. Il normalise ensuite les retours à la ligne.
Une ligne contenant seulement des espaces ou tabulations constitue aussi une séparation, tandis qu’un retour simple reste dans le bloc : citations et lignes visuellement repliées demeurent donc ensemble. La liste des paragraphes complets est copiée puis inversée. Aucun mot n’est retourné, résumé ou réécrit.
Les blocs sont enfin réunis avec une ligne vide. La réponse fournit le texte prêt à copier, le nombre détecté et le tableau structuré des paragraphes inversés.
Choix pratiques, cas limites et restrictions
Servez-vous de cette fonction lorsque les blocs sont justes mais présentés à l’envers : notes du plus récent au plus ancien, réponses collectées de bas en haut ou sections copiées depuis un plan inversé. Plusieurs lignes vides forment une seule limite et ne créent aucun bloc vide. Un retour simple reste dans le paragraphe ; une liste sans ligne blanche compte donc comme un seul bloc.
L’outil n’interprète ni HTML, ni Markdown, ni titres, pages, sujets ou phrases. Il travaille uniquement sur le texte brut. Les retours deviennent LF et les espaces extérieurs sont retirés.
Relisez les références comme « ci-dessus », « ci-dessous », « d’abord » ou « enfin », car une inversion structurelle ne réécrit pas ces indications contextuelles.
Cas d’usage
Réordonner des notes chronologiques
Transformez un export du plus récent au plus ancien sans modifier le contenu de chaque note.
Corriger un brouillon inversé
Retournez les sections sans altérer phrases, citations ou retours internes.
Préparer des flux éditoriaux
Récupérez le texte assemblé et un tableau de blocs inversés pour CMS, tests et automatisations.
Questions fréquentes
Les mots de chaque paragraphe sont-ils retournés ?
Non. Seul l’ordre des blocs change ; leur contenu et leurs lignes internes restent identiques.
Comment les paragraphes sont-ils détectés ?
Une ou plusieurs lignes blanches les séparent, y compris une ligne contenant seulement des espaces.
Les lignes vides répétées sont-elles conservées ?
Non. Elles constituent une seule limite et la sortie place une ligne blanche entre les blocs.
Pourquoi rien n'a changé après l'inversion de mon texte ?
Le plus probable : il n'y a pas de ligne vide entre vos paragraphes, et tout le texte est lu comme un seul bloc. Ajoutez une ligne vide entre chaque paragraphe et recommencez : les blocs changeront de place.
Comment inverser chaque ligne plutôt que chaque paragraphe ?
Ici, un simple retour à la ligne ne coupe jamais un paragraphe, donc les lignes d'un bloc restent ensemble. Pour inverser ligne par ligne, insérez d'abord une ligne vide entre elles ou utilisez un outil qui inverse l'ordre des lignes.
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/reverse-paragraphs \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Introduction comes first.\n\nSupporting details come second.\n\nConclusion comes last."}'const res = await fetch("https://api.kit.forhosting.com/str/reverse-paragraphs", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "Introduction comes first.\n\nSupporting details come second.\n\nConclusion comes last."
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/str/reverse-paragraphs",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "Introduction comes first.\n\nSupporting details come second.\n\nConclusion comes last."
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/str/reverse-paragraphs", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"Introduction comes first.\\n\\nSupporting details come second.\\n\\nConclusion comes last."}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"Introduction comes first.\n\nSupporting details come second.\n\nConclusion comes last."}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/str/reverse-paragraphs", 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": "Introduction comes first.\n\nSupporting details come second.\n\nConclusion comes last."
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.reverse_paragraphs",
"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
Exploiter le résultat dans l’API ou le navigateur
Une introduction suivie de détails et d’une conclusion revient avec la conclusion en tête. Conservez les lignes vides, car elles délimitent les blocs. Envoyez un objet JSON avec le champ text contenant le document brut. Utilisez text pour un éditeur ou un CMS, paragraphs pour traiter séparément chaque bloc et paragraph_count pour contrôler le total. Le navigateur et l’API exécutent la même fonction pure, sans écart entre aperçu et automatisation. Chaque requête API réussie coûte $0.002 ; une saisie incorrecte renvoie invalid_input. La fonction n’utilise ni réseau, ni modèle, ni hasard, ni horloge : une entrée identique rend toujours le même JSON.
Questions techniques
Que se passe-t-il avec un seul paragraphe ?
Le résultat conserve ce bloc, indique un paragraph_count de un et renvoie un tableau à un élément.
Quel est le prix d’une requête API ?
Une requête réussie coûte $0.002. Une entrée incorrecte renvoie invalid_input.