アプリ版:「スタンプのみでお礼する」機能のリリースについて

質問させて頂きます。
下記のようなデータがテキストであったとして、「name」「ID」の行だけ取り出し、
CSV、もしくはテキストなどでも良いので出力する方法はないでしょうか。

言語はPHPだと助かります。

-----------------------
name tanaka
blood B
birthday 10/24
ID 1002324
time 14:15
-----------------------
name hashimoto
blood O
birthday 6/11
ID 1002325
time 14:50
-----------------------
name yamaguti
blood AB
birthday 1/3
ID 1002326
time 18:29
-----------------------
×500くらい


出力結果(例)
name tanaka
ID 1002324
name hashimoto
ID 1002325
name yamaguti
ID 1002326
または
name tanaka,ID 1002324
name hashimoto,ID 1002325
name yamaguti,ID 1002326


質問内容に説明不足な部分などがありましたら申し訳ありません。
どなたかご存じの方がいらっしゃいましたら、宜しくお願い致します。

A 回答 (2件)

そのまま書けばいいように思いますが、どのあたりがわからなかったのでしょうか?



データに「name」と「ID」は必ずあるという前提でよければ、こんな感じでしょうかね。

<?php
$fi = fopen('data.txt', 'r') or die('cannot open');
$fo = fopen('result.txt', 'w') or die('cannot open');
$ct = 0;
$out = array();
while (($buf = fgets($fi, 8192)) !== false) {
if (strpos($buf, 'name') === 0) {
if (count($out) !== 0) {
$ct++;
fputs($fo, implode(',', $out) . PHP_EOL);
}
$out = array();
$out[] = trim($buf);
}
if (strpos($buf, 'ID') === 0) {
$out[] = trim($buf);
}
}
if (count($out) !== 0) {
$ct++;
fputs($fo, implode(',', $out) . PHP_EOL);
}
fclose($fi);
fclose($fo);
print '<a href="result.txt">result = ' . $ct . '</a>';
    • good
    • 0
この回答へのお礼

とても細かく分かりやすい解答ありがとうございます。

早速試したところ考えていた通りに処理することが出来ました!

本当にありがとうございます。

お礼日時:2011/11/24 16:12

FGetS()関数をループして、1行ずつ読み込んで、


explode()関数でスペースを区切り文字に要素名と値に分けて、
配列にでも入れればいいんじゃないかなぁ。

以下適当。ファイルのオープン・クローズや、
Trim関数とかで余計なスペースを取り除けばできるのでは?

$i = 0;
$arr = new Array();
while(!FEOF($fp)){
$str = FGetS($fp);
if(EReg("-+", $str){
$i++;
continue;
}
$val = Explode(" ",$str);
$arr[$i] = Array($val[0] => $val[1]);
}

PrintR($arr);

あまりに適当なので、まともに動かなかったらすまん。
    • good
    • 0
この回答へのお礼

回答頂きありがとうございます。

例文が悪かったのですが、実際のデータが単純なスペース区切りというわけではなかったので今回はもうひと方の回答を参考にさせてもらいました。

ですが、こちらの回答もとても勉強になりましたので、機会があれば参考にさせて頂こうと思います!

本当にありがとうございました。

お礼日時:2011/11/24 16:15

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