No.7ベストアンサー
- 回答日時:
ついでに・・・
PHPつかうならPHPの使用バージョン書いてください
もしPHP5以降をご利用でしたら
>fwrite関数を使用しないで書き込む事はできないものでしょうか。
fputcsv()なんて関数もあります。
ただ、ファイルに書くときは「fwrite」をつかうものなので
あえてえ「使用しない」理由がわかりません。
とりあえず、初心者なのはわかったので、とにかくマニュアル読んでください
まずはそこからでしょう。
http://www.php.net/manual/ja/refs.fileprocess.fi …
http://www.php.net/manual/ja/function.fgetcsv.php
この回答への補足
ここに模範解答を貼り付けさせて頂きます。
<html>
<head><title>kadai2-2</title></head>
<body>
<?php
$infp = fopen("c:\apache2\htdocs\kadai2_2in.txt", "r");
$otfp = fopen("c:\apache2\htdocs\kadai2_2ot.txt", "w");
while(!feof($infp)){
$rep = preg_replace("/\"/","",fgets($infp));
fputs($otfp,$rep);
}
fclose($infp);
fclose($otfp);
?>
</body>
</html>
再度のアドバイスありがとうございます。
>PHPつかうならPHPの使用バージョン書いてください
すいません。PHP5.2.9ですね。
>ただ、ファイルに書くときは「fwrite」をつかうものなので
>あえてえ「使用しない」理由がわかりません。
正直言いますと、自分は今PHP講座の通信教育を受けてまして、これは、その課題なんですね。
こういう風に書くと、その講座は良くないと思われるかもしれませんが、まだfwrite関数を使用していないのですね。
その代わり、fopen関数のモードを使用するようにという事なんだと思います。
ちょうど今自分なりにソースコードを書いてみました。
結果は少しの進歩はありましたが、失敗でした。
もし宜しければ、見て頂けると大変有り難いです。
No.6
- 回答日時:
構文ミスです。
while (($data = fgetcsv($fp,3000,",")) !== false) {
↓
while (($data = fgetcsv($infp,3000,",")) !== false) {
ついつい癖で$fpを使ってしまうもので、、、
No.5
- 回答日時:
yambejpさんのご指摘のように、単純にfgetcsv()を利用すれば、わざわざ正規表現など使わなくても、ダブルクォーテーションは勝手に外れてくれます。
その、sampleout.txtをどのように利用するかはわかりませんが、単純に前後のダブルクォーテーションを外すだけなら、、、
<?php
$infp = fopen("C:\Apache2\htdocs\samplein.txt", "r");
$otfp = fopen("C:\Apache2\htdocs\sampleout.txt", "r+");
$outcsv="";
while (($data = fgetcsv($fp,3000,",")) !== false) {
$outcsv.=implode(",",$data)."\n";
}
fclose($infp);
fwrite($otfp,$outcsv);
fclose($otfp);
?>
確認していなので、構文にミスがあったらゴメンナサイ
この回答への補足
自分はPHP初心者です。
自分なりに作成したプログラムを見て頂けませんでしょうか。
<?php
$infp = fopen("C:\Apache2\htdocs\kadai2_2in.txt", "r");
$otfp = fopen("C:\Apache2\htdocs\kadai2_2out.txt", "w+");
while (!feof($infp)) {
$buffer = fgetcsv($infp);
fputs($otfp, $buffer);
}
fclose($infp);
fclose($otfp);
?>
これだと実行できるのですが、sampleout.txtに書き込まれるのは、ArrayArrayArrayでした。
これを実行させると、
アドバイスありがとうございます。
しかも、ソースコードまで書いて頂き、感謝します。
ただ、少し問題点があります。
まず、私の書いたソースコードなのですが、
$otfp = fopen("C:\Apache2\htdocs\sampleout.txt", "r+");
↑これですね。
モードの部分ですが、必ずしも『r+』とは限らないという事です。
他に適したモードがあるかもしれません。
後は3000の部分ですね。
この数字は何を意味しているのでしょうか。
後はPHP初心者なので意見できる立場でもないのですが、先ほどモードが適しているかどうかは分からない、と書きました。
なので、fwrite関数を使用しないで書き込む事はできないものでしょうか。
すいません、PHP初心者なものでまだ知識足らずの部分が多々ありまして。
ご気分を害されたとしたら、深くお詫び致します。
No.4
- 回答日時:
条件定義が不十分。
データ中にダブルクォーテーションあった場合はどうするつもり?
通常csvファイルではデータ中のダブルクォーテーションを
二重ダブルクォーテーションで表記します。
「東京都"港区"赤坂」なら「東京都""港区""赤坂」というcsvデータ
になるということ。
単純なfreadで吸い上げてstr_replaceだとすべてのダブルクォーテーション
がきえてしまいます。
基本はfgetcsv()など、csvのルールにのっとったファイルI/Oを
使うのが余分な作業を減らせるので吉。
アドバイスありがとうございます。
まだPHP初心者なものでfgetcsv関数は初めて知りました。
今検索かけて調べています。
新しい知識が得られた事を心から感謝します。
No.3
- 回答日時:
すみません、3行目は
if($f2 = fopen("sampleout.txt","r")){
ではなく
if($f2 = fopen("sampleout.txt","w")){
でした
No.2
- 回答日時:
単純にダブルクォーテーションを取り除くだけでしたら
str_replaceだけで済んでしまいますが
取り除くダブルクォーテーションになんらかの条件は
ないのでしょうか?
動作検証していませんが特に条件がない場合はこんな感じで
if($f1 = fopen("samplein.txt","r")){
$s = fread($f1, filesize($f1));
if($f2 = fopen("sampleout.txt","r")){
$s = str_replace('"','',$s);
fwrite($f2,$s);
fclose($f2);
}
fclose($f1);
}
順番が逆転してしまいました。
アドバイスありがとうございます。
そうですね。
str_replace関数ですね。
すっかり忘れていました。
No.1
- 回答日時:
このページは使えますでしょうか?
ちょっとよくわからないのですが、
指定ファイル(hoge.txt)を開く→中身を読み込む→「”」があった場合は空文字に変換→hoge.txtに書き込む→保存→閉じる
といった感じでしょうか?
アドバイスとURLを貼り付けて頂き、ありがとうございます。
>ちょっとよくわからないのですが、
>指定ファイル(hoge.txt)を開く→中身を読み込む→「”」があった場
合は空文字に変換→hoge.txtに書き込む→保存→閉じる
>といった感じでしょうか?
説明が不足していて大変申し訳ありません。
少しソースコードを書いてみます。
ただし、自分が書いたものなので必ずしも正しいとは限りません。
<?php
$infp = fopen("C:\Apache2\htdocs\samplein.txt", "r");
$otfp = fopen("C:\Apache2\htdocs\sampleout.txt", "r+");
while ($infp) {
$buffer = fgets($infp);
??????????????????????;
}
fclose($infp);
fclose($otfp);
?>
問題は?の部分です。
正規表現を使って"(ダブルクォーテーション)を排除します。
特に空文字に変換する必要はありません。
どうでしょうか。
少しはマシになったでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP ファイルの書き込みについて教えて下さい。 1 2023/03/20 12:01
- その他(国内) 1番2番3番…と争う? 2 2022/12/06 19:52
- 政治 岸田首相は、何故、名古屋人を大臣に採用しないのですか? 6 2022/05/09 20:42
- その他(交通機関・地図) なんで関西の交通網って天国状態なの? 1 2022/04/16 06:57
- 転職 長く続けられる好条件の求人でしょうか? 3 2023/07/12 18:45
- 政治 岸田内閣は国民を代表しているでしょうか? 11 2022/05/08 05:56
- その他(国内) 良く、東京と大坂や名古屋、何処が一番、都会ですか?みたいな質問が有りますけど、あれって「区」まで入れ 3 2022/03/27 17:52
- その他(宿泊・観光) 北海道札幌市 神奈川県横浜市 愛知県名古屋市 大阪府大阪市 京都府京都市 兵庫県神戸市 福岡県福岡市 3 2023/02/12 10:22
- 関東 ※東北の人からのにわか質問で不快に来たりムカついたらすいません、悪気はありません。 東京方面に住む人 8 2022/08/03 18:17
- その他(宿泊・観光) 北海道札幌市 神奈川県横浜市 愛知県名古屋市 大阪府大阪市 京都府京都市 兵庫県神戸市 福岡市福岡市 3 2023/01/29 18:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
日本語が文字化けしないよう読...
-
PHP 読み込んだファイルのブラ...
-
PHPでFilename cannot be empty...
-
こちらはただの直列処理ですか?
-
フォントの色を変えるには?
-
onedrive にexcelファイルをア...
-
form actionで二つ送信先を指定...
-
シェルスクリプトからphpファイ...
-
FTPコマンドでディレクトリごと...
-
PHPのif文でその処理を途中で抜...
-
存在しないメールアドレスかど...
-
.htaccessにphp_valueが使用できな
-
PHP8を使うと、大量のWarningが...
-
PHPでfatal errorが出ても無視...
-
アップロード画像数でCSSを分け...
-
Apacheでhttp://localhost/が表...
-
別ファイルの変数を呼び出した...
-
FORMで送信ボタンと戻るボタン...
-
sqlで日付が一番古いデータの月...
-
php5のrename()は日本語をリネ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
値の取り出し方について教えて...
-
2つの画像ファイルが異なるファ...
-
PHPでFilename cannot be empty...
-
ファイル名は、数字の「0」(...
-
stat failed
-
ファイルの行数取得
-
TSVファイルをCSV形式に変換したい
-
日本語のファイルが開けない
-
XMLのロードに失敗する
-
別のサーバにあるファイルの存...
-
PHP+MySQL でのcsvファイルイン...
-
日本語のデータが文字化けをし...
-
日本語が文字化けしないよう読...
-
PHPでの別のサーバーのテキスト...
-
phpメールフォームから送信・登...
-
PHP、ファイルロックの失敗で消...
-
PHP5のsimplexml_load_fileで取...
-
PHPでAPI 出力はCSVを取得する...
-
PHPでテキストファイルかどうか...
-
PHPで特定の文字列のみ抽出し、...
おすすめ情報