我希望使用perl并编写一个程序,在大的制表符分隔文本文件(100000行)中查找纬度和经度值,并将lat长值中使用的值替换为a。 。该文件有多列。
即。我想把它改成。
51,2356至51.2356
有人能告诉我这是怎么做到的吗?
非常感谢,答案 0 :(得分:0)
你不需要一个"程序"为此,你真的用一个衬里做这样的事情。如果您想在整个文件中用psum :: [[Float]] -> [Float]
psum (x1:x2:xs) = psum (binpsum x1 x2 : xs)
where binpsum (x:xs) (y:ys) = x+y : binpsum xs ys
binpsum [x] (y:ys) = x+y : ys
binpsum (x:xs) [y] = x+y : xs
psum [x] = x
(点)替换文件中的所有 ,
(逗号)(您的问题不会涉及原始文件格式的细节) )然后下面的诀窍:
.
在运行替换为perl -pi.bak -e 's/,/\./g;' your_file.txt
之前,它还会备份您的文件。
答案 1 :(得分:0)
快速而肮脏的方式是用点替换所有逗号(如果这将满足您的要求)
while (<$fh>) {
$_ =~ s/,/\./g
}
但是,如果还有其他字段可能会受到影响,更好的解决方案是仅替换所需的列。
假设您感兴趣的两个字段是制表符分隔文件的第一列和第二列,理想情况下应该匹配两个字段,然后用&#34; dot&#34;替换。
while (<$fh>) {
if ($_ =~ /(\d+,\d+)\|(\d+,\d+)\|(.*)$/) {
my ($a, $b, $c) = ($1, $2, $3);
$a=~s/,/\./g;
$b=~s/,/\./g;
$_= $a."|".$b."|".$c;
}
}
下面, $ a和$ b将匹配&#34;纬度和经度&#34;列。