現在PHPを扱っています。
ファイル書き込みについての質問です。
fwrite等でファイル内の特定の位置に、空行を追加する事はできるのでしょうか。
例)
sample.txt
a a a
3行だけ書かれているsample.txtファイルを以下のように
a a //空行 //空行 a
3、4行目に空行を加えた5行のファイル内容に変更したいと思っています。
何かアドバイスがあれば、よろしくお願い致します。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
全部よみとって整形したうえで、先頭にシークした上で上書きすればいいのでは?
投稿2016/12/08 05:26
総合スコア114843
0
ベストアンサー
いろんなやり方があるとは思いますが、テキストファイル操作なので行を挿入するというより以下のような処理になります。
###方法1
- 対象のテキストファイルを全て読み込み
- 「挿入する位置までの行」を出力
- 「挿入する行」を出力
- 「挿入する位置以降の行」を出力
PHP
1<?php 2ini_set( 'display_errors', 1 ); 3ini_set( 'error_reporting', E_ALL ); 4$lines = file('sample.txt'); 5$fp=fopen("sample.txt","w"); 6foreach ($lines as $line_num => $line) { 7 if ($line_num == 2) { 8 fputs($fp, PHP_EOL); 9 fputs($fp, PHP_EOL); 10 } 11 fputs($fp, $line); 12} 13fclose($fp);
結果
PHP
1$ cat sample.txt 2a 3a 4a 5$ od -tx1 sample.txt 60000000 61 0a 61 0a 61 0a 70000006 8$ php ins2line.php 9$ cat sample.txt 10a 11a 12 13 14a 15$ od -tx1 sample.txt 160000000 61 0a 61 0a 0a 0a 61 0a 170000010 18$
###方法2
- 対象のテキストファイルを全て読み込み
- 読み込んだものを文字列整形
- 文字列成形したものを出力
PHP
1<?php 2ini_set( 'display_errors', 1 ); 3ini_set( 'error_reporting', E_ALL ); 4$data = file_get_contents('sample.txt'); 5$out = preg_replace("/^(.*\n.*\n)(.*)/", '${1}' . "\n\n" . '${2}', $data); 6$data = file_put_contents('sample.txt', $out);
###方法3
0. 対象のテキストファイルを全て読み込み(行ごとのarrayに読み込む)
0. 読み込んだarrayの3番目の要素の前に改行を2つの要素として挿入
0. 2の結果を出力
PHP
1<?php 2$filepath = 書き込むファイルの絶対パス 3$ret_array = file($filepath); 4$ret_array = array_splice($ret_array,2,0, array("\n", "\n")); 5file_put_contents($filepath, $ret_array);
投稿2016/12/08 05:19
編集2016/12/09 14:35総合スコア7914
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/12/09 06:39
2016/12/09 14:15
2016/12/09 14:27
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。