Framework de mise en page tabulé ?
Salut les gens, je suis à la recherche d'un framework de mise en page tabulé si cela existe... Le but est d'arriver simplement à ce résultat :
lab.office.inig-services.com. 10800 IN A 192.168.42.40
macpro.office.inig-services.com. 10800 IN A 192.168.42.50
Est-ce que vous auriez une idée de comment faire la chose sans trop se prendre la tête ?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Les données sont importantes ?
Tu voudrais un truc qui joues sur les String (Attributed ?) ?
Ta sortie, c'est quoi ? Une UIWebView (j'suis passé par là pour créer des tableaux, j'en avais 2-3 réutilisés, ça a pris 10 min à mon collègue dév web)... Peut importe ?
Sinon, j'aurais pensé à une sorte de GridView...
Effectivement, j'ai oublié des info.
La sortie est un TextView Cocoa avec un police à chasse fixe. La chose doit pouvoir être copié collé dans un autre éditeur à chasse fixe, et de manière générale, je préfère une mise en forme à base de tabulation plutôt que d'espace.
Et les données d'entrée c'est quoi ? Un tableau d'objets (ou de NSDictionary) par exemple ? Ou un texte mais que tu veux réaligner ?
Si c'est un simple tableau d'objets, une boucle dessus et un beau stringWithFormat, avec des formats à la "%-20.20s" ça se fait pas tout seul ? Qu'est ce qui ne t'irait pas avec ce genre de solution à la "formats printf %N.Ms" ?
(Si j'ai bonne mémoire "%N.Ms" affiche une chaà®ne en générant des espaces pour que la chaà®ne fasse minimum N caractères, et tronque la chaà®ne au bout de M caractères. Si tu mets un "-" devant le "N", les espaces sont générés après la chaà®ne (qui est donc alignée à gauche) alors que sans le moins les espaces sont avant (donc chaà®ne alignée à droite)
J'ai chaque item sous forme de NSString au cour d'une boucle de création. J'ai suivis tes conseils pour le moment Ali (je connaissais pas), ça fonctionne comme attendu. Je vais voir en allant plus loin si ça colle à tous les cas d'une zone DNS.
Merci :-)
ça marche aussi avec les polices à chasse variable ?
Bah heu ça va faire ce que tu lui demandes... c'est à dire faire du padding sur ta chaà®ne pour ajouter des espaces jusqu'à atteindre le nombre demandé de caractères. Donc bien sûr ça va marcher dans le sens où ça va faire ce que c'est sensé faire, du padding pour avoir le nombre de caractères demandé, mais évidemment ça ne va pas aligner si ta police n'est pas à chasse fixe, ça va de soi !
Ces placeholders %N.Ms" datent du C et de la fonction printf et ses consoeurs... J'avoue que je suis assez étonné que 2 développeurs expérimentés comme vous ne les connaissent pas du tout en fait ! oO
Bon pour info j'ai laissé tombé les %N.Ms, ça ne marche qu'avec des cString et vu que je supporte des truc bizarre j'ai des résultat assez spéciaux (genre sur les espaces insécable).
Du coup j'ai fait un système à la con à base de différence de longueur pour qu'un groupe de ligne allant ensemble soit tabulé de la même manière.
Le truc c'est qu'il manque des marqueurs de colonnes dans la gestion de texte de manière générale. Les espaces et tabulations c'est bien, mais il manque un char descripteur d'alignement en gros. Et ça on y peut pas grand chose.
Sur Mac on peut utiliser la propriété tabStops de NSParagraphStyle sur des NSAttributedString.
Cette propriété n'existe pas sur iOS, mais est disponible dans Core Text. Je l'ai utilisée pour formatter des PDF sur iPad. Je n'ai jamais essayé dans un textView.
Le problème c'est que c'est un fichier qui devra être lu par un outil UNIX sur un serveur non Mac, donc je suis obliger de rester dans les trucs standards.
Merci pour votre aide en tout cas, pour le moment ça marche comme je veux.
Je vais plutôt me concentrer sur le casse tête des NSOutlineView et du refresh sans faire tout fermer.
Alors raison de plus pour utiliser les tabStops pour l'affichage et mettre des ^t entre chaque champ dans la chaà®ne de caractères. ça reste totalement portable sur Unix, on peut trifouiller le fichier avec awk, ...
Sauf erreur de ma part, les tabStops c'est dans ton éditeur graphique que tu les configure, pas dans ton fichier texte. Ton tabStop permet de dire où doit aller le tab, mais un éditeur ligne de commande ne marche pas comme ça, il travail avec un tab de 4 ou 8 char, pas en tabStop.
Si "Editeur ligne de commande" c'est more, less, Vi, Vim ou Emacs, oui on peut programmer les tabStops.
Sous Unix on trouve les deux types de formatage. Souvent les champs sont séparés par des espaces ce qui permet d'avoir un affichage indépendant de l'éditeur, comme la sortie de la commande ls par exemple. Mais de temps en temps on voit des sorties de commande dont les champs sont séparés par une tabulation. Personnellement, tu l'as déjà compris, je préfère la seconde solution pour séparer le contenu de l'affichage, et accessoirement pouvoir mettre des espaces à l'intérieur des champs.
Je sors d'en faire avec une NSAttributedString et des NSTabStop centrés à gauche | droite | décimal, une fois qu'on a compris le principe des NSParagraphStyle et qu'on sait où mettre les tabStop c'est assez simple de faire des chaines \t%@\t%@ qui seront à la bonne place.
Le tout donne un texte .rtf lisible par beaucoup d'éditeurs ..
Question con: pourquoi pas une NSTableView ?
Parce que :
Et passer par un regex pour la mise en forme?
Mmmm j'ai du mal à voir, une RegEx c'est plutôt pour faire du rechercher/remplacer, tu l'utiliserais comment pour faire du padding toi ?
Sauf erreur de ma part, tu programme ton tabStop dans l'éditeur, si tu veux enregistrer ton tabStop dans le fichier, il faut un format particulier et non un simple txt non ? Pour que tes réglages de tabStop se retrouve sur un autre éditeur ?
Plus je te relis plus je trouve que tu devrais quand même persévérer encore un peu dans le printf like ..
Une NSString avec des trucs bizarres dedans ça peut se nettoyer. Il y a quelques méthodes pour ça avec les whitespaceCharacterSet , characterSetWithRange:, characterSetWithCharactersInString: et les NSRange qui ne demandent qu'à servir pour repérer et remplacer ou supprimer. Une fois nettoyée tu as une NSString unicode et on peut tout faire avec les méthodes de Cocoa, vraiment tout.
Pour utiliser le formatage de printf il suffit de faire [maChaine UTF8String] pour pouvoir utiliser %N.Ms
.Pas besoin de printf ni sprintf ..Après tout c'est prise de tête au début, une fois qu'on est parti c'est pas si compliqué ni long à pondre.
Mais il faut avoir la chaà®ne à traiter sous la main et un peu de temps, or je n'ai ni l'un ni l'autre, et je ne suis pas à ta place
Pour enregistrer une NSAttributedString il faut utiliser
où le documentAttributes n'est pas le attributedStringAttributes mais bien celui du document .Pour un .txt tu es obligé de passer par une NSString sans attributs, effectivement, je vois pas d'autres solutions que le printf.
A lire SO tu peux prendre ton rtf et utiliser textutil dans le terminal pour le transformer en txt que tu pourras envoyer ensuite. À voir si ça correspond mieux à tes besoins ..