Hallo,
Ich versuche, eine Reihe von geschachtelten for-Schleifen nacheinander auszuführen, sodass die inneren for-Schleifen jedes Mal einmal vorkommen, wenn die äußere for-Schleife durchlaufen wird.
Um etwas mehr Kontext zu geben, habe ich eine PDF-Datei, die 58 Seiten lang ist. Alle zwei Seiten sind ein einzelnes Dokument, das ich trennen und eine neue Tabelle für den Textimport-Assistenten öffnen möchte (also 29 Dokumente, die in einer PDF-Datei zusammengefasst sind). Ich möchte auch, dass die Spaltennamen in der 32. Zeile beginnen und die Daten in der 33. Zeile jedes zweiseitigen Dokuments beginnen.
Zu diesem Zweck habe ich Schleifen bei Spaltennamen Start und Data Start im Text-Assistenten-Skript geschachtelt. Es gibt 134 Zeilen zwischen den Spaltennamen in jedem der 29 Dokumente und anschließend 134 Zeilen zwischen denen, wo die Daten auf jedem der 29 Seiten langen Dokumente beginnen.
Es gibt auch eine for-Schleife um das gesamte Skript, um die Hauptdatei 29-mal zu öffnen, wobei die folgenden for-Schleifen die zu startende Zeile auswählen und für jedes in der Datei enthaltene Dokument eine Tabelle erstellen.
Wie würde ich den Befehl Break oder Continue verwenden, damit das Skript die erste for-Schleife einmal ausführt, zur nächsten for-Schleife kommt und diese einmal ausgeführt wird, und dann das Skript jeweils nur einmal ausführt, bevor es an der Spitze von gestartet wird die Datei und die nächste Iteration der for-Schleife durchlaufen? Jede for-Schleife muss sich auch an die letzte Iteration erinnern, damit die Zeile dort bleibt, wo sie sein sollte.
Vielen Dank,
Matt
//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" )
)
));Versuchen Sie so etwas
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 ) );
);
Drei Tabellen mit Namen aus JSL
@MattP .
Ich habe versucht, Ihren Code durchzusehen, und hier sind ein paar Dinge, die mir aufgefallen sind:

Die hervorgehobenen Abschnitte sind für mich nicht sehr sinnvoll. Ich würde einen anderen Ansatz empfehlen, wenn Sie bereit sind, es auszuprobieren. Führen Sie Ihre for-Schleife aus und lassen Sie alle Daten in die Datentabelle einlesen. Es mag zwar nicht intuitiv sein, mehr Daten als nötig zu lesen, ich denke, sowohl aus Gründen der Effizienz als auch aus Gründen der Klarheit Ihres Codes, wäre es viel einfacher, die eingelesenen Daten nachzubearbeiten, als zu versuchen, die Eingaben zu begrenzen . Behalten Sie also Ihre äußere Schleife und entfernen Sie die inneren Schleifen in den Abschnitten "Column" und "Data". Sobald Sie die Daten haben, lassen Sie uns eine Beispieldatentabelle nehmen und sehen, wie Sie herausfiltern können, was Sie möchten. Probieren Sie es aus und läuten Sie jede Hilfe ein.