嗨,
我试图一次执行一系列嵌套for循环,以便每次外部for循环运行时内部for循环发生一次。
为了给出更多的上下文,我有一个长达58页的PDF文件。每两页都是一个单独的文档,我想分开并打开一个新表来使用文本导入向导(所以29个文档在一个PDF中一起打印)。我还希望列名从第32行开始,数据从每两页文档的第33行开始。
为此,我在文本向导脚本中的Column Names Start和Data Start嵌套了for循环。在29个文档中的每一个上的列名称之间有134行,并且随后在29页,2页长文档中的每一个上开始134行。
整个脚本周围还有一个for循环,用于打开主文件29次,后续的for循环选择要启动哪一行,并为文件中的每个文档创建一个表。
我如何使用Break或Continue命令让脚本执行第一个for循环,进入下一个for循环并让它执行一次,然后继续执行每个for循环的脚本只执行一次,然后再重新开始该文件并进行for循环的下一次迭代?同时还有每个for循环记住过去的迭代,以保持行数应该在哪里。
谢谢,
马特
//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" )
)
));尝试这样的事情
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 ) );
);
名称由JSL设置的三个表
@MattP ,
我试着查看你的代码,这里有一些我注意到的事情:

突出显示的部分对我来说并没有多大意义。如果你愿意尝试,我会推荐一种不同的方法。运行for循环,让它将所有数据读入数据表。虽然读取比必要数据更多的数据可能是违反直觉的,但我认为从代码的效率和清晰度来看,对后处理数据进行后处理会更容易,而不是试图限制所发生的数据。。因此,保持外部循环并删除“列”和“数据”部分中的内部循环。获得数据后,让我们采用示例数据表,看看如何过滤出您想要的数据。给它一个机会,并提供任何帮助。