ファイルを読み込み、各変数にデータをセットするスクリプトを作成して下さい。
ファイル構成:
type|title|joblist|year|education|graduate
私が考えている方法は、各データの区切りを>$ $<で行い、次のデータへの区切りは2つの改行で行うという物です。ちなみにjoblistはデータ内に1つの改行は入ります。
質問文が長くなりましたので、 http://d.hatena.ne.jp/esecua/20090730 をご覧下さい。
コメントにて追加情報をありがとうございます。
"data.txt" のフィールド(変数)の並びが正しいものとしてスクリプトを組んでみました。
変数に読み込む方が HogeHogeクラス、処理する方がHogeProcクラスです。
<?php //data.txtから変数に読み込むためのクラス class HogeHoge { private $var_tbl = array('type', 'title', 'joblist', 'education', 'year', 'graduate'); //変数の名前(順番はdata.txtに合わせてください) //レコードを1つだけ読み込む function fread_hoge($infp) { $flag = TRUE; $key = 0; $ln = 1; $str = ''; while ($flag) { if (($instr = fgets($infp)) == FALSE) $flag = FALSE; $instr = trim($instr); switch ($instr) { case ''; //レコードの終わり $flag = FALSE; break; case '>$': //フィールドの始まり $str = ''; $ln = 1; break; case '$<': //フィールドの終わり $this->{$this->var_tbl[$key]} = $str; $key++; break; default: //データの実体 if ($ln > 1) $str .= "\n"; $str .= $instr; $ln++; break; } } } } //オブジェクトの変数を表示するだけのクラス class HogeProc { function fwrite_hoge($hoge) { $var_tbl = array('type', 'title', 'joblist', 'education', 'year', 'graduate'); foreach ($var_tbl as $val) { echo $val . '=' . $hoge->{$val} . "\n"; } echo "=====================================\n"; } } // メインプログラム ========================================================= $hoge = new HogeHoge(); $hogep = new HogeProc(); $infname = 'data.txt'; $infp = fopen($infname, 'r'); while (! feof($infp)) { $hoge->fread_hoge($infp); $hogep->fwrite_hoge($hoge); } fclose ($infp); ?>
サーバに置いてある data.txt を読み込むのではなく、ブラウザからファイルをアップロードし、それを読み込むタイプを御願いします。
はいはい。
下記のスクリプトを UTF-8 で保存してください。
'data.txt' のエンコードは $UploadEncoding に記述してください。
エラー処理はほとんど行っていません。とくに、アップロード・ファイルの構造が異常だと、何が起きるか分かりません。
<?php //エンコード関係 $InternalEncoding = 'UTF-8'; $UploadEncoding = 'auto'; //アップロードファイルのエンコードを記入 mb_internal_encoding($InternalEncoding); $MySelf = basename($_SERVER['SCRIPT_NAME']); //data.txtから変数に読み込むためのクラス class HogeHoge { private $var_tbl = array('type', 'title', 'joblist', 'education', 'year', 'graduate'); //レコードを1つだけ読み込む function fread_hoge($infp) { global $InternalEncoding, $UploadEncoding; $flag = TRUE; $key = 0; $ln = 1; $str = ''; while ($flag) { if (($instr = fgets($infp)) == FALSE) $flag = FALSE; $instr = trim($instr); $instr = mb_convert_encoding($instr, $InternalEncoding, $UploadEncoding); switch ($instr) { case ''; //レコードの終わり $flag = FALSE; break; case '>$': //フィールドの始まり $str = ''; $ln = 1; break; case '$<': //フィールドの終わり $this->{$this->var_tbl[$key]} = $str; $key++; break; default: //データの実体 if ($ln > 1) $str .= "\n"; $str .= $instr; $ln++; break; } } } } //オブジェクトの変数を表示するだけのクラス class HogeProc { function fwrite_hoge($hoge) { $var_tbl = array('type', 'title', 'joblist', 'education', 'year', 'graduate'); $outstr = ''; foreach ($var_tbl as $val) { $outstr .= $val . ' = ' . $hoge->{$val} . "<br />\n"; } $outstr .= "=====================================<br />\n"; return $outstr; } } // メイン・プログラム ======================================================= $html_header =<<< EOD <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset={$InternalEncoding}" /> </head> EOD; $html_footer = <<< EOD </html> EOD; //アップロード if (! isset($_POST['exec'])) { $html_body =<<< EOD <body> <h2>■データ・アップロード</h2> <form enctype="multipart/form-data" method="post" action="{$MySelf}"> <table border="0" cellspacing="5"> <tr> <td>アップロード・ファイル</td> <td><input name="upload" type="file" size="80" /></td> </tr> <tr> <td> </td> <td> <input name="exec" type="submit" value="送信" /> </td> </tr> </table> </form> EOD; //変数代入&表示処理 } else { $hoge = new HogeHoge(); $hogep = new HogeProc(); $infp = fopen($_FILES['upload']['tmp_name'], 'r'); $html_body = ''; while (! feof($infp)) { $hoge->fread_hoge($infp); $html_body .= $hogep->fwrite_hoge($hoge); } fclose($infp); } // 表示処理 =============================================================== echo $html_header; echo $html_body; echo $html_footer; ?>
ほんとにすいません。。。
XMLの件、よろしくおねがいします。
回答有り難うございます。
サーバに置いてある data.txt を読み込むのではなく、ブラウザからファイルをアップロードし、それを読み込むタイプを御願いします。