question - Perl - Programmation
Marsh Posté le 20-08-2015 à 01:24:53
C'est possible.
Mais souvent superflu.
Si on a un script A qui écrit dans des fichiers, et que ces fichiers ne servent qu'a être exploités par un Script B, et à rien d'autre, ça veut dire, sauf cas très particulier, qu'on pourrait avoir un script C qui fait tout d'un coup et de manière plus efficace.
En particulier, au lieu d'écrire dans un fichier, on pourrait donc écrire dans une variable de type chaîne de caractères, et lire le contenu de cette variable ensuite.
A+,
Marsh Posté le 20-08-2015 à 11:57:55
Salut Gilou
c'etait pour faire allusion au probleme que je te presentais la derniere fois lorque je voulais que 2 codes ecrivent dans le meme fichier, car je pense que c'est pour cette option que je vais me penche car je ne connais pas d'autre moyens. ou alors peus tu avoir une autre Idee? plus facile.
Marsh Posté le 20-08-2015 à 14:02:45
Comme je t'ai dit, puisque tu as un code B qui utilise les résultats d'un code A, pourquoi ne fait tu pas un code unique? S'il n'y a pas de raison spéciale, autant faire un seul script.
Si c'est pour écrire les résultats du code A, suffit de faire des
push @resultat "truc a ecrire\n";
au lieu de faire
print $fh "truc a ecrire\n";
et tout est écrit dans une liste, qu'on peut passer a l'autre code
et a la lecture par le code B, faire un
while ( @resultat )
au lieu d'un
while (<$fh> )
et le tour est joué.
A priori en perl, on évite les fichiers temporaires, qui sont très inefficaces (sauf cas de limitation en mémoire). On n'écrit dans des fichiers que les fichiers finaux.
A+,
Marsh Posté le 20-08-2015 à 23:41:40
j'ai edite ma question, peut etre celle ci tu pourra m'aider merci d'avance, en voici le code
Code : |
le code B (deuxieme) traite un DATA2.csv et ecrit dans des fichiers, car dans le DATA2.csv les noms par exmple
DPA01 DPA02 DPA03 revient plusieurs fois en avec les memes donnes il les reecrit dans le meme fichier plusieurs fois
et au finisch on a comme l'inpression qu'il ne l'a fait qu'une fois, maintenant j'aimerai qu'il ecrive les resultats juste une fois car les noms reviennent a chaque fois avec les memes donnes donc l'ecrire juste une fois et ignorer tout ce suivra, et passe au nom suivant soit DPA02 faire la meme chose ecrire les donnes une fois et ignore tous ceux qui suivrent.
es ce que tu peus m'aider a ce niveau? merci bien
Marsh Posté le 21-08-2015 à 11:32:00
gilou a écrit : Comme je t'ai dit, puisque tu as un code B qui utilise les résultats d'un code A, pourquoi ne fait tu pas un code unique? S'il n'y a pas de raison spéciale, autant faire un seul script. |
je crois qu'a ce niveau il ya probleme lorsque tu ecris
while ( @resultat )
au lieu d'un
while (<$fh> )
le fichier donc traite le code A est diffenrent de celu donc traite le code B, donc en lisant juste @resultat il faudre aussi qu'il traite le fichier donc sense le faire.
Marsh Posté le 23-08-2015 à 17:00:25
Salut Gilou j#ai eu a essayer ta propositon ca na pas malheureusement pas marche je parle de ceci
Si c'est pour écrire les résultats du code A, suffit de faire des
push @resultat "truc a ecrire\n";
au lieu de faire
print $fh "truc a ecrire\n";
et tout est écrit dans une liste, qu'on peut passer a l'autre code
et a la lecture par le code B, faire un
while ( @resultat )
au lieu d'un
while (<$fh> )
et le tour est joué.
Marsh Posté le 23-08-2015 à 18:31:32
Oui, c'est un foreach ( @resultat ) et non pas un while qu'il faut faire, bien sur, si c'est une boucle sur un array non modifié.
Code :
|
Il y a aussi la variante
Code : |
A+,
Marsh Posté le 24-08-2015 à 00:13:39
merci bien ,tu trouveras peut etre la question bête comment fonctionne ce code
Marsh Posté le 24-08-2015 à 02:33:47
Oui, je comprends pas ta question.
Le premier exemple utilise une liste et le second une zone mémoire accédée comme si c'était un fichier.
A+,
Marsh Posté le 24-08-2015 à 07:34:42
la question est de svoir si je voulais applique l'un des exemple a mon cas precis comment dois je m'y prendre.
je dois cree un dossier sur C dans le quel je je mets le script A et B et maintenant dans perl command line que dois je tape?
salut
que dois je change dans mon regex de maniere a ce que les valeurs 0 soit considere
sub clean {
my $string = shift;
$string =~ s/^\s+//;
$string =~ s/\s+$//;
return $string;
}
Marsh Posté le 24-08-2015 à 16:19:20
Ça veut dire quoi, "que les valeurs 0 soit considere" ?
Sans plus d'explication, ça veut rien dire.
A+,
Marsh Posté le 24-08-2015 à 19:11:24
Merci bien a ta reaction j'ai oublie de mensionner que j'e l'ai resolu.
je sais pas comment je dois applique l'un des 2 codes a mon probleme
d'apres toi pourquoi ce script ne me retourne aucun resultat ($FileResult_0)
Code :
|
Marsh Posté le 19-08-2015 à 23:23:15
Salut
J'ai une Question:
je possede 2 codes nommons les code1 et code2
j'esxecute code1 et il me retourne par-exemple:
papa
titi
toto
tata
tutu
pipi
j'execute code2 il me retourne par-exemple:
titi
toto
pipi
j'explique le procede es qu'il est possible qu'un code2 va dans le dossier ou code1 a stocke son renvoi chercher un certain nombre de
fichiers donc il trouve que ceux ci remplice les conditions donc il cherche les ouvrent(sans toute fois efface ce qui etait deja ecrit dans le fichier) et puis
ecrit aussi des donnes sur ces fichiers et puis le revoit a son tour.
dans un autre dossier.
c'est jute pour savoir si cela st possible , car j'ai un probleme donc je pense que cela peut etres resolu de la sorte.
Merci bien.