2012-06-12 29 views
0

我有一个flatfile(csv分隔符),需要用60个不同的新值替换60个值。替换平面文件中文本的脚本

Original_Value1 ---> New_Value1 
Original_Value2 ---> New_Value2 
Original_Value3 ---> New_Value3 
Original_Value4 ---> New_Value4 

....至60

文件拥有超过20万项与需要改变的60个值。什么是实现这一目标的最有效方式?

+0

[查找和替换使用PHP的平面文件中的值]的可能重复(http://stackoverflow.com/questions/2944080/find-and-replace-values-in-a-flat-file-using- php) – mario

回答

0

假设

1)的新老值的长度可以不同

2)您不知道哪些行包含值到

循环通过文件被改变的时间提前,逐行使用fgetcsv() 检查该行中的字段,将替换视为必要条件。 使用fputcsv()编写回不同的文件()

+0

是的旧和新值的长度不同,但有一个特定的列我正在寻找更改数据。该列包含一个代码,该代码对应于Magento实现中的类别的位置。当前值示例为“001094500”应成为“\ Store \ Shoes”谢谢您的回复! –

+0

哦,我明白了...你要我发送邮件... – goat

+0

说实话,我的技术能力有限,我正在学习。希望你能帮助n00b。 –

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高尔夫球有人好进行优化下降到几个字符... =)

+0

刚刚看到,这可能只是PHP的前...如果是,其他答案将会更有用... – Cyric297

+0

我把PHP,PERL是可以接受的。因此,使用我的示例的脚本应该如下所示:open(IN,“ output.csv”); while(){line =〜s/Original_Value1/New_Value1/gi; $ line =〜s/Original_Value2/New_Value2/gi;打印OUT $行; $ line =〜s/Original_Value3/New_Value3/gi; $ line =〜s/Original_Value4/New_Value4/gi; (IN); } close(IN); 关闭(OUT);感谢您的回复! –

+0

尝试了这个例子,并收到一个只有1个值的0k输出文件来改变。 –

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); 
} 
0

看看fgetcsv通过读取文件中的行行并添加一些代码以查看每行是否包含要替换的字符串。

阅读完每一行后,请执行您需要的操作并将其写入新文件。您可以使用fputcsv来编写CSV。最后删除旧文件。

也许有人知道一种方式来编辑文件的中间?我不认为这是可能的。

+0

本质上,我正在寻找基于预定值替换特定字段中的数据。谢谢你的回应! –