Ce journal est à la fois la présentation d'un petit projet, et une question qui aurait dû figurer dans le forum...
je suis en train de développer un genre de modèle pour réaliser des "livres-jeux" type "Livres dont vous êtes le héros" à partir de txt2tags. Cela permet à partir d'une même source d'exporter le jeu en version html et latex avec un joli rendu (avec liens hypertextes). La syntaxe est super simple, et pas du tout obtrusive. En fait les paragraphes sont délimités par des == chapitre ==, et la référence à ce paragraphe se fait uniquement avec les numéros en fin de ligne.
La page de présentation se trouve ici :
http://anamnese.online.fr/site2/txt2cyoa/txt2cyoa.html
Seulement, ce n'est pas ultra pratique à visualiser une histoire comme cela. J'ai pensé qu'avec graphviz on pouvait faire quelques merveilles supplémentaires, à savoir générer un organigramme directement à partir des chapitres. Je n'ai pas réussi à le faire automatiquement et proprement à partir de txt2tags, par contre à coup de grep j'arrive à avoir une base, et avec quelques ajustements, on peut générer le graphique :
http://anamnese.online.fr/site2/txt2cyoa/txt2cyoa_graph.png
Alors voilà, ma question est de savoir s'il est possible en ligne de commande, en python, en perl ou ce que vous voulez, à modifier le dernier fichier que j'arrive à avoir de sorte qu'il puisse être utilisé directement avec graphviz.
J'obtiens :
digraph G {
1->
8;9;
6;
2->
6;
3;
7;
3->
6;
5;
4;
7;
4->
6;
5;
3;
5->
6;
3;
2;
6->
5;
3;
7->
8->
9->
}
et j'ai besoin de :
digraph G {
1->8;
1->9;
1->6;
2->6;
2->3;
2->7;
3->6;
3->5;
3->4;
3->7;
4->6;
4->5;
4->3;
5->6;
5->3;
5->2;
6->5;
6->3;
}
En fait la mission est "simplement" de pouvoir prendre la première ligne contenant la séquence "nombre->", la mémoriser, et la coller avant chaque ligne qui se termine par un ; jusqu'à une nouvelle séquence nombre-> qui remplace la première et se colle dans les lignes du dessous etc.
Est-ce que cela est possible (sans doute avec sed) ? Comment feriez-vous ? j'ai cherché sur les forums et sur internet, mais je n'ai rien trouvé d'approchant.
Merci d'avance.
# html ..
Posté par eastwind☯ . Évalué à 0.
[^] # Re: html ..
Posté par B16F4RV4RD1N . Évalué à 1.
Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it
[^] # Re: html ..
Posté par B16F4RV4RD1N . Évalué à 3.
Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it
# Un perleux va surement nous faire un truc en une ligne...
Posté par Moonz . Évalué à 10.
[^] # Re: Un perleux va surement nous faire un truc en une ligne...
Posté par B16F4RV4RD1N . Évalué à 3.
Merci beaucoup, c'est tout à fait ce que j'attendais (en 25 minutes top chrono c'est quand même fort d'avoir une réponse aussi vite), cela fonctionne très bien. Je viens de faire la mise à jour du truc, cela fait un peu code frankenstein, mais je ne suis pas développeur :)
Merci encore. En plus cela va pouvoir m'aider pour d'autres types de codage dont j'aurai sans doute besoin par la suite.
Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it
# Perl !
Posté par arthurr (site web personnel) . Évalué à 4.
[^] # Re: Perl !
Posté par Moonz . Évalué à 5.
(oui, je suis dessus depuis 1 heure maintenant ;))
[^] # Re: Perl !
Posté par Putifuto . Évalué à 10.
C'est simple et efficace. Comme quoi, c'est utile les "vieux" outils Unix :)
[^] # Re: Perl !
Posté par tripa . Évalué à 1.
Par contre, ça ne gère pas le cas Est-ce un manque grave?
[^] # Re: Perl !
Posté par B16F4RV4RD1N . Évalué à 2.
Enfin, il doit être possible d'ajouter un filtre supplémentaire pour ajouter un retour à la ligne là où il faut (je peux le faire avec txt2tags à un niveau plus haut...)
Mais pour utiliser la version gawk, il faut que je vérifie si cela supprime bien les lignes avec un nombre et -> sans rien à la fin...
Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it
[^] # Re: Perl !
Posté par pi6Lohe . Évalué à 3.
[^] # Re: Perl !
Posté par Snarky . Évalué à 5.
awk -F';' '!/[0-9]/{print $0}/->/{a=$0}/[0-9]+[^->]/{for(x=1;x<NF;x++)print a$x";"}' src.txt
Enfin, elle à l'avantage de pas supprimer les entêtes, contrairement à la tienne. :)
[^] # Re: Perl !
Posté par Sébastien Koechlin . Évalué à 10.
perl -p fait la boucle et le print tout seul pour tout le contenu du fichier passée en entrée.
perl -e execute le programme passé sur la ligne de commande
Le if cherche un nombre suivit de '->' et le conserve dans la variable $i; il supprime la sortie en vidant $_
Le else ajoute "$i->" devant les chiffres et ajoute un saut de ligne.
Voila, ça ne m'a pas pris 10 minutes.
[^] # Re: Perl !
Posté par tripa . Évalué à 4.
(ah la la, les petits jeunes...)
[^] # Re: Perdu !
Posté par pipo_molo . Évalué à 10.
De quoi on peut facilement déduire que Python est 3 fois plus efficace que Perl.
[^] # Re: Perdu !
Posté par Sytoka Modon (site web personnel) . Évalué à 9.
[^] # Re: Perdu !
Posté par jeffcom . Évalué à 8.
--->[]
[^] # Re: Perdu !
Posté par Rémi Laurent (site web personnel) . Évalué à 4.
module Game
def Game.parse(filename)
fd = open(filename, 'r')
h, k = {}, ""
fd.each do |l|
case l.chomp!
when /^[0-9]+->$/
k = l.delete("->")
h[k] ||= []
when /^([0-9]+;)+$/
l.split(";").each { |i| h[k] << i }
end
end
return h
end
def Game.render(filename)
parse(filename).each do |key,value|
value.each {|item| puts "#{key}->#{item};" }
end
end
end
Game::render("foobar.graph")
je proteste, j'étais en train de boire une bière devant un film!
PS: je sais pas comment on affiche du code proprement, frappez pas s'il vous plait
PPS: je garantis pas que ça soit 100% fool proof ou que je vais pas me faire incendier par des rubyistes plus aguéris que moi
[^] # Re: Perdu !
Posté par B16F4RV4RD1N . Évalué à 3.
Pour afficher le code, tu tapes autour : <blockquote> ton texte </blockquote>
Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it
# Les regexp ramollissent le cerveau
Posté par jcs (site web personnel) . Évalué à 2.
[^] # Re: Les regexp ramollissent le cerveau
Posté par KiKouN . Évalué à 10.
[^] # Re: Les regexp ramollissent le cerveau
Posté par kowalsky . Évalué à 5.
Alors que Java, c'est objet, c'est class, c'est la classe !! :)
[^] # Re: Les regexp ramollissent le cerveau
Posté par KiKouN . Évalué à 4.
Non, il y a pas à chier. Je préfère les onelines.
# Golf
Posté par ced . Évalué à 5.
chomp&&/(\d+)->/?$c=$1:/(\d|;)+/m&&push(@{$r[$c]},split(/;/,$_))while<>;for$i(1..$c){print$i.'->'.$a.";\n"while $a=shift(@{$r[$i]})}
[^] # Re: Golf
Posté par tripa . Évalué à 3.
Si on veut bien s'autoriser à ne pas sortir le bloc digraph {}, on peut simplifier en:
$ perl -ne '/[{}]/||/\d+->/||print"$&$_"' fichier
Si le fichier d'entrée joue le jeu et ne contient même pas ledit bloc, c'est la fête:
$ grep -v '[{}]' fichier |
> perl -ne '/\d+->/||print"$&$_"'
Merci à l'exemple awk pour l'inspiration. :-)
# Pdf offline
Posté par Etre-ange . Évalué à 2.
Autre demande, si tu peux proposer la même chose en export A5/livret (c'est à dire qu'il y a qu'à predre le paquet de feuilles de l'imprimante, et replier le tout pour faire un livre), çà serait super :) (là ça doit être plus compliqué)
[^] # Re: Pdf offline
Posté par MrLapinot (site web personnel) . Évalué à 2.
Non, tu sors un dvi et tu le malmène un coup avec les outils qui vont bien*, puis tu le convertis en pdf.
* j'ai plus les noms en tête, je peux chercher pour les curieux.
[^] # Re: Pdf offline
Posté par B16F4RV4RD1N . Évalué à 2.
Je vais essayer de faire de nouveaux gabarits tex, notamment pour un format A5. Pour la mise en page, je ne sais pas s'il est possible avec tex d'avoir automatiquement des livrets comme dans openoffice (sinon on peut toujours faire du copier / coller depuis html vers ooo, mais c'est pas pareil quand même au point de vue rendu).
Je n'utilise pas de dvi intermédiaire ou de ps, car c'est généré avec pdflatex, par contre je pense que pdftk peut faire ce genre d'opérations de recollage des pages.
Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it
[^] # Re: Pdf offline
Posté par J. de N. (site web personnel) . Évalué à 2.
Ou alors utiliser le paquetage booklet pour LaTeX (et utiliser pdflatex pour générer le PDF). Je n'ai plus la doc en tête car je n'ai utilisé il y a de nombreuses années, mais je me souviens que c'était relativement simple.
http://www.ctan.org/tex-archive/macros/latex/contrib/booklet(...)
[^] # Re: Pdf offline
Posté par Moonz . Évalué à 4.
http://linuxfr.org/tips/151.html
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.