我有一个包含60个值的flatfile(csv分隔),需要用60个不同的新值替换。
Original_Value1 ---> New_Value1
Original_Value2 ---> New_Value2
Original_Value3 ---> New_Value3
Original_Value4 ---> New_Value4
....到60岁。
该文件包含超过200,000个条目,需要更改60个值。实现这一目标的最有效方法是什么?
答案 0 :(得分:0)
假设
1)旧值和新值的长度可能不同
2)你不知道哪些行包含要提前更改的值
使用fgetcsv()逐行遍历文件 检查该行中的字段,根据需要进行替换。 使用fputcsv()
将该行写回另一个文件答案 1 :(得分:0)
的Perl。至少那是我的建议,应该能够在一行中做到......这就像
那样open( IN, " < filename.csv ");
open( OUT, " > output.csv ");
while (<IN>) { # reads in each line of the file
$line =~ s/Original_Value1/New_Value1/gi; # g is for global, i is to ignore case
$line =~ s/Original_Value2/New_Value2/gi; # g is for global, i is to ignore case
$line =~ s/Original_Value3/New_Value3/gi; # g is for global, i is to ignore case
# ... continue to your values... probably a better way of doing this from a file, but this is quick and dirty, and should work
print OUT $line; # prints out $line to the output file.
}
close(IN);
close(OUT);
无论如何,这已经很接近了,我已经很长一段时间没有写过perl了,它可能会被一个擅长PERL高尔夫的人优化到几个字符...... =)
答案 2 :(得分:0)
以下是示例代码:
$input = 'input.txt';
$output = 'output.txt';
if ($fpin = fopen($input, 'r')) {
if ($fpout = fopen($output, 'a')) {
while ($data = fread($fpin, 1024)) {
fwrite($fpout, your_replacement_function($data));
}
fclose($fpout);
}
fclose($fpin);
}
答案 3 :(得分:0)