lire le fichier zip, s'il contient "chaîne", puis ajouter une ligne à une table avec une étiquette de valeurSalut,
J'ai créé une table puis ouvert un dossier zip, d'abord enregistrer un fichier journal dans un chemin spécifique, ensuite lire un fichier (fichier texte long), puis vérifier s'il contient une chaîne. si oui, ajoutez une nouvelle ligne à la table créée et ajoutez de la valeur. tout fonctionne jusqu'à l'ajout d'une nouvelle ligne et d'une valeur à la table. Je ne peux pas comprendre quel est le problème car il n'y a aucune erreur ou information dans le journal. Voici mon script, quelqu'un peut-il suggérer quel est le problème?
dt = open(sometable);
lst2 = column(dt1, "t1") << Get Values;
dt2 = new table("data_"||todaydate,
new column("t1", character),
newcolumn("data", character)
);
for (k=1, k <=N items(lst2), k++,
//print (lst2[k]);
Try(
za = open(path2||lst2[k], zip);
dirlist = za << dir;
//show(dirlist); //check the list
for (l=1, l<=N Items(dirlist), l++,
If (Left(dirlist[l],5) == "tests" & Right(dirlist[l],8) == "_raw.log" ,
show(dirlist[l]);
text = za << read(dirlist[l]);
//print (dirlist[l]);
save text file(path1|| Format Date( Today(), "ddmonyyyy" ) ||"\"||lst2[k]||"_"||dirlist[l],text);
,
dirlist[l]== "line.log" ,
text = za << read(dirlist[l]);
if(contains(text, "string"),
dt2 << add rows (t1 = lst2[k], data = "Yes"),
dt2 << add rows (t1 = lst2[k], data = "No")
);
);
)
,
print (lst2[k] || "fail to open");
Throw();
);
);
Automatisation et scriptRe : lire le fichier zip, s'il contient "chaîne", puis ajouter une ligne à une table avec une étiquette de valeurJe pense avoir trouvé le problème. Besoin du {} . Cela fonctionnait sans {} auparavant. Quelqu'un a un aperçu pourquoi maintenant besoin du {} ?
dt2 << add rows ({t1 = lst2[k], data = "Yes"}),
dt2 << add rows ({t1 = lst2[k], data = "No"})
Re : lire le fichier zip, s'il contient "chaîne", puis ajouter une ligne à une table avec une étiquette de valeur
Help->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexHelp->Scripting IndexAide-> Index des scripts
La doc est comme ça depuis au moins JMP 14. Constatez-vous un changement de comportement entre les versions ?
Re : lire le fichier zip, s'il contient "chaîne", puis ajouter une ligne à une table avec une étiquette de valeurSalut Craige,
Je faisais ci-dessous et avec succès, quand seulement ajouter des lignes et de la valeur à l'une des colonnes.
dt2 = new table("data_"||todaydate,
new column("t1", character),
newcolumn("data", character)
);
for (k=1, k <=N items(lst2), k++,
dt2 << add rows (t1 = lst2[k])
);
Re : lire le fichier zip, s'il contient "chaîne", puis ajouter une ligne à une table avec une étiquette de valeurSi lst2[k] était un nombre, 1 peut-être, je peux voir comment cela aurait pu sembler fonctionner. L'affectation serait évaluée, en changeant t1 de l'(ancienne) ligne courante, puis le résultat (en t1) serait le nombre de lignes à ajouter. Mais ces lignes ne recevraient pas de valeur avant la prochaine fois dans la boucle. Mais cela ne correspond pas tout à fait à ce que vous avez (un caractère t1), alors peut-être pas.
Heureux que vous l'ayez compris; la liste n'évalue pas les éléments de la liste. Au lieu de cela, la liste est transmise à la méthode add rows et addrows utilise la liste sur la ligne fraîchement ajoutée.
Re : lire le fichier zip, s'il contient "chaîne", puis ajouter une ligne à une table avec une étiquette de valeurJ'ai une question suivante sur try() et throw() dans mon script original ci-dessus. Je rencontre une situation dans laquelle try() + throw() ne saute pas et continue jusqu'à la boucle suivante. Le problème se produit lors de la lecture de line.log. L'un des line.log est si énorme qu'il ne peut pas être ouvert. J'ai conclu comme ça parce que j'ai essayé manuellement d'ouvrir le line.log spécifique et cela m'a donné une erreur disant que le fichier est trop gros pour être ouvert par txt. Donc ajouté un autre try() et throw() pour cela mais toujours, il n'a imprimé que le message de lst2[k]"cannot read" et lst2[k[ "fail to open". puis la boucle s'arrête à ce lst2[k], sans passer à la boucle suivante. Ai-je fait une erreur sur la façon d'utiliser try() et throw() ?
dt = open(sometable);
lst2 = column(dt1, "t1") << Get Values;
dt2 = new table("data_"||todaydate,
new column("t1", character),
newcolumn("data", character)
);
for (k=1, k <=N items(lst2), k++,
//print (lst2[k]);
Try(
za = open(path2||lst2[k], zip);
dirlist = za << dir;
//show(dirlist); //check the list
for (l=1, l<=N Items(dirlist), l++,
If (Left(dirlist[l],5) == "tests" & Right(dirlist[l],8) == "_raw.log" ,
show(dirlist[l]);
text = za << read(dirlist[l]);
//print (dirlist[l]);
save text file(path1|| Format Date( Today(), "ddmonyyyy" ) ||"\"||lst2[k]||"_"||dirlist[l],text);
,
dirlist[l]== "line.log" ,<BR />try(
text = za << read(dirlist[l]);
if(contains(text, "string"),
dt2 << add rows (t1 = lst2[k], data = "Yes"),
dt2 << add rows (t1 = lst2[k], data = "No")
);<BR />,<BR />print(lst2[k] || "cannot read");<BR />throw();<BR />);
);
)
,
print (lst2[k] || "fail to open");
Throw();
);
);Re : lire le fichier zip, s'il contient "chaîne", puis ajouter une ligne à une table avec une étiquette de valeurJ'ai reformaté le code (control-M) pour voir la structure et je pense que vous voulez omettre le throw()
The error from <<read was caught, then re-thrown to the outer try,The error from <<read was caught, then re-thrown to the outer try,The error from <<read was caught, then re-thrown to the outer try,The error from <<read was caught, then re-thrown to the outer try,The error from <<read was caught, then re-thrown to the outer try,The error from <<read was caught, then re-thrown to the outer try,The error from <<read was caught, then re-thrown to the outer try,The error from <<read was caught, then re-thrown to the outer try,The error from <<read was caught, then re-thrown to the outer try,The error from <<read was caught, then re-thrown to the outer try,The error from <<read was caught, then re-thrown to the outer try,The error from <<read was caught, then re-thrown to the outer try,The error from <<read was caught, then re-thrown to the outer try,The error from <<read was caught, then re-thrown to the outer try,The error from <<read was caught, then re-thrown to the outer try,L'erreur de <
Vous ne voulez probablement pas non plus le lancer extérieur. Parfois, utiliser le throw() comme ça est souhaitable, si vous voulez vraiment dire que vous n'avez pas fini de gérer l'exception et que vous voulez qu'elle se propage à un gestionnaire contenant, mais au moins pour l'essai interne, je pense que vous en avez pris soin et que vous voulez que le boucle pour continuer.
Re : lire le fichier zip, s'il contient "chaîne", puis ajouter une ligne à une table avec une étiquette de valeursupprimez uniquement l'inner throw() le script affiche tous les lst2[k] "impossible de lire". Cependant, si vous supprimez les throw()s internes et externes, le script s'exécute comme prévu.
Re : lire le fichier zip, s'il contient "chaîne", puis ajouter une ligne à une table avec une étiquette de valeurJe pense que vous avez la réponse, juste pour clarifier:
dt = Open( sometable );
lst2 = Column( dt1, "t1" ) << Get Values;
dt2 = New Table( "data_" || todaydate, New Column( "t1", character ), New Column( "data", character ) );
For( k = 1, k <= N Items( lst2 ), k++,
Try(
za = Open( path2 || lst2[k], zip );
dirlist = za << dir;
For( l = 1, l <= N Items( dirlist ), l++,
If( Left( dirlist[l], 5 ) == "tests" & Right( dirlist[l], 8 ) == "_raw.log",
Show( dirlist[l] );
text = za << read( dirlist[l] );
Save Text File( path1 || Format Date( Today(), "ddmonyyyy" ) || "\" || lst2[k] || "_" || dirlist[l], text );
,/*else if*/ dirlist[l] == "line.log",
Try(
text = za << read( dirlist[l] );
If( Contains( text, "string" ),
dt2 << add rows( t1 = lst2[k], data = "Yes" ),
dt2 << add rows( t1 = lst2[k], data = "No" )
);
,/* catch*/
Print( lst2[k] || "cannot read" );
Throw(); // this throw will end the for-L loop
);
);
);
,/*catch*/
Print( lst2[k] || "fail to open" );
Throw(); // this throw will end the for-K loop
)
);