Salut,
J'essaie d'exécuter une série de boucles for imbriquées une par une, de sorte que les boucles for internes se produisent une fois à chaque fois que la boucle for externe est exécutée.
Pour donner un peu plus de contexte, j'ai un fichier PDF de 58 pages. Toutes les deux pages constituent un document individuel que je souhaite séparer et ouvrir un nouveau tableau pour utiliser l'assistant d'importation de texte (soit 29 documents regroupés dans un fichier PDF). Je souhaite également que les noms de colonne commencent à la 32ème ligne et que les données commencent à la 33ème ligne de chaque document de deux pages.
Pour ce faire, j'ai imbriqué des boucles dans Column Names Start et Data Start dans le script de l'assistant de texte. Il y a 134 lignes entre les noms de colonne sur chacun des 29 documents, puis entre les lignes commençant par les données sur chacun des 29 documents de 29 pages.
Il existe également une boucle for autour du script complet pour ouvrir le fichier principal 29 fois, les boucles suivantes forçant la ligne à démarrer et créant un tableau pour chaque document contenu dans le fichier.
Comment utiliser la commande Break ou Continue pour que le script exécute la première boucle for une fois, passe à la boucle for suivante et l'exécute une fois, puis continue le script en exécutant chaque boucle for une seule fois avant de recommencer en haut de le fichier et en passant par la prochaine itération de la boucle for? En ayant également chaque boucle for, souvenez-vous de l'itération passée pour conserver le nombre de lignes où il devrait être.
Je vous remercie,
Mat
//opens text file using text wizard
for(i=1, i<=29, i++,
Open(
"C:\Users\file.txt",
columns(
New Column( "Parameters", Character, "Nominal" ),
New Column( "Results", Character, "Nominal" ),
New Column( "Units", Character, "Nominal" ),
New Column( "Uncertainty", Character, "Nominal" ),
New Column( "Spec", Character, "Nominal" ),
New Column( "Methods", Character, "Nominal" ),
New Column( "c000007", Character, "Nominal" ),
New Column( "c000008", Character, "Nominal" ),
New Column( "c000009", Character, "Nominal" ),
New Column( "c0000010", Character, "Nominal" ),
New Column( "c0000011", Character, "Nominal" ),
New Column( "c0000012", Character, "Nominal" ),
New Column( "c0000013", Character, "Nominal" ),
New Column( "c0000014", Character, "Nominal" ),
New Column( "c0000015", Character, "Nominal" ),
New Column( "c0000016", Character, "Nominal" ),
New Column( "c0000017", Character, "Nominal" ),
New Column( "c0000018", Numeric, "Continuous", Format( "Best", 10 ) )
),
Import Settings(
End Of Line( CRLF, CR, LF ),
End Of Field( Space, CSV( 0 ) ),
Strip Quotes( 1 ),
Use Apostrophe as Quotation Mark( 0 ),
Use Regional Settings( 0 ),
Scan Whole File( 1 ),
Treat empty columns as numeric( 0 ),
CompressNumericColumns( 0 ),
CompressCharacterColumns( 0 ),
CompressAllowListCheck( 0 ),
Labels( 1 ),
Column Names Start(
for(q=1, q<=29, q++,
(32*q)+for(p=135, p<29, p++,
(show(p));
);
);
),
Data Starts(
for(t=1, t<=29, t++,
(33*t)+for(s=135, s<29, s++,
(show(s));
);
);
),
Lines To Read( "135" ),
Year Rule( "20xx" )
)
));Essayez quelque chose comme ça
filename = Save Text File( "$temp\x.csv", "a,b,c
1,2,3
a,b,c
2,3,4
a,b,c
3,4,5
" );
dtlist = {};
For( i = 1, i <= 3, i += 1,
names = (i - 1) * 2 + 1;
data = names + 1;
dtlist[i] = Open(
filename,
columnNamesStart( names ),
DataStarts( data ),
Lines To Read( 1 )
);
dtlist[i] << setname( "segment" || Char( i ) );
);
Trois tables avec des noms définis à partir de JSL
@MattP ,
J'ai essayé de parcourir votre code et voici quelques remarques que j'ai remarquées:

Les sections en surbrillance n'ont pas vraiment de sens pour moi. Je recommanderais une approche différente si vous êtes prêt à l'essayer. Exécutez votre boucle for et laissez-le lire toutes les données dans la table de données. Bien qu'il soit peut-être contre-intuitif de lire plus de données que nécessaire, je pense à la fois par l'efficacité et la clarté de votre code, il serait beaucoup plus facile de post-traiter les données lues plutôt que d'essayer de limiter les données entrantes . Alors, gardez votre boucle externe et supprimez les boucles internes dans les sections "Colonne" et "Données". Une fois que vous avez les données, prenons un exemple de table de données et voyons comment filtrer ce que vous voulez. Donnez-lui un coup de feu et sonnez pour toute aide.