初心者です。
PHP5を始めて約50時間程度です。
テキストファイルの処理についての質問です。
fgets,file_put_contents,str_replace,array等の関数を使い処理するのだと思います。
構文が組み立てられません。
参考になるサイト等アドバイスいただけると幸いです。
よろしくお願いします。

下記の様な元になるテキストファイルがあります。
1.最初の文字があるまで(=改行だけの行)は削除
2.最初の文字列の最後に”,”を入れ改行をとる
3.次の行と次の次の行は削除
4.次の行は、例:7月4日(土)を7,4,土に
5.次の行は、例:10:00~13:00を10:00,13:00に
6.次の行と次の次の行は削除して改行
7.次の行と次の次の行は削除
8.前述1から7までの繰り返し
*最終的には後述のようなテキストファイルになります

----元になるテキストファイル



植物の光合成
理科

相田ももこ
7月4日(土)
10:00~13:00
30名
5,000円


鎌倉時代
社会

土田正
7月4日(土)
14:00~17:00
30名
5,000円


生物の進化
理科

長谷川浩
7月4日(土)
10:00~17:00*会場は大阪です
16名
10,000円

----元になるテキストファイル以上


---完成後のファイル
植物の光合成, 理科,7,4,土,10:00,13:00
鎌倉時代,社会,7,4,土,14:00,17:00
生物の進化,理科,7,4,土,10:00,17:00
---完成後のファイル以上

このQ&Aに関連する最新のQ&A

A 回答 (4件)

えっと…、ごめんなさい。


改めて試したところ、#2のコードにミスがあることがわかりました。

× $array = split("[\n{2,}]",$file);

\n{2,} としなければ空行にマッチできませんし、何よりShift_JISやUTF-8だと改行は \r\n でした。
#2では \nで区切られてしまうため、CSVになるときの行単位ではなく、セル単位で配列化してしまっています。
このため、以降のコードが全て正常に動かないのです…。
余計な回り道をさせてしまって申し訳ないです。

以下にサンプルコードを作りましたので、参考にしてください。(今度は検証したので動くはずです…)

<?php
$file = file_get_contents('test01.txt');
$file = mb_convert_encoding($file, "UTF-8", "auto");// preg用にUTF-8に文字コード変換(preg系はUTF-8にすると全角文字を扱える正規表現として機能します)

/* 行単位の配列に (1次元配列) */
$array = preg_split("/(?:\r\n){2,}/m", $file);// 空行区切りで分割

/* セル単位の配列に (2次元配列) */
foreach($array as &$value){
$value = preg_split("/\r\n/", $value);// CSVのセルデータに分割 (配列の値を更に配列に。ここで2次元配列になります)
}

/* CSV形式に変換 */
foreach($array as &$value){
$value = preg_replace('/"/', '""', $value);// ダブルクオートをエスケープ
$value = preg_replace('/^.*$/', '"$0"', $value);// セルデータ全体をダブルクオートで括る
$value = implode(',', $value);// 2次元配列→1次元配列
}

$output = implode("\r\n", $array);// 1次元配列→文字列
$output = mb_convert_encoding($output, "Shift_JIS", "auto");// Shift_JIS文字コードに

header('Content-Type: text/plain; charset=Shift_JIS'); // Content-Typeヘッダ出力
echo $output;// 出力
?>

> *”,”だけの行が削除できない。
"," は区切り文字なので、値に持ちたい場合はエスケープする(安全な文字に変換する)必要がありますね。
この場合CSVを読み込むプログラムによってエスケープ方法が変わります。
念のため確認しますが、完全なCSV形式でいいのですか?
つまり、読み込むプログラムはExcelと思ってよいですか?
上のコードはExcelで読む前提で書いています。
PHPで読むなどしていて "," のエスケープ方法が特殊だとそれに準拠した形にする必要があります。
ちなみに、掲示板で使われるCSVでは改行は <br> に、"," はHTML文字実体参照にすることが多いですね。

CSVファイルフォーマットの解説:CodeZine
http://codezine.jp/article/detail/2364

> *”円”があったら新しいテキストファイル(test02.txt)上で改行
> (質問の7.次の行と次の次の行は削除)
配列にしてしまえば後は簡単です。

- 配列の値をpreg_replaceしてNULL(空データ)にする
- preg_matchでチェックしてから unset()

のいずれかで対応してください。

あと、サンプルでは省略した「セルの順番変更」ですが、2次元配列にする以前にやった方がわかりやすいと思います。
echo preg_replace('/^(\d{4})(\d{2})(\d{2})$/', '$1/$2/$3', "20090520");// 出力

こんな感じで括弧を使って必要な部分をキャプチャし、変数で並び替えてみてください。
    • good
    • 0

#3の補足です。



「"," をエスケープする必要がある」と書きましたが、#3では「全データをダブルクオートで括る」形式にしています。
ダブルクオートで括ることで、「"," をエスケープする」のではなく「'"' をエスケープする」に変化します。
Excelで出力するCSVは「改行を含む」または「カンマを含む」データ限定でダブルクオートで括っていますが、
全データをダブルクオートで括ってもExcelで読み込むことが出来ます。(それでもCSVフォーマットに準拠しているので)

この回答への補足

出来ました。
ありがとうございました。

2行目と21行目に下記メッセージが出ました。
Warning: mb_convert_encoding() [function.mb-convert-encoding]: Unable to detect character encoding

$file = mb_convert_encoding($file, "UTF-8", "auto");→
$file = mb_convert_encoding($file, "UTF-8", "Shift_JIS");

header('Content-Type: text/plain; charset=Shift_JIS'); →
//header('Content-Type: text/plain; charset=Shift_JIS');
で解決しました。

教えていただいたプログラムは、一行ずつ意味を解釈し勉強してみます。
私はVB6で育った世代で、配列の概念が極めて希薄だと教えていただいた中で感じています。
*VBだと1行ずつ読んでその中で処理しworkファイルに落とす、ような感じになると思います。

重ね重ねありがとうございました。
深謝しています。

最後に完成したソースを貼っておきます。
<?php
$file = file_get_contents('test01.txt');
$file = mb_convert_encoding($file, "UTF-8", "Shift_JIS"); // preg用にUTF-8に文字コード変換(preg系はUTF-8にすると全角文字を扱える正規表現として機能します)

/* 行単位の配列に (1次元配列) */
$array = preg_split("/(?:\r\n){2,}/m", $file); // 空行区切りで分割

/* セル単位の配列に (2次元配列) */
foreach($array as &$value){
$value = preg_split("/\r\n/", $value); // CSVのセルデータに分割 (配列の値を更に配列に。ここで2次元配列になります)
}

/* CSV形式に変換 */
foreach($array as &$value){
$value = preg_replace('/"/', '""', $value); // ダブルクオートをエスケープ
$value = preg_replace('/^.*$/', '"$0"', $value); // セルデータ全体をダブルクオートで括る
$value = implode(',', $value); // 2次元配列→1次元配列
}

$output = implode("\r\n", $array); // 1次元配列→文字列
$output = mb_convert_encoding($output, "Shift_JIS", "auto"); // Shift_JIS文字コードに

//header('Content-Type: text/plain; charset=Shift_JIS'); // Content-Typeヘッダ出力
echo $output; // 出力

file_put_contents("test02.txt","$output");
?>
---完成したソース

<?php
$file = file_get_contents('test01.txt');
$file = mb_convert_encoding($file, "UTF-8", "auto"); // preg用にUTF-8に文字コード変換(preg系はUTF-8にすると全角文字を扱える正規表現として機能します)

/* 行単位の配列に (1次元配列) */
$array = preg_split("/(?:\r\n){2,}/m", $file); // 空行区切りで分割

/* セル単位の配列に (2次元配列) */
foreach($array as &$value){
$value = preg_split("/\r\n/", $value); // CSVのセルデータに分割 (配列の値を更に配列に。ここで2次元配列になります)
}

/* CSV形式に変換 */
foreach($array as &$value){
$value = preg_replace('/"/', '""', $value); // ダブルクオートをエスケープ
$value = preg_replace('/^.*$/', '"$0"', $value); // セルデータ全体をダブルクオートで括る
$value = implode(',', $value); // 2次元配列→1次元配列
}

$output = implode("\r\n", $array); // 1次元配列→文字列
$output = mb_convert_encoding($output, "Shift_JIS", "auto"); // Shift_JIS文字コードに

header('Content-Type: text/plain; charset=Shift_JIS'); // Content-Typeヘッダ出力
echo $output; // 出力
?>

補足日時:2009/05/22 07:45
    • good
    • 0
この回答へのお礼

何から何まで、本当にすいません。
感謝にたえません。
今度こそ出来るよう頑張ります。
取り急ぎ御礼まで。

お礼日時:2009/05/21 18:07

初心者であることを卑下することはないと思いますよ。


わからないなりに工夫して試した跡が見られるので、私は逆に向上心のある初心者さんだと思っています。

> $array = preg_replace("/^(\s)*(\r|\n|\r\n)/m", ",", $array);;
恥ずかしながら preg_replace が配列を引数に持てるということを知りませんでした。これならforeachが不要になります。
すみません、余計に混乱させてしまいましたね。
私の環境では下記コードでほぼ期待通りの結果になりました。

<?php
$file = file_get_contents('test01.txt');
$array = split("[\n{2,}]",$file);
$array = preg_replace("/(?:\r\n|[\r\n])/", ",", $array);

header('Content-Type: text/plain; charset=UTF-8');// Content-Typeヘッダ出力
print_r($array);
?>

# header() は「テキストとして扱うため + 文字コード指定で文字化けを防ぐため」です。
# 省略できるなら省略しちゃっても構いません。

この回答への補足

下記ソースを書きました。
---下記ソース
<?php
$file = file_get_contents('test01.txt');
$array = split("[\n{2,}]",$file);
$array = preg_replace("/(?:\r\n|[\r\n])/", ",", $array);
//header('Content-Type: text/plain; charset=sjis'); // Content-Typeヘッダ出力
$text_work = implode("\r\n", $array);
//echo $text_work;
file_put_contents("test02.txt","$text_work");
?>
---下記ソース以上
最終行の"test02.txt"には、最初の'test01.txt'と同ほぼじものが出力されてしまいます。
(10,000円が10改行000円改行が違うだけ)

*”各配列の値に対してpreg_replace を使って1行のCSVに変換し、配列の値を上書きします。”
→これは、出来ているのだと思います。
*”,”だけの行が削除できない。
*”円”があったら新しいテキストファイル(test02.txt)上で改行
(質問の7.次の行と次の次の行は削除)

何かアドバイスいただけると幸いです。
度々すいません。

補足日時:2009/05/20 18:50
    • good
    • 0
この回答へのお礼

>私は逆に向上心のある初心者さんだと思っています。
教えていただいた上に、励ましの言葉まで頂き、ありがとうございます。
深謝しています。

お礼日時:2009/05/20 18:09

「テキスト→CSV」の変換を行いたい、ということですね。



> fgets,file_put_contents,str_replace,array等の関数を使い処理するのだと思います。
必要な関数はわかっているようですので、ポイントだけ説明します。
未検証につき細かなミスがあるかもしれませんが、考え方(アルゴリズム)だけ受け取ってください。

1. テキストファイル取得
file_get_contents で受け取り、変数に格納します。
この際、trimで前後の空行を取り除くと良いと思います。

2. 空行で区切り、配列に分割格納する
CSV変換後の1行は空行区切りのブロックと捉えて良さそうです。
split で空行(\n{2,})を区切り文字に指定して、各ブロックを配列に分割格納します。

3. preg_replace でCSV形式に変換する
2. で作成した配列を foreach で処理をループさせます。
各配列の値に対してpreg_replace を使って1行のCSVに変換し、配列の値を上書きします。

4. implodeで配列から文字列に戻す
implode で区切り文字に改行(\n)を指定して、文字列に戻します。

5. file_put_contents で書き込み
完成です。

PHP: file_get_contents - Manual
http://jp.php.net/manual/ja/function.file-get-co …
PHP: file_put_contents - Manual
http://jp.php.net/manual/ja/function.file-put-co …
PHP: trim - Manual
http://jp.php.net/manual/ja/function.trim.php
PHP: split - Manual
http://jp.php.net/manual/ja/function.split.php
PHP: foreach - Manual
http://jp.php.net/manual/ja/control-structures.f …
PHP: preg_replace - Manual
http://jp.php.net/manual/ja/function.preg-replac …
PHP: implode - Manual
http://jp.php.net/manual/ja/function.implode.php

# file_get_contentsを知っていたのに、file_put_contentsを知らなかった…。
# PHP5からの関数だから見逃していたのかな。

この回答への補足

初心者ですいません。

>3. preg_replace でCSV形式に変換する
>2. で作成した配列を foreach で処理をループさせます。
>各配列の値に対してpreg_replace を使って1行のCSVに変換し、配列の値を上書きします。
>
>4. implodeで配列から文字列に戻す
>implode で区切り文字に改行(\n)を指定して、文字列に戻します。
>
>5. file_put_contents で書き込み
>完成です。

上記3の部分でうまくいきません。
「preg_replace を使って1行のCSVに変換し」が組み立てられないのだと思います。
3,4,5の参考例文のようなもの、アドバイス、いただけると幸いです。

---私のソース
<?php
$file = file_get_contents(('test01.txt'));
//$file = preg_replace("/^(\s)*(\r|\n|\r\n)/m", "", $file);
$array = split("[\n{2,}]",$file);

foreach ($array as $key => $value) {
$array = preg_replace("/^(\s)*(\r|\n|\r\n)/m", ",", $array);;
}
print_r($array);
?>
---私のソース以上
---print_rの表示の一部
Array ( [0] => , [1] => , [2] => , [3] => , [4] => 植物の光合成 [5] => 理科 [6] => 3 [7] => 相田ももこ [8] => 7月4日(土) [9] => 10:00~13:00 [10] => 30名
---print_rの表示の一部以上

test01.txtは、最初に投稿したものと同じです。

補足日時:2009/05/20 10:15
    • good
    • 0
この回答へのお礼

早速参考マニュアルサイトまで書いていただきありがとうございます。
私のスキルからすると、かなり高度な事をやっているようです。
大変感謝しています。取り急ぎ御礼まで。

お礼日時:2009/05/20 10:14

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q空の写真をHPに載せるとき。

今、空の写真をデジタルカメラで撮り貯めています。
主に夏の日中の空と夜景・夕景になる頃の空や景色を
すでにもっているHPに一つのコンテンツとして、それの
写真を載せたいと思っています。背景は白・黒どちらが
きれいに見えていいでしょうか?
いずれも写真は小さく縮小して元のサイズから横幅350
縦もそれにあわせて縮小されるように設定しました。

Aベストアンサー

 白と黒どっちが好きですか?

どっちでもキレイに見えますから、HP製作者の好みでいいですよ。

あと、縮小して350ってのは、大きい画像を小さくして保存しなおしたのですか?それとも大きな画像を小さく表示するようにしただけでしょうか?

後者だと、データを読みこむ時間は大きいままなんで、表示されるのに時間が掛かるし、HPの容量を食っちゃいますからご注意くださいね。

Q$test = array(80,60,22,50,75);を(22,60,80,50,75);変更

https://oshiete.goo.ne.jp/qa/9231613.html から
 $test = array(0=>80,1=>60,2=>22,3=>50,4=>75); のご回答をもとに
$test = array(80,60,22,50,75);を$test = array(22,60,80,50,75);に変更しました。
 結果が”最高得点22です。”と予想しておりました・・しかし、変わらずに
 ”最高得点は80です。”のままでした!?この場合ですが、考え方はとしまして、
 $test = array(2=>22,1=>60,0=>80,3=>50,4=>75);となったので、以上の結果となっ
との考えで間違いないでしょうか?
 よろしくお願いいたします。

Aベストアンサー

表現は未熟ではありませんが、Campus2さんがどのような思考をしているのかという意味で
国語の問題に近いと言っただけですのでご了承を〜

ちなみに今回のはキーに関しては何でもいいのです。
以下のコードでも最高点は80と出力されます。

<?php
//$test = array(80,60,22,50,75);
$test = array("apple"=>80,"tomato"=>60,"banana"=>22,"milk"=>50,"cake"=>75);

$max = 0;

foreach($test as $id => $value){
if($max < $value) $max = $value;
}

print "<p>最高得点{$max}です。</p>";
?>

また$id => $valueも関係性を示しているだけなので、
foreach文は以下のようにも記述できます(紛らわしいのでこんな書き方しませんが)。

foreach($test as $aaa => $bbb){
if($max < $bbb) $max = $bbb;
}

///////////////////////////////////////////

過去の質問
https://oshiete.goo.ne.jp/qa/9200257.html
でも答えましたが、

例えば配列
array("22","80", "75","60","50")
はキーを何も指定しない場合以下と同じになります。
array('0' =>"22",'1' =>"80", '2' =>"75",'3' =>"60",'4' =>"50");

array("50","80", "75","60","22")
と並び変えても
array('0' =>"50",'1' =>"80", '2' =>"75",'3' =>"60",'4' =>"22");
のままです。

表現は未熟ではありませんが、Campus2さんがどのような思考をしているのかという意味で
国語の問題に近いと言っただけですのでご了承を〜

ちなみに今回のはキーに関しては何でもいいのです。
以下のコードでも最高点は80と出力されます。

<?php
//$test = array(80,60,22,50,75);
$test = array("apple"=>80,"tomato"=>60,"banana"=>22,"milk"=>50,"cake"=>75);

$max = 0;

foreach($test as $id => $value){
if($max < $value) $max = $value;
}

print "<p>最高得点{$max}です。</p>";
?>

また$id => $value...続きを読む

Qグーグルの衛星写真でどうして空が写るのですか?

グーグルの衛星写真でどうして空が写るのですか?

Aベストアンサー

質問の症状がどれなのか、よくわからないのですが、
思いついたことを書き留めておきます。これが答えでないかもしれませんが、
参考までに。

CGです。
Google Earthを起動させ、斜め写真にして下さい。
表示メニューに大気圏、太陽、水面などのメニューがあります。
大気圏にチェックを付けると、水色に空が変わります。
そのチェックを外すと、漆黒の宇宙空間となります。
そこに写る星が正確かどうかは分かりません。

また、太陽にチェックを付けると日付が表示され、いろいろ設定できます。
太陽の位置は無論、照度も変化します。

Q毎週日曜22:00に処理を実行したい

いつもお世話になってます。


毎週日曜日22:00に特定のデータを初期化するようなものを作りたいのですが、
何か良い方法はないでしょうか。
PHPで、「前回のアクセス日時と、今回のアクセス日時の間に、日曜日22:00が含まれている」時に処理を実行するスタイルを思いつきましたが、いまいちコードのイメージが沸いてきません。
strtotimeの引数で「last Sunday 22:00」としてみましたが、この場合だと日曜日の22:01~23:59の間にアクセスすると先週の日曜日22:00のタイムスタンプを返されてしまいました。

よろしくお願いします。

Aベストアンサー

通常、定期的に作動させるプログラムはLinuxではcronを使います。
サーバの時計で日曜日の22:00丁度にプログラムを走らせる事が出来ます。
Windowsではタスクスケジューラですね。
例えばcronの場合は
0 22 * * 0 wget http://localhost/hogehoge.php
のように登録しておけば毎週日曜日の22時丁度にhogehoge.phpが作動されます。

もっと厳密でなくても、アクセスがあった時で良い、と言う事でしたら、簡単なプログラムで実装出来ると思います(今回はそのようですね)。

> 前回のアクセス日時と、今回のアクセス日時の間に、日曜日22:00が含まれている
と言うより、
> 前回のアクセス日時は直前の日曜日の22:00より前
であった時に初期化されれば良いのではないでしょうか。
アクセスログファイルを alog.txtとし、そこにUNIX TIMEでログを更新しているとすれば、こんな感じで良いのではないでしょうか。
<?php
$fname = "alog.txt";
$lastAccess = file_get_contents($fname);
$w = (date("w") == 0 && date("G") < 22 )? 7 : date("w");//日曜日の22時以前だけは先週なので7
$lastSundayTime = mktime(22,0,0,date("m"),date("d")-$w,date("Y"));
if($lastAccess < $lastSundayTime){
//初期化
}
file_put_contents($fname, time());//アクセスログ更新
?>

通常、定期的に作動させるプログラムはLinuxではcronを使います。
サーバの時計で日曜日の22:00丁度にプログラムを走らせる事が出来ます。
Windowsではタスクスケジューラですね。
例えばcronの場合は
0 22 * * 0 wget http://localhost/hogehoge.php
のように登録しておけば毎週日曜日の22時丁度にhogehoge.phpが作動されます。

もっと厳密でなくても、アクセスがあった時で良い、と言う事でしたら、簡単なプログラムで実装出来ると思います(今回はそのようですね)。

> 前回のアクセス日時と、今回...続きを読む

Qデジカメ写真の曇り空を青空に

曇り空を青空にできないでしょうか?
また暗い写真になってしまいましたが何が原因でしょうか?
明るくできませんか?

Aベストアンサー

朝日新聞の be青の、パソコン情報紹介記事で「Free ソフ得!!」より。

JTrim(ジェイトリム)は初心者にも簡単に操作が出来るフォトレタッチソフトです。多くの加工機能で画像に様々な効果を与えることができます。非常に軽快に動作するため、ストレスなく操作できます。

私も使い始めてから手放せなく成ったutilityの一つに成りました。
------------
http://www.woodybells.com/jtrim.html
セットアップ版「JTrim Version1.52」

インストール後、ツールバーの(カラー)→明るさ/コントラストのスライダー、だけでも、簡単な明暗の改善はできますが、他にも沢山の機能が満載されていますので追々使い込んで行くと、中々奥が深いsoftです。

QPHP,RUBY,Perl,JSPで実現可?

はじめまして。
このカテゴリーでいいのかどうか分かりませんが、
サーバーサイドで実現できないかどうか、質問させてください。

現在、ひとつのLAN上に、計測器(X)とパソコン(P)が接続され、
PはXから定期的に計測値を取得してデータベースにに書き込んでおり、
Pでは最新値や経過時間による値の変化のグラフを表示しているのですが、
これをWEBからいつでも誰でも見られるようにできないかと言われています。
コンピュータに詳しくなく、よく分かりません。

ホームページなどは、契約したレンタルサーバー宛てにHTMLをFTP送信すれば表示されます。
(実際ウチの会社のHPもそうやって月に一度私がアップして更新しています。)、
同様に、定期的にグラフを画像(GIF等)化し、HTMLに組み込んでFTPでサーバーにアップするのも一つの手だと思いました。(※)
でも、毎回グラフを画像化するのに時間がかかったり、送信の付加も高そうです。

そんな中、最近サーバーサイドの言語もいろいろあって、利用できないかと思っているところです。
しかし、素人の私はサーバーサイドと言うものを、
・サーバー側にDBがあり、
・クライアントからのリクエストに応じてそのDBから値を取得して都度HTMLを作り、
・そのHTMLをクライアントに返す
というもの、と理解していまして、そこで質問なのですが、

1)
サーバーサイドというものについて、上の私の理解は合っていますでしょうか?

2)
1)での私の理解が合っているとすると、今回のケースのようにDBがこちら側にある場合、サーバーサイドでクライアントからの要求に応じてHTMLを作って送ることはそもそもできないのでしょうか?

3)
2)のことができないとすると、サーバー上にDBがあればできるのでしょうか?
つまり、サーバー上にDBを置き、PはXの値を自分のDBに登録するのではなく、サーバー上のDBに書くようにすればできるのでしょうか?
もしできるとしても、サーバー上のDBの値を更新する方法は分かりませんが...
でもなんとかなるならサーバー側でサーバーサイドの言語を使ってグラフが描けそうな気が...

4)
もし3)のことができないとすると、上の※の方法しかないのでしょうか?

5)
そもそも、今回の私のケースのような場合、一般的にどのような方法で実現できるでしょうか?
サーバーのレンタル代などのランニングコストのかからない方法だとありがたいのですが...

サーバーサイドでなんとかなりそうなら、
最近興味が出てきましたので頑張って勉強したいと思います。
Rubyとか、MySQLとか...

正直言って現時点ではちんぷんかんぷんなため、
とりとめのない質問のようになってしまい申し訳ありません。
どうぞよいお知恵をかしてください。

よろしくお願いいたします。

はじめまして。
このカテゴリーでいいのかどうか分かりませんが、
サーバーサイドで実現できないかどうか、質問させてください。

現在、ひとつのLAN上に、計測器(X)とパソコン(P)が接続され、
PはXから定期的に計測値を取得してデータベースにに書き込んでおり、
Pでは最新値や経過時間による値の変化のグラフを表示しているのですが、
これをWEBからいつでも誰でも見られるようにできないかと言われています。
コンピュータに詳しくなく、よく分かりません。

ホームページなどは、契約したレンタルサーバー宛て...続きを読む

Aベストアンサー

No.4です。Ruby MySQLのことが出てきましたので、補足です。
質問者さんが職業としてのプログラマーを目指しているのではなく、お手軽にデータベースを使いたいのでしたら、Ruby on Railsに入っているactiverecordによるデータベースアクセスをお勧めします。
Ruby on Railsをインストールすればすぐに使えるようになります。もしかしたらsqlite3やMySQLを使うために追加ソフトが必要かも知れませんが、ネットで情報がたくさんあります。
sqliteが簡単なので例を示します。GUIで設定できるソフトがいろいろあるので、それで
データーベースファイル名 ondo.sqlite
テーブル名 temperatures
フィールド名 dateとか適当にいれて
データも表ソフトのような感じで仮に入れておきます。
Rubyのプログラムの全部を書くと
require 'rubygems'
require 'active_record'

ActiveRecord::Base.establish_connection(
:adapter => "sqlite3",
:database => "ondo.sqlite"
)
class Temperature < ActiveRecord::Base
end

p Temperature.find_each{|a| p a}
以上で、データベースに接続して全部のデータが出力されます。プログラムを知っている人にとってはものすごく不思議な感じですが、activerecordがうまく処理してくれます。
ActiveRecord::Base.establish_connection(
の中をMySQL用に変えればそのままMySQLで使えるようになります。SQLは全然出てきません。
ご参考に

No.4です。Ruby MySQLのことが出てきましたので、補足です。
質問者さんが職業としてのプログラマーを目指しているのではなく、お手軽にデータベースを使いたいのでしたら、Ruby on Railsに入っているactiverecordによるデータベースアクセスをお勧めします。
Ruby on Railsをインストールすればすぐに使えるようになります。もしかしたらsqlite3やMySQLを使うために追加ソフトが必要かも知れませんが、ネットで情報がたくさんあります。
sqliteが簡単なので例を示します。GUIで設定できるソフトがいろいろあるの...続きを読む

Q海や空など青い写真集

海や空など青をテーマ(?)にした、
オススメの写真集を教えてください。

*画集でもOKです。

Aベストアンサー

書名:地球月光浴
著者:石川 賢治
出版:新潮社
価格:\3,800
http://www.amazon.co.jp/exec/obidos/ASIN/4104358029


「月光」だけで撮っていますので、全体的に、宿命的に、
全て「青」っぽくなっています。海中写真、風景や花な
ども。幻想的。



(青がテーマでは無さそうですが...)
空の名前
高橋 健司
角川書店
\2,500
http://www.amazon.co.jp/exec/obidos/ASIN/4048836005
光と水の饗宴空色図鑑。鱗雲、朧雲、鯖雲、雲の澪...

参考URL:http://www.amazon.co.jp/exec/obidos/ASIN/4104358029

Q画像ファイル(.bmp, gif, .jpg, .png)など縦横サイズを取得する方法

PHP5でホームページにある画像ファイル(.bmp, gif, .jpg, .png)など縦横サイズを取得する方法はありますか?

例えば、Yahooのロゴ
http://k.yimg.jp/images/top/sp/logo.gif
は、221px, 59pxm GIFnなので、以下のように取得したいです。

$ret = hogehoge???($url);

echo $ret["width"]; // 221px
echo $ret["height"]; // 59px
echo $ret["type"]; // gif

Aベストアンサー

http://jp2.php.net/getimagesize
GDライブラリの、getimagesize関数を使えばいけそうです。

Q自然の風景(海、空)、動物、子どもの写真集でお薦めってありますか?

写真集を探しています。海や空の写真集とか動物や子ども
その他、きれいな写真がいっぱい載っているお薦めの写真集があったら
ぜひ教えてください。実は、将来、写真家を目指しているお友達に
プレゼントしたいと思っています。
その、友達はよく、街の風景なんかを撮っているのですが・・・・。
特にジャンルは問いません。
見ていると心が和むような、「わぁーきれいだなー」って思えるような
そんな写真集を探しています。
「これはいいよ!」ってゆうのがあれば教えて下さい。
よろしくお願いします。

Aベストアンサー

 自分で買おうと思って、そのままになっているのですが。
 友人が持っていた「空の名前」(漢字だったかどうか自信無し)という雲の写真集がとてもすてきでした。
 いろいろな雲の形と、その名前が載っているものでした。

Qフォームに入力された内容を,次ページのフォームへ活かすには

 初心者ですのでよろしくお願いします。
 現在 php と MySQL でデータ検索システムを制作しております。
 データベースの検索は完成したのですが,利用者のために次のようなフォームを利用したいと思っています。

(1)フォームから検索語を入力したとします(例えば”北海道 小樽”)。
(2)するとデータベースから条件にあった内容が返されます(例えば小樽駅の写真など)。検索結果の上部には,検索入力フォームが配置しています(←ここがポイント)。
(3)しかし,検索結果が多すぎるため,新たに検索語を追加して検索しようとします。
(4)その時に,入力フォームには何も文字が入っていない状況になっています。ここに,今回の例であれば”北海道 小樽”というキーワードが残っていて,追加のキーワード入力を可能にしたいです。
 グーグルなどの検索エンジンでも,検索した後も入力フォームに検索キーワードが残っていますよね?それをしたいのですが,簡単そうでいろいろと本を調べても見つかりませんでした。どなたかご指導よろしくお願いします。
 ちなみに,HTMLだけで済めば良いのですが,phpでも勉強しますので,よろしくおねがいします。

 初心者ですのでよろしくお願いします。
 現在 php と MySQL でデータ検索システムを制作しております。
 データベースの検索は完成したのですが,利用者のために次のようなフォームを利用したいと思っています。

(1)フォームから検索語を入力したとします(例えば”北海道 小樽”)。
(2)するとデータベースから条件にあった内容が返されます(例えば小樽駅の写真など)。検索結果の上部には,検索入力フォームが配置しています(←ここがポイント)。
(3)しかし,検索結果が多すぎるため,...続きを読む

Aベストアンサー

formのactionがgetなら、
$_GET["検索Textのname値"]
formのactionがpostなら、
$_POST["検索Textのname値"]

で検索に入力された値を取得してきて、次の画面に渡せば良いかと・・。
例えばこんな感じで。(思いつきで書いたので間違ってるかも知れませんが・・)
<?php
if($_POST["word"] == null || (strcmp($_POST["word"] , "") == 0)) {
 echo("<input type='text' name='word' value='' />");
} else {
 echo("<input type='text' name='word' value='" . $_POST["word"] ."' />");
}
?>


人気Q&Aランキング