[カンマ区切りファイルのデータ一部交換]

---------------------------実行結果-----------------------

■置換する行: ■置換データ:…4列目(職種)を置換する
…行番号と☆印はファイルの内容ではなく、プログラムで付加したもの
■置換する前のファイル内容

1☆1925,0414,・・テ・ノ。ヲ・ケ・ソ・、・ャ。シ,。ハヌミヘ・。ヒ,*,*,*,04140034
2☆1921,0414,トケー貔。ー,。ハハヤスクシヤ。ヒ,オワセ,*,*,04140035
3☆1910,0414,ツ醯ツオ蟒ホ,。ハフオ蝪ヒ,コカフ,*,*,04140036
4☆1901,0414,セョタナ、サー,。ハイヒカウリシヤ。ヒ,ツ醋ャ,*,*,04140037
5☆1895,0414,チホノシ鯡,。ハ・ノ・、・トハクウリシヤ。ヒ,サウキチ,*,*,04140038
6☆1889,0414,・「。シ・ホ・・ノ。ヲ・ク・逾サ・ユ。ヲ・ネ・、・・モ。シ,。ハホサヒウリシヤ。ヒ,・、・ョ・・ケ,*,*,04140039
7☆1884,0414,ススイマソョニ,。ハエアホス。ヒ,ーヲノイ,ケナエ ツ4ツ蠱コロ,*,04140040
8☆1629,0414,・ッ・・ケ・チ・罕。ヲ・ロ・、・リ・・ケ,。ハナキハクウリシヤ。ヒ,・、・ソ・・「,*,*,04140041
9☆1981,0415,イテニ」ースヌオ,。ハ・ェ。シ・ネ・ョ・罕。ヒ,ソタニ狢,Oキソ」ア」カ」ケcm B」ク」キ W」オ」ケ H」ク」オ,*,04150049
10☆1981,0415,コフフセーノサメ,。ハ」チ」ヨスヘ・。ヒ,ソタニ狢,キ アユ キソ。ァAキソ ソネトケ。ァ154cm ・オ ・、 ・コ。ァB.93 W.59 H.89 タアコツ。ァイエヘモコツ ,*,04150001
11☆1978,0415,セセナ靜シツタ,。ハ・ソ・・・ネ。ヒ,コカフ,*,*,04150002
12☆1976,0415,サウニ筅「、,。ハ・「・ハ・ヲ・・オ。シ。ヒ,ナオ,TBS,*,04150003
13☆1976,0415,ー、ケセ ケァー,。ハ・オ・テ・ォ。シ。ヒ,ケュナ,2001ヌッナル。ヨ・ャ・・ミツ郤蝪ラコ゚タメ。「・エ。シ・・ュ。シ・ム。シ,*,04150004
14☆1972,0415,フレツシツフ,。ハフオ蝪ヒ,オワコ,*,*,04150005
15☆1972,0415,・ェ・ッ・オ・ハ。ヲ・ウ・ケ・ニ・」・ハ,。ハソキツホチ爍ヒ,・・キ・「,*,*,04150006
16☆1970,0415,ケセニ」テメ,。ハフオ蝪ヒ,ナオ,*,*,04150007
17☆1969,0415,ナ霙シキー,。ハタシヘ・。ヒ,ソタニ狢,*,*,04150008
18☆1968,0415,・ヨ・鬣メ・爍ヲ・鬘シ・鬣ユ・」,。ハトケオホ・。ヒ,・筵・テ・ウ,*,*,04150009
19☆1967,0415,ーツノタョシ,。ハ・「・ハ・ヲ・・オ。シ。ヒ,サースナ,トォニハチ,*,04150010

---------------------------スクリプト---------------------

$txt_file = 'file_cg.txt'; // 置換前のファイル名
$txt_file2 = 'file_cg2.txt'; // 置換後のファイル名
// ヒアドキュメント
$html_wd = <<<end_hir
<form method="POST" action="$cgi_dir$cgi_name">
<input type="hidden" name="mode" value="go">
置換する行:<select size="1" name="low">
<OPTION value="0">1行目</OPTION>
<OPTION value="1">2行目</OPTION>
<OPTION value="2">3行目</OPTION>
<OPTION value="3">4行目</OPTION>
<OPTION value="4">5行目</OPTION>
<OPTION value="5">6行目</OPTION>
<OPTION value="6">7行目</OPTION>
<OPTION value="7">8行目</OPTION>
<OPTION value="8">9行目</OPTION>
<OPTION value="9">10行目</OPTION>
<OPTION value="10">11行目</OPTION>
<OPTION value="11">12行目</OPTION>
<OPTION value="12">13行目</OPTION>
<OPTION value="13">14行目</OPTION>
<OPTION value="14">15行目</OPTION>
<OPTION value="15">16行目</OPTION>
<OPTION value="16">17行目</OPTION>
<OPTION value="17">18行目</OPTION>
<OPTION value="18">19行目</OPTION>
</select>
置換データ:<select size="1" name="chg">
<OPTION value="(俳優)">(俳優)</OPTION>
<OPTION value="(編集者)">(編集者)</OPTION>
<OPTION value="(野球)">(野球)</OPTION>
<OPTION value="(解剖学者)">(解剖学者)</OPTION>
<OPTION value="(ドイツ文学者)">(ドイツ文学者)</OPTION>
<OPTION value="(歴史学者)">(歴史学者)</OPTION>
<OPTION value="(官僚)">(官僚)</OPTION>
<OPTION value="(天文学者)">(天文学者)</OPTION>
<OPTION value="(オートギャル)">(オートギャル)</OPTION>
<OPTION value="(AV女優)">(AV女優)</OPTION>
<OPTION value="(タレント)">(タレント)</OPTION>
<OPTION value="(アナウンサー)">(アナウンサー)</OPTION>
<OPTION value="(サッカー)">(サッカー)</OPTION>
<OPTION value="(新体操)">(新体操)</OPTION>
<OPTION value="(声優)">(声優)</OPTION>
<OPTION value="(長距離)">(長距離)</OPTION>
</select>…4列目(職種)を置換する<br>
<input type="submit" value="実行" name="hyo">
<input type="reset" value="取消" name="del">
…行番号と☆印はファイルの内容ではなく、プログラムで付加したもの
</form>
end_hir;
if(!$mode){echo $html_wd;}

$html_wd0 = <<<ref_hir
<form method="POST" action="$cgi_dir$cgi_name">
<input type="hidden" name="mode0" value="ref">
<input type="submit" value="置換後のファイルを元に戻す" name="rf">
</form>
ref_hir;
if($mode){echo $html_wd0;}

$html_wd1 = <<<bas_hir
<form method="POST" action="$cgi_dir$cgi_name">
<input type="submit" value="置換前のファイル一覧を見る" name="rf">
</form>
bas_hir;
if($mode || $mode0){echo $html_wd1;}

$chg_data = $chg; // 置換させたいデータ
$cnt = 0; // 行カウント初期化
$lowct = 1; // 行番号初期化
$array_f = array(); // 配列初期化
if(is_file($txt_file)){ // ファイルの確認
if($mode){
$array_f = file($txt_file); // 置換前のファイルを配列へ
// ファイルの内容確認とデータ置換
foreach($array_f as $value){
$value = mb_convert_encoding($value,'EUC-JP','SJIS'); // エンコードSJIS→EUC-JP
// echo $value.'';
if($cnt == $low){ // 該当行の場合のみ置換する
$array_bf = explode(',', $value); // 文字列を配列へ
$mae = $array_bf[3]; // 置換前のデータ
$array_bf[3] = $chg_data; // 先頭から4番目の値を1個交換
$value = ""; // 初期化して次で書き込む
$value = implode(',',$array_bf); // 配列を再文字列化
// continue; // ループを抜ける場合
}
$data_str .= $lowct.'★'.$value; // 頭に行番号と★を付けて全ての行を連結
$cnt++; $lowct++;
}
$low++;
echo '■ファイル'.$low.'行目の4列目を['.$mae.']から['.$chg_data.']へ置換';
echo '■頭に行番号と★を付けて判りやすくしています';
$txt = fopen($txt_file2,'w'); // ファイルを書込みモードで開く
flock($txt,LOCK_EX); // ファイルロック
fwrite($txt,$data_str); // ファイルの書込み
flock($txt,LOCK_UN); // ファイルロック解除
fclose($txt); // ファイルを閉じる
$array_a = file($txt_file2); // 置換後のファイルを配列へ
foreach($array_a as $value_a){
// $value_a = mb_convert_encoding($value_a,'EUC-JP','SJIS'); // エンコードSJIS→EUC-JP
echo $value_a.'';
}
}elseif($mode0){
$array_0 = file($txt_file); // 置換前のファイルを配列へ
foreach($array_0 as $key0 => $value0){
$value0 = mb_convert_encoding($value0,'EUC-JP','SJIS'); // エンコードSJIS→EUC-JP
$lct = $key0+1;
$file0 .= $lct.'★'.$value0;
}
$txt0 = fopen($txt_file2,'w'); // ファイルを書込みモードで開く
flock($txt0,LOCK_EX); // ファイルロック
fwrite($txt0,$file0); // ファイルの書込み
flock($txt0,LOCK_UN); // ファイルロック解除
fclose($txt0); // ファイルを閉じる
echo '■以下、置換後のファイルを元に戻しました(置換前のファイルと同じ)';
$array_a0 = file($txt_file2); // 置換後のファイルを配列へ
foreach($array_a0 as $value_a0){
// $value_a0 = mb_convert_encoding($value_a0,'EUC-JP','SJIS'); // エンコードSJIS→EUC-JP(保存時にしているので不要)
echo $value_a0.'';
}
}else{
echo '■置換する前のファイル内容';
$array_f = file($txt_file); // 置換前のファイルを配列へ
foreach($array_f as $key => $value){
$value = mb_convert_encoding($value,'EUC-JP','SJIS'); // エンコードSJIS→EUC-JP
$lwct = $key+1; // 行番号
echo $lwct,'☆',$value.''; // 行番号と☆印を付加して一覧表示
}
}
}else{
echo 'ファイルが見当たりません!';
exit;
}

----------------------------------------------------------