7
votes

Liste de format Sortie à Haskell?

J'ai du mal à essayer de formater la sortie A d'une liste de mon propre type de haskell.

Je voudrais quelque chose comme ceci: xxx

^ Ce serait les données chargées de mon type de chaîne de chaîne [int].

Comment ferais-je cela dans HASKELLL?


0 commentaires

3 Réponses :


14
votes

En règle générale, nous utilisons des bibliothèques "jolies imprimantes" pour faire de belles sorties formatées. La norme que vous devez savoir est text.prettyprint . Compte tenu d'un type de données, vous pouvez marcher sur ce type, construire un document bien formé.

Exemple: p> xxx pré>

test: p>

Make    |   Model   |   Year
foo     |   avenger |   1990, 1992
bar     |   eagle   |   1980, 1982


4 commentaires

Si vous souhaitez que la largeur de la colonne s'adapte à l'élément le plus large, vous avez besoin d'un autre code.


Je préfère ne pas utiliser ces bibliothèques, j'aime la méthode ci-dessous, mais je ne sais pas comment utiliser un ensemble de données de test avec elle?


Vous auriez lu les données de test d'un fichier ou d'une base de données. Edit: Ah, je vois, vous regardez comment faire l'IO aussi. Recherchez d'autres questions sur ce site sur io + haskell .


c'est dans une fonction: TestData = [(((type1 "," type2 ", [" item1 "," item12 "]," type2 "," type3 ", [" item2 "," item22 "])] Ouais Les données sont originaires de mon propre format / type ...



4
votes

quelque chose comme ça? XXX PRE>

MAINTENANT, vous pouvez faire P>

>>> fooToLine (Foo "Hello" "World" [1, 2, 3])
"Hello | World | 1, 2, 3"


5 commentaires

Ahhh Ive a vu quelque chose de similaire à celui-ci aujourd'hui - comment ça marche?


Comment utilisera des données de test pour cela? Donc, vous ne donnez pas en réalité que les utilisateurs FRM TE mettent fin à la fonction de Antehr appelée TestData ??


@Ash: J'ai ajouté un exemple simple. Notez que cela suppose que vos chaînes ont de la même longueur, sinon les colonnes ne s'alignent pas. Voir la réponse de Don Stewart pour savoir comment gérer les colonnes d'alignement de différentes largeurs.


Alors, comment puis-je apporter cet appel une autre fonction pour les données de test? Ceci est l'autre fonction: TestData = [((("type1", "type2", ["item1", "item12"], "type2", "type3", ["item22"])] Comment puis-je mettre cela à là, il ne nécessite pas d'entrée de l'utilisateur?


Vous pouvez faire quelque chose comme mapm_ (poststrln. Footoline) Testdata , bien que vous devez soit modifier le FOO S sur les tuples ou vice versa.



6
votes

Voici un générateur de table généralisé. Il calcule les largeurs de colonne pour s'adapter à la ligne la plus large. Le type coldsc code> vous permet de spécifier, pour chaque colonne, l'alignement du titre, la chaîne de titre, l'alignement des données et une fonction pour formater les données.

Make |  Model  |       Year      
-----+---------+-----------------
foo  | avenger |       1990, 1992
bar  | eagle   | 1980, 1982, 1983


1 commentaires

C'est ma jolie imprimante préférée maintenant pour les tables. J'aime que c'est simple et composable.