dポイントプレゼントキャンペーン実施中!

下記のような二次元配列になったファイル名"abc"があります

1,ab,4500,あ,
2,sd,1000,え,
3,df,500,お,
4,ef,200,い,

リストの4番目のひらがな部分を削除したいのですが
よろしくお願いします。

A 回答 (4件)

ファイルポインタ2つ使えば全部読まなくてよくなるかも


(前から3つだけ有効にした場合)

<?php
$filex = "userdata";
$nfile = "new_userdata";
$fp1 = fopen( $filex, "r" );
$fp2 = fopen( $nfile, "w+" );
flock ( $fp2, LOCK_EX );
$flg=true;
while (($data = fgetcsv($fp1, 1024, ",")) !== FALSE) {
fputs($fp2,($flg?"":"\n").implode(array_slice($data,0,3),","));
$flg=false;
}
flock ( $fp2, LOCK_UN );
fclose ( $fp1 );
fclose ( $fp2 );
?>
    • good
    • 0
この回答へのお礼

回答ありがとうございました、
新しいファイルが考えていた通りできました、
while (($data = fgetcsv($fp1, 1024, ",")) !== FALSE) {
fputs($fp2,($flg?"":"\n").implode(array_slice($data,0,3),","));
$flg=false;
}
この部分は今のところ私の頭では分かりませんが
これからコードを解読して自分のものにしたいと思います

お礼日時:2010/03/17 18:39

>ファイルを書き換えたいのですが



それはfopenを読込属性の'r'で開いてもむり・・・
'r+'で開いて、読んで、シークして、fwriteで書き込む。

また4番目の項目を削除する作業をあやまって2回以上おこなうと
5番目、6番目・・・とどんどん削除されちゃうので、
仕様をもうすこし詰めてからトライすることをおすすめします。

この回答への補足

何度も回答ありがとうございます、
ファイル全体を読み込んで配列に入れ
一行づつ読み込んで新しい配列を作り
新しいファイルを追記モードで開き
一行づつ書き込むことにしました、
下記のコードでおかしなところがあれば指摘お願いします。
<?php
$filex = "userdata";
$nfile = "new_userdata";
$file = fopen ( $filex, "r" );
while ( $arry = fgetcsv( $file, 1000, "," )){ $dcsv[] = $arry; }
fclose ( $file );
foreach ( $dcsv as $line ) {
list ($fmain_no,$fname,$fpasswd,$fmail) = $line;
$array = compact ( "fmain_no", "fname", "fpasswd" );
$string = implode ( ",", $array);
$file = fopen( $nfile, "a" ) or die ( "$nfile エラー" );
flock ( $file, LOCK_EX );
fputs ( $file, $string."\n" );
flock ( $file, LOCK_UN );
fclose ( $file );
}
?>

補足日時:2010/03/16 19:47
    • good
    • 0

listで受けるフローであれば、削除しなくても変数を指定しなければ


すむのでは・・・と思いつつ
foreachで回して要素をunsetするのでどうですか?


<?
$filex = "userdata";
$file = fopen ( $filex, "r" );
while ( $arry = fgetcsv( $file, 1000, "," )){
$dcsv[] = $arry;
}
fclose ( $file );
foreach ( $dcsv as $key=>$line ) {
unset($dcsv[$key][3]);
}
print_r($dcsv);
?>

この回答への補足

<?php
$filex = "userdata";
$file = fopen ( $filex, "r" );
while ( $arry = fgetcsv( $file, 1000, "," )){
$dcsv[] = $arry;
}
fclose ( $file );
foreach ( $dcsv as $key=>$line ) {
unset($dcsv[$key][3]);
}
print_r($dcsv);
//####################################################
?>
どこが間違っているのか上記のコードでは出来ません

ファイルを書き換えたいのですが

補足日時:2010/03/16 13:41
    • good
    • 0

>二次元配列になったファイル名



まったく意味がわかりません。
二次元でも配列でもファイル名でもないように見えますが、
もうすこし具体的に状況を説明してもらわないとなんとも・・・

この回答への補足

ファイル名"userdata"
$filex = "./cgi-bin/data/userdata";
###########################################
$file = fopen ( $filex, "r" ) or die ( "エラー $filex" );
while ( $arry = fgetcsv( $file, 1000, "," )) { $dcsv[] = $arry; }
fclose ( $file );
foreach ( $dcsv as $line ) {
list($no,$fname,$fta,$fhi) = $line;}

$fhi を削除したい。

補足日時:2010/03/16 10:04
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!