2012-06-12 91 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

本質上,我正在尋找基於預定值替換特定字段中的數據。謝謝你的迴應! –