我有两个字符串,例如$must
和$is
。它们一开始应该是相同的。但如果有错误,我想知道在哪里。
示例:
my $must = "abc;def;ghi";
my $is = "abc;deX;ghi";
";X〃;位置6上的结果不相等,所以这是我需要的结果。
所以我需要像这样的东西
my $count = count_equal_chars($is, $must);
其中结果是"0";6〃;因为字符0到5是相等的。(不管是"5",因为写入++
没有问题。(
到目前为止我的代码:
编辑:添加了一个解决方法。
#!/usr/bin/perl
use strict;
use warnings;
use utf8;
my $head_spec = "company;customer;article;price"; # specified headline
my $count = 0; # row counter
while (<DATA>) {
s/[rn]//; # Data comes originally from Excel ...
if (!$count) {
# Headline:
## -> error message without position:
##print "error in headlinen" unless ($head_spec eq $_);
## -> writeout error message with position:
next if ($head_spec eq $_);
# Initialize char arrays and counter
my @spec = split //, $head_spec; # Specified headline as character-array
my @is = split //, $_; # Readed headline as character-array
my $err_pos = 0; # counter - current position
# Find out the position:
for (@spec) {
$err_pos++, next if $is[$err_pos] eq $_;
last;
}
# Writeout error message
print "error in headline at position: $err_posn";
}
else {
# Values
print "process line $count, values: $_n";
}
}
continue { $count++; }
__DATA__
company;custXomer;article;price
Ser;0815;4711;3.99
Ser;0816;4712;4.85
背景:
背景是,有一个.csv文件的标题很长(>1000个字符(。指定了此标头。如果其中有错误,则该文件有错误,必须由用户编辑。因此,告诉他错误在哪里是有用的,这样他就不需要比较整条线。
使用xor
、^
,操作员可以找到错误位置。在顺序字母匹配的情况下,异或运算会给出