Viac na
Ako rozdeliť reťazec na viac riadkov?
V jazyku YAML mám reťazec, ktorý je veľmi dlhý. Chcem ho udržať v rámci 80-stĺpcového (alebo tak nejako) zobrazenia môjho editora, takže by som chcel reťazec rozdeliť. Aká je na to syntax?
Inými slovami, mám toto:
Key: 'this is my very very very very very very long string'
a chcel by som mať toto (alebo niečo podobné):
Key: 'this is my very very very ' +
'long string'
Rád by som použil úvodzovky, ako je uvedené vyššie, aby som nemusel v reťazci nič escapovať.
1373
3
Existuje 5 6 NINE (alebo 63*, podľa toho, ako počítate) rôznych spôsobov zápisu viacriadkových reťazcov v jazyku YAML.
TL;DR
Zvyčajne chcete
>
:Ak chcete, aby sa v reťazci zachovali riadkové zlomy ako
\n
(napríklad vložený markdown s odsekmi), použite|
.Ak nechcete, aby sa na konci riadkoval zlom, použite namiesto neho
>-
alebo|-
.Ak potrebujete rozdeliť riadky uprostred slov alebo doslova napísať zalomenie riadkov ako
\n
, použite namiesto toho dvojité úvodzovky:YAML je šialený.
Blokové skalárne štýly (
>
,|
)Tieto štýly umožňujú používať znaky ako
\
a"
bez escapovania a pridávajú nový riadok (\n
) na koniec reťazca.>
Skladaný štýl odstraňuje jednoduché nové riadky v rámci reťazca (ale pridáva jeden na koniec a konvertuje dvojité nové riadky na jednoduché):→
to je môj veľmi, veľmi, veľmi dlhý reťazec\n
|
Literal style zmení každý nový riadok v reťazci na doslovný nový riadok a pridá jeden na koniec:→
toto je môj veľmi, veľmi dlhý reťazec\n
Tu'je oficiálna definícia z YAML Spec 1.2
Blokové štýly s indikátorom zalomenia bloku (
>-
,|-
,>+
,|+
)Spracovanie posledného nového riadku v reťazci a všetkých končiacich prázdnych riadkov (
\n\n
) môžete ovládať pridaním znaku block chomping indicator:>
,|
: "clip": zachová podávanie riadkov, odstráni koncové prázdne riadky.>-
,|-
: "strip": odstráni riadkový posuv, odstráni koncové prázdne riadky.>+
,|+
: "zachovať": zachovať riadkový posuv, zachovať koncové prázdne riadky."Flow" skalárne štýly (``
,
",
'`)Tieto majú obmedzené escapovanie a konštruujú jednoriadkový reťazec bez znakov nového riadku. Môžu začínať na tom istom riadku ako kľúč alebo s ďalšími novými riadkami na začiatku.
plain style (bez escapovania, bez kombinácií
#
alebo:
, obmedzenia na prvý znak):štýl s dvojitými úvodzovkami (
\
a"
musia byť escapované pomocou\
, nové riadky možno vkladať pomocou doslovnej sekvencie\n
, riadky možno spájať bez medzier s koncovým\
):→
"toto je môj veľmi veľmi \"veľmi\" dlhý reťazec.\n\nLove, YAML."
štýl s jednoduchými úvodzovkami (doslovné
'
musí byť zdvojené, žiadne špeciálne znaky, prípadne užitočné na vyjadrenie reťazcov začínajúcich dvojitými úvodzovkami):→
"toto je môj veľmi veľmi \"veľmi\" dlhý reťazec, všakže."
Zhrnutie
V tejto tabuľke
_
znamenámedzerový znak
.\n
znamená "znak nového riadku" (\n
v jazyku JavaScript), okrem riadku "in-line newlines", kde znamená doslova spätné lomítko a n).Príklady
Všimnite si koncové medzery na riadku pred "spaces."
Blokové štýly s indikátormi odsadenia
V prípade, že vám vyššie uvedené nestačí, môžete pridať "indikátor odsadenia bloku" (za indikátor odsadenia bloku, ak ho máte):
Dodatok
Ak na začiatok nie prvých riadkov v štýle Folded vložíte ďalšie medzery, budú zachované s bonusovým novým riadkom. Pri štýloch flow sa to nestane:
→
["môj dlhý reťazec\n", "môj dlhý reťazec"]
Nemôžem'ani.
``2 blokové štýly, každý s 2 možnými indikátormi členenia bloku (alebo žiadnymi) a s 9 možnými indikátormi odsadenia (alebo žiadnymi), 1 jednoduchý štýl a 2 štýly s úvodzovkami: 2 x (2 + 1) x (9 + 1) + 1 + 2 = 63*
Niektoré z týchto informácií boli tiež zhrnuté tu.
Pri použití zalomeného štýlu yaml je každý zlom riadku nahradený medzerou. Odsadenie v každom riadku sa ignoruje. Na konci sa vloží zalomenie riadku.
http://symfony.com/doc/current/components/yaml/yaml_format.html
Na odstránenie koncového zalomenia riadku môžete použiť indikátor "block chomping" takto:
K dispozícii sú aj ďalšie kontrolné nástroje (napríklad na kontrolu odsadenia).
Pozri https://yaml-multiline.info/.
Ak chcete zachovať nové riadky, použite napríklad
|
:sa prekladá ako "Toto je veľmi dlhá veta\n, ktorá sa rozprestiera na niekoľkých riadkoch v YAML\n, ale ktorá sa vykreslí ako reťazec\n so zachovanými novými riadkami.\n"