Passer \n en parametre
Résolu
paul.vid
-
paul.vid -
paul.vid -
Bonjour,
J'ai un petit souci en perl.
J'ai un script qui va chercher des données dans une base (de données) pour les exporter vers un fichier.
Je dois passer en parametre de ligne de commande les séparateurs entre les données et entre les lignes de la tables.
Ces parametres sont :
-rs ";|" record separator (default ;|)
-es "\n" end of line separator (default \n)
Par exemple, si je tape ./mon_script -rs ";|" -es "\n" je devrais avoir un fichier du style:
Or, j'ai comme résultat, un fichier sur une ligne car le \n n'est pas interprété:
Voici la portion de code utilisée:
Le truc le plus bizarre c'est qu'en utilisant les valeurs par défaut (voir portion de code) j'ai le bon fichier resultat o_O
Je ne comprends pas ou est mon erreur.
PS: j'ai déja essayé pas mal de combinaison de "", pas de "" dans la ligne de commande et dans le code...
J'ai un petit souci en perl.
J'ai un script qui va chercher des données dans une base (de données) pour les exporter vers un fichier.
Je dois passer en parametre de ligne de commande les séparateurs entre les données et entre les lignes de la tables.
Ces parametres sont :
-rs ";|" record separator (default ;|)
-es "\n" end of line separator (default \n)
Par exemple, si je tape ./mon_script -rs ";|" -es "\n" je devrais avoir un fichier du style:
record1;|record2;|...;|record20 record1;|record2;|...;|record20 record1;|record2;|...;|record20 ...
Or, j'ai comme résultat, un fichier sur une ligne car le \n n'est pas interprété:
record1;|record2;|...;|record20\nrecord1;|record2;|...;|record20\nrecord1;|record2;|...;|record20\nrecord1;|record2;|...;|record20...
Voici la portion de code utilisée:
[...] $record_sep = ";|"; # valeur par defaut $end_line_sep = "\n"; # valeur par defaut [...] elsif ( $ARGV[$i] eq "-rs") { $i++; $record_sep=$ARGV[$i]; } elsif ( $ARGV[$i] eq "-es") { $i++; $end_line_sep=$ARGV[$i]; } [...] for($start=0;$start<$query_size;$start++){ $line = "$line" . "$data[$start]" . $record_sep; } $line = "$line" . "$data[$query_size]" . $end_line_sep; $Fh->print ("$line"); [...]
Le truc le plus bizarre c'est qu'en utilisant les valeurs par défaut (voir portion de code) j'ai le bon fichier resultat o_O
Je ne comprends pas ou est mon erreur.
PS: j'ai déja essayé pas mal de combinaison de "", pas de "" dans la ligne de commande et dans le code...
A voir également:
- Passer \n en parametre
- Remettre parametre usine pc - Guide
- Parametre dns - Guide
- Parametre windows - Guide
- Netflix paramètre compte - Guide
- Passer en azerty - Guide
1 réponse
Bon, pour information, j'ai trouvé une solution, tres moche je vous l'accorde.
En fait le probleme venait du shell qui faisait interpreter le \n en 2 caracteres distincts, d'ou la solution
C'est immonde, je lance un process pour interpreter un \n, mais ca marche.
Je suis preneur d'autres idées par contre ...
En fait le probleme venait du shell qui faisait interpreter le \n en 2 caracteres distincts, d'ou la solution
[...] elsif ( $ARGV[$i] eq "-rs") { $i++; $record_sep=system("echo $ARGV[$i]"); } elsif ( $ARGV[$i] eq "-es") { $i++; $end_line_sep=system("echo $ARGV[$i]"); } [...]
C'est immonde, je lance un process pour interpreter un \n, mais ca marche.
Je suis preneur d'autres idées par contre ...