3 votes

Supprimer la marge d'une chaîne de caractères triple guillemets indentée en Purescript ?

Lorsque j'utilise des guillemets triples dans une position indentée, j'obtiens également une indentation dans la chaîne js de sortie :

Comparaison de ces deux éléments dans un let imbriqué

let input1 = "T1\nX55.555Y-44.444\nX52.324Y-40.386"
let input2 = """T1
        X66.324Y-40.386
        X52.324Y-40.386"""

donner

// single quotes with \n
"T1\x0aX55.555Y-44.444\x0aX52.324Y-40.386"

// triple quoted
"T1\x0a        X66.324Y-40.386\x0a        X52.324Y-40.386"

Existe-t-il une chose convenue comme stripMargin en Scala afin que je puisse les utiliser sans avoir à les désindenter au niveau supérieur ?

Mise à jour, juste pour clarifier ce que je veux dire, je suis actuellement en train de faire :

    describe "header" do
      it "should parse example header" do
        let input = """M48
;DRILL file {KiCad 4.0.7} date Wednesday, 31 January 2018 'AMt' 11:08:53
;FORMAT={-:-/ absolute / metric / decimal}
FMAT,2
METRIC,TZ
T1C0.300
T2C0.400
T3C0.600
T4C0.800
T5C1.000
T6C1.016
T7C3.400
%
"""
        doesParse input header
    describe "hole" do
      it "should parse a simple hole" do
        doesParse "X52.324Y-40.386" hole

Mise à jour :

On m'a demandé de clarifier stripMargin en Scala. Il est utilisé comme suit :

val speech = """T1
                |X66.324Y-40.386
                |X52.324Y-40.386""".stripMargin

qui supprime alors les espaces blancs en début de texte. stripMargin peut prendre n'importe quel séparateur, mais la valeur par défaut est |.

Plus d'exemples :

La rouille a https://docs.rs/trim-margin/0.1.0/trim_margin/ Kotlin a dans stdlib : https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/trim-margin.html

Je pense que cela pourrait ressembler à une demande de left-pad ( :) ) mais s'il y a déjà quelque chose, je préfère ne pas le faire moi-même

2voto

Nick Saunders Points 303

Je suis désolé que vous n'ayez pas reçu de réponse rapide à cette question, mais j'ai mis en place cette fonction aquí . Au cas où la pull request ne serait pas fusionnée, voici une implémentation qui dépend simplement de purescript-strings :

import Data.String (joinWith, split) as String
import Data.String.CodeUnits (drop, dropWhile) as String
import Data.String.Pattern (Pattern(..))

stripMargin :: String -> String
stripMargin =
  let
    lines = String.split (Pattern "\n")
    unlines = String.joinWith "\n"
    mapLines f = unlines <<< map f <<< lines
  in
    mapLines (String.drop 1 <<< String.dropWhile (_ /= '|'))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X