如何解决在@spl中使用未初始化的值替换s ///
运行脚本时出现以下错误。
Use of uninitialized value in print at PreProcess.pl line 137.
Use of uninitialized value within @spl in substitution (s///) at PreProcess.pl line 137.
脚本中是否存在语法错误? (在Windows中运行-Strawberry 64最新版本)
my $Dat=2;
my $a = 7;
foreach (@spl) {
if ( $_ =~ $NameInstru ) {
print $spl[$Dat] =~ s/-/\./gr," 00:00; ",$spl[$a],"\n"; # data
$Dat += 87;
$a += 87;
}
}
在数组内部,我拥有这种类型的数据
"U.S. DOLLAR INDEX - ICE FUTURES U.S."
150113
2015-01-13
098662
ICUS
01
098
128104
14111
88637
505
13200
50
269
43140
34142
1862
37355
482
180
110623
126128
17480
1976
1081
-3699
8571
-120
646
50
248
1581
-8006
319
2093
31
-30
1039
1063
42
18
100.0
11.0
69.2
0.4
10.3
0.0
0.2
33.7
26.7
1.5
29.2
0.4
0.1
86.4
98.5
13.6
1.5
215
7
.
.
16
.
.
50
16
8
116
6
4
197
34
28.6
85.1
41.3
91.3
28.2
85.1
40.8
91.2
"(U.S. DOLLAR INDEX X $1000)"
"098662"
"ICUS"
"098"
"F90"
"Combined"
"U.S. DOLLAR INDEX - ICE FUTURES U.S."
150106
2015-01-06
098662
ICUS
01
098
127023
17810
80066
625
12554
0
21
41559
42148
1544
35262
452
210
109585
125065
17438
1958
19675
486
23911
49
2717
0
-73
9262
-5037
30
5873
270
95
18439
19245
1237
431
100.0
14.0
63.0
0.5
9.9
0.0
0.0
32.7
33.2
1.2
27.8
0.4
0.2
86.3
98.5
13.7
1.5
202
7
.
.
16
0
.
48
16
9
105
6
4
185
34
29.3
83.2
43.2
90.6
28.9
83.2
42.8
90.5
"(U.S. DOLLAR INDEX X $1000)"
"098662"
"ICUS"
"098"
"F90"
"Combined"
解决方法
您可能试图将每个大小为87行的数据集文件加载到一个数组中,然后在尝试从最后一个数组索引之外读取数据时,在数据末尾出现错误。
您可能可以通过遍历数组索引而不是数组值来解决它,例如
try
RespJson := IdHTTP1.Post
('http://192.168.0.6:1000/allcalculate.php',data);
finally
data.Free;
end;
delete(RespJson,length(RespJson),1);
delete(RespJson,1,1);
RespJson := StripChars(RespJson,['"']);
arrresp:= splitstring(RespJson,',');
arrresp:=splitstring(arrresp[30],':');
advedit48.Text:=arrresp[1];
虽然这可能会解决您的问题,但尝试找到一种正确的方法来解析文件可能会更好。
如果输入文件中的记录用空白行分隔,则可以尝试通过将input record separator更改为my $Dat = 2;
my $a = 7;
my $set_size = 87;
for (my $n = 0; $n + $a < @spl; $n += $set_size) {
if ( $spl[$n] =~ $NameInstru ) {
print $spl[$n + $Dat] =~ s/-/\./gr," 00:00; ",$spl[$n + $a],"\n"; # data
}
}
或""
一次读取整个记录。然后,您可以在换行符"\n\n"
上拆分结果数组中的每个元素,并获得完整的记录。例如:
\n
,
TLP迭代数组索引,每次增加87的解决方案很棒。
这是一种更复杂的解决方案,但不需要将整个文件加载到内存中。
my $lines_per_row = 87;
my @row;
while (<>) {
chomp;
push @row,$_;
if (@row == $lines_per_row) {
my ($instru,$dat,$a) = @row[0,2,7];
if ($instru =~ $NameInstru) {
print $dat =~ s/-/\./gr," 00:00; $a\n";
}
@row = ();
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。