人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

php ver5

ファイルを読み込み、各変数にデータをセットするスクリプトを作成して下さい。

ファイル構成:
type|title|joblist|year|education|graduate

私が考えている方法は、各データの区切りを>$ $<で行い、次のデータへの区切りは2つの改行で行うという物です。ちなみにjoblistはデータ内に1つの改行は入ります。

質問文が長くなりましたので、 http://d.hatena.ne.jp/esecua/20090730 をご覧下さい。


●質問者: esecua
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:education PHP スクリプト データ ファイル
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● pahoo
●35ポイント

コメントにて追加情報をありがとうございます。

"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 を読み込むのではなく、ブラウザからファイルをアップロードし、それを読み込むタイプを御願いします。


2 ● pahoo
●35ポイント

サーバに置いてある 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の件、よろしくおねがいします。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ