Comment répartir une chaîne de caractères sur plusieurs lignes ?

Dans YAML, j'ai une chaîne de caractères qui est très longue. Je veux la conserver dans la vue de 80 colonnes (environ) de mon éditeur, et j&#8217aimerais donc casser la chaîne. Quelle est la syntaxe pour cela ?

En d'autres termes, j'ai ceci :

Key: 'this is my very very very very very very long string'

et j'aimerais avoir ceci (ou quelque chose de ce genre) :

Key: 'this is my very very very ' +
     'long string'

J'aimerais utiliser les guillemets comme ci-dessus, de manière à ne pas avoir besoin d'échapper quoi que ce soit dans la chaîne.

Il existe 5 6 NINE (ou 63*, selon la façon dont on compte) différentes façons d'écrire des chaînes de caractères multi-lignes dans YAML.

TL;DR

  • Habituellement, vous voulez > :

      clé : >
        Votre longue
        chaîne de caractères ici.
  • Si vous voulez que les sauts de ligne soient préservés sous forme de n dans la chaîne (par exemple, markdown intégré avec des paragraphes), utilisez |.

      clé : |
        ### Titre
    
        * Bullet
        * Points
  • Utilisez plutôt >- ou |- si vous ne voulez pas qu'un saut de ligne soit ajouté à la fin.

  • Si vous devez couper des lignes au milieu d'un mot ou si vous tapez littéralement des sauts de ligne comme \n, utilisez plutôt des guillemets doubles :

      clé : "Antidisestabétique.
       lishmentarianism.\n\nGet on it."
  • YAML est fou.

Bloquer les styles scalaires (>, |)

Ces styles autorisent les caractères tels que \ et " sans les échapper, et ajoutent une nouvelle ligne (\n) à la fin de votre chaîne.

> Style plié supprime les nouvelles lignes simples dans la chaîne (mais en ajoute une à la fin, et convertit les doubles lignes en simples) :

Key: >
  this is my very very very
  long string

c'est ma très très très longue chaîne de caractères\n

| Style littéral transforme chaque nouvelle ligne de la chaîne en une nouvelle ligne littérale, et en ajoute une à la fin :

Key: |
  this is my very very very 
  long string

C'est ma très très très\nlongue chaîne de caractères\n

Voici la définition officielle de la [YAML Spec 1.2] (http://www.yaml.org/spec/1.2/spec.html#id2760844)

Les contenus scalaires peuvent être écrits en notation de bloc, en utilisant un style littéral (indiqué par "|") où tous les sauts de ligne sont significatifs. Il peut également être écrit avec le style plié (indiqué par ">") où chaque retour à la ligne est replié sur un espace sauf s'il termine une ligne vide ou plus indentée.

Styles de bloc avec indicateur d'écrasement de bloc (>-, |-, >+, |+)

Vous pouvez contrôler le traitement de la dernière nouvelle ligne de la chaîne et de toute ligne vide de fin (\n\n) en ajoutant un caractère indicateur de fragmentation de bloc :

  • >, | : "clip" : conserve le saut de ligne, supprime les lignes vides de fin de ligne.
  • >-, |- : "strip" : supprime le saut de ligne, supprime les lignes vides de fin de ligne.
  • >+, |+ : "keep" : conserve le saut de ligne, conserve les lignes vides de fin de ligne.

Styles scalaires "Flow" (`,",'`)

Ils ont un échappement limité, et construisent une chaîne de caractères d'une seule ligne sans caractères de nouvelle ligne. Ils peuvent commencer sur la même ligne que la clé, ou avec des nouvelles lignes supplémentaires en premier.

plain style (pas d'échappement, pas de combinaisons # ou :, limites sur le premier caractère) :

Key: this is my very very very 
  long string

style à double guillemet (les caractères \ et " doivent être échappés par \, les sauts de ligne peuvent être insérés avec une séquence littérale \n, les lignes peuvent être concaténées sans espace avec \ de fin) :

Key: "this is my very very \"very\" loooo\
  ng string.\n\nLove, YAML."

&rarr ; "Ceci est ma très très \"très\" longue chaîne.\n\nLove, YAML."

style guillemets simples (le littéral ' doit être doublé, pas de caractères spéciaux, éventuellement utile pour exprimer des chaînes de caractères commençant par des guillemets doubles) :

Key: 'this is my very very "very"
  long string, isn''t it.'

&rarr ; C'est ma très très longue chaîne de caractères, n'est-ce pas?

Résumé

Dans ce tableau, _ signifie caractère d'espace. n` signifie `caractère de nouvelle ligne (n en JavaScript), sauf pour la ligne nouvelles en ligne, où il signifie littéralement une barre oblique inverse et un n).

                      >     |            "     '     >-     >+     |-     |+
-------------------------|------|-----|-----|-----|------|------|------|------  
Trailing spaces   | Kept | Kept |     |     |     | Kept | Kept | Kept | Kept
Single newline => | _    | \n   | _   | _   | _   | _    |  _   | \n   | \n
Double newline => | \n   | \n\n | \n  | \n  | \n  | \n   |  \n  | \n\n | \n\n
Final newline  => | \n   | \n   |     |     |     |      |  \n  |      | \n
Final dbl nl's => |      |      |     |     |     |      | Kept |      | Kept  
In-line newlines  | No   | No   | No  | \n  | No  | No   | No   | No   | No
Spaceless newlines| No   | No   | No  | \   | No  | No   | No   | No   | No 
Single quote      | '    | '    | '   | '   | ''  | '    | '    | '    | '
Double quote      | "    | "    | "   | \"  | "   | "    | "    | "    | "
Backslash         | \    | \    | \   | \\  | \   | \    | \    | \    | \
" #", ": "        | Ok   | Ok   | No  | Ok  | Ok  | Ok   | Ok   | Ok   | Ok
Can start on same | No   | No   | Yes | Yes | Yes | No   | No   | No   | No
line as key       |

Exemples

Notez les espaces de queue sur la ligne précédant "spaces. "

- >
  very "long"
  'string' with

  paragraph gap, \n and        
  spaces.
- | 
  very "long"
  'string' with

  paragraph gap, \n and        
  spaces.
- very "long"
  'string' with

  paragraph gap, \n and        
  spaces.
- "very \"long\"
  'string' with

  paragraph gap, \n and        
  s\
  p\
  a\
  c\
  e\
  s."
- 'very "long"
  ''string'' with

  paragraph gap, \n and        
  spaces.'
- >- 
  very "long"
  'string' with

  paragraph gap, \n and        
  spaces.

[
  "very \"long\" 'string' with\nparagraph gap, \\n and         spaces.\n", 
  "very \"long\"\n'string' with\n\nparagraph gap, \\n and        \nspaces.\n", 
  "very \"long\" 'string' with\nparagraph gap, \\n and spaces.", 
  "very \"long\" 'string' with\nparagraph gap, \n and spaces.", 
  "very \"long\" 'string' with\nparagraph gap, \\n and spaces.", 
  "very \"long\" 'string' with\nparagraph gap, \\n and         spaces."
]

Styles de blocs avec indicateurs d'indentation

Au cas où ce qui précède ne vous suffirait pas, vous pouvez ajouter un "indicateur d'indentation des blocs" (après votre indicateur d'indentation des blocs, si vous en avez un) :

- >8
        My long string
        starts over here
- |+1
 This one
 starts here

Addendum

Si vous insérez des espaces supplémentaires au début des lignes qui ne sont pas les premières dans le style plié, ils seront conservés, avec une nouvelle ligne supplémentaire. Cela ne se produit pas avec les styles de flux :

- >
    my long
      string
- my long
    string

["my long\n string\n", "my long string"].

Je ne peux même pas.

``2 styles de bloc, chacun avec 2 indicateurs de bloc possibles (ou aucun), et avec 9 indicateurs d'indentation possibles (ou aucun), 1 style simple et 2 styles cités : 2 x (2 + 1) x (9 + 1) + 1 + 2 = 63*

Certaines de ces informations ont également été résumées [ici] (http://yaml-multiline.info/).

Commentaires (26)
Solution

En utilisant le style plié de yaml, chaque saut de ligne est remplacé par un espace. L'indentation dans chaque ligne sera ignorée. Un saut de ligne sera inséré à la fin.

Key: >
  This is a very long sentence
  that spans several lines in the YAML
  but which will be rendered as a string
  with only a single carriage return appended to the end.

http://symfony.com/doc/current/components/yaml/yaml_format.html

Vous pouvez utiliser l'indicateur "block chomping" pour éliminer le retour à la ligne, comme suit :

Key: >-
  This is a very long sentence
  that spans several lines in the YAML
  but which will be rendered as a string
  with NO carriage returns.

D'autres outils de contrôle sont également disponibles (pour contrôler l'indentation par exemple).

Voir https://yaml-multiline.info/

Commentaires (11)

Pour préserver les nouvelles, utilisez |, par exemple :

|
  This is a very long sentence
  that spans several lines in the YAML
  but which will be rendered as a string
  with newlines preserved.

se traduit par "C'est une très longue phrase\n qui s'étend sur plusieurs lignes dans le YAML\n mais qui sera rendue sous forme de chaîne\n avec les nouvelles lignes préservées.\n"

Commentaires (12)