F # 3: Formatage du texte

Lorsque vous travaillez avec n'importe quelle langue, vous devrez probablement formater le texte, et F # n'est pas différent.

Étant donné que F # est un langage .NET, nous pouvons toujours utiliser Console.WriteLine (..) et String.Format (..), où nous pouvons utiliser n'importe quel formateur habituel que vous avez utilisé dans votre code .NET normal.

Cependant, F # prend également en charge une méthode C plus similaire à la syntaxe, qui est disponible dans le module Core.Printf. Une fonction à l'intérieur peut être utilisée au lieu d'utiliser la classe Console.WriteLine (..) .NET.

La fonction F # équivalente qui devrait être utilisée pour écrire sur la sortie standard est printfn, qui est en fait la méthode préférée lorsque vous travaillez avec la mise en forme du texte en F #.

Pourquoi printfn est-il préférable à Console.WriteLine (..)?


Il y a plusieurs raisons pour lesquelles printfn est préféré; certaines des raisons principales sont données ci-dessous:

  • Vérification de type statique. Cela signifie que si nous transmettons la valeur int où la chaîne est attendue, nous en serons avertis
  • Étant donné que printfn est une fonction F # native, il agit comme n'importe quelle autre fonction F #.

Tenez compte des extraits de code suivants

//   printfn "should be a decimal value %d" "cat" // printfn "should be a decimal value %d" 42 //  ,   Console.WriteLine("should be a decimal value {0}" , "cat") //     printfn "this only expected 1 arg of type decimal %d" 42 "dog" //    ,   Console.WriteLine("this only expected 1 arg of type decimal {0}" , 42, "dog") // ,   printfn "this only expected 2 args of type decimal %d and string %s" 42 "dog" 

Si nous regardons maintenant une capture d'écran de ce code dans l'IDE Visual Studio, nous voyons vraiment que les lignes que nous nous attendions à échouer sont clairement affichées comme erronées:

image

Comment utiliser printfn?


Il est peut-être préférable de commencer par examiner certains des formateurs standard disponibles pour travailler avec des valeurs. Le tableau MSDN suivant montre les opérateurs standard disponibles: msdn.microsoft.com/en-us/library/ee370560.aspx

Alors qu'en est-il de la création d'un formatage exceptionnel en plus de la norme?


Donc, maintenant, nous avons vu comment écrire une sortie formatée sur une sortie standard (printfn l'a fait), mais que faire si nous voulons utiliser la ligne formatée à d'autres endroits? Que se passe-t-il si nous voulons associer une valeur de chaîne à une chaîne magnifiquement formatée que nous avons construite à l'aide de certains des outils de mise en forme ci-dessus, ou même si nous voulions écrire dans StringBuilder ou TextWriter, F # facilite-t-il cela?

Eh bien oui, en fait, vous trouverez de nombreuses autres fonctionnalités utiles dans le module Core.Printf. La liste complète au moment de la rédaction de cet article était la suivante:

Liste
bprintf Imprimer sur StringBuilder.
eprintf Imprime la sortie formatée sur stderr.
eprintfn Imprime la sortie formatée sur stderr en ajoutant une nouvelle ligne.
failwithf Imprime dans un tampon de chaîne et lève une exception avec le résultat donné. Les imprimantes secondaires doivent renvoyer des chaînes.
fprintf Imprime sur le rédacteur de texte.
fprintfn Imprime sur le rédacteur de texte en ajoutant une nouvelle ligne.
kbprintf Similaire à bprintf, mais il appelle la fonction spécifiée pour générer le résultat. Voir kprintf.
kfprintf Similaire à fprintf, mais il appelle la fonction spécifiée pour générer le résultat. Voir kprintf.
kprintf Comme printf, mais appelle la fonction spécifiée pour générer le résultat. Par exemple, ils permettent une réinitialisation forcée de l'impression une fois que toutes les sorties ont été entrées dans le canal, mais pas avant.
kspintf Comme sprintf , mais appelle la fonction spécifiée pour générer le résultat. Voir kprintf.
printf Imprime la sortie formatée sur la sortie standard.
printfn Imprime la sortie formatée en sortie standard en ajoutant une nouvelle ligne.
sprintf Imprime dans une chaîne à l'aide du tampon de chaîne interne et renvoie le résultat sous forme de chaîne. Les imprimantes secondaires doivent renvoyer des chaînes.

Je ne vais pas passer par tout cela, mais je considérerai les plus courants:

bprintf


Imprime sur StringBuilder.

 let builder = new StringBuilder(524288) Printf.bprintf builder "This will be a string line : %s\r\n" "cat" Printf.bprintf builder "This will be a bool line : %b\r\n" true Printf.bprintf builder "This will be a int line : %u\r\n" 42 Printf.bprintf builder "This will be a hex line : %X\r\n" 255 printfn "%s" (builder.ToString()) 

Cela donnera cette sortie dans une application console F #

fprintf


Imprime dans un rédacteur de texte.

 use sw = new StreamWriter(@"c:\temp\fprintfFile.txt") fprintf sw "This is a string line %s\r\n" "cat" fprintf sw "This is a int line %i" 10 sw.Close() 

Cela entraînera la création du fichier dans temp

image

sprintf


 let result = Printf.sprintf "This will return a formatted string : %s\r\n" "cat" printfn "%s" result 

image

Source: https://habr.com/ru/post/fr470037/


All Articles