1

編集するファイルがあります。これには次のものが含まれています。

Categories,
Diamond,10,11,
Coal,21,21,

「Diamond」を含む行末に文字列を追加するにはどうすればよいですか?

私が持っているのは、ファイルの最後に文字列を追加できるコードですが、特定の行にその文字列を追加する方法がわかりません。

$function_Result = mysql_fetch_row($function_Ask, 0);

$file_To_Edit = "item_Data.csv";
$opened_File = fopen($file_To_Edit, 'w') or die("Error. Code:2 - Can not open file $file_To_Edit");

$string_Data = $function_Result[0] . ",";
fwrite($opened_File, $string_Data);
fclose($opened_File);
4

3 に答える 3

4

preg_replaceファイルの内容が大きすぎない場合は、 を使用する必要がありました。

$content = file_get_contents('file.txt');
/* in case of unwanted \r */ $content = str_replace("\r", '', $content);
$content = preg_replace("#^(Diamond.*)$#m", '$1' . $append, $content);
file_put_contents('file.txt', $content);
于 2012-07-16T12:41:25.397 に答える
3

以前に投稿されたすべてのソリューションは、大きなファイルで作業するときに失敗する可能性があります。これは、あらゆるサイズのファイルで機能するものです。(ファイルが読み取り可能および書き込み可能かどうかなど、いくつかのチェックを追加する必要があります。)

<?php
$file = "item_Data.csv"
$tmpFile = $file .".tmp";

$in = fopen($file, "r")
$out = fopen($tmpFile, "w")

while (($buffer = fgets($in)) !== false) {

    if (preg_match('/my search pattern/', $buffer )) {

        $buffer .= 'append this to the matched line';
    }

    fwrite($out, $buffer);
}

fclose($in);
fclose($out);
unlink($file);
rename($tmpFile, $file);

?>
于 2012-07-16T12:50:20.480 に答える
1
<?php 

$string_Data = '444555';

$file_To_Edit = "./11.csv";

$opened_File = file($file_To_Edit) or die("Error. Code:2 - Can not open file $file_To_Edit"); // Reads entire file into array of file lines

$diamond_lines = preg_grep('#^Diamond#', $opened_File); // Finds array with line started with 'Diamonds'

foreach(array_keys($diamond_lines) as $key) { // Runs 'Diamonds' array

    $opened_File[$key] = substr($opened_File[$key], 0, -1) . $string_Data; // Removes the last character from 'Diamond' line (new line chracter) and adds $string_Data variable at the end

}

//var_dump($opened_File);

$f = fopen($file_To_Edit, 'w');

fwrite($f, implode("\n", $opened_File)); // Writes new .CSV file

fclose($f);

?>
于 2012-07-16T12:47:18.827 に答える