スレッド表示 | フラット表示〕 全トピック 920 件中 706 番目 次≫ ≪前

CSVで3次配列

created: 2003-12-31 22:04 | modified: 2004-01-01 22:08 | reply: 2

[1194] CSVで3次配列

user: | created: 2003-12-31 22:04
こんにちは。

CSV ←→ 配列に読み出し というような処理において、三次配列を使う必要に迫られました。

もともと一次配列の時はタブ区切りで作業していたんですが、三次にするために新たに2パターン(階層)の区切り方法を考えなければいけない、ということで、新たに区切り文字として「半角カンマ」と「パイプライン(|)」を追加使用しようと思ったんですが、そうすると配列キーや要素の文字列にそれら文字が含まれる場合の対処をしないといけなくなりますよね。

そこで、一般的に入力されない文字(?)として、「エスケープ(\x1b)」と「アラーム(\x07)」を使うことにしました。

それで、一応ちゃんとCSV ←→ 三次配列ってのは実現出来たんですが、そこで気になることが。


●エスケープとかアラームって、キーボードから入力される(あるいはhtmlフォームから送られてくる)ことは心配しなくていいのでしょうか?
●エスケープとかアラームって、phpスクリプトの中で特別な動作をしたりする可能性はあるのでしょうか?(例えば、改行文字はファイルからの読み出しの際に「一行の区切り」としての特別な意味を持ちますよね)
●上に書いた「エスケープとアラームを使う」以外に、もっとスマートな方法ってあるんでしょうか?

何かお気付きの点があればアドバイスいただければ幸いです。
reply: 1196 返信 編集 削除

[1196] Re.CSVで3次配列

user: ゆうじ | created: 2004-01-01 15:10
> ●エスケープとかアラームって、キーボードから入力される(あるいはhtmlフォームから送られてくる)ことは心配しなくていいのでしょうか?

エスケープとかアラームに限らず、
全てのキャラクタについて、
入力される(送られてくる)可能性はあります。

通常、このような特殊な文字をキーボードから入力できない場合でも、
コピペで入力できたりしますので、
何を区切り文字にするとしても、
ファイル保存前にデコード処理(エスケープ処理)する必要があります。

ファイル入出力の際、
適切なデコードさえしていれば、
区切り文字は何でもいいと思います。


> ●エスケープとかアラームって、phpスクリプトの中で特別な動作をしたりする可能性はあるのでしょうか?(例えば、改行文字はファイルからの読み出しの際に「一行の区切り」としての特別な意味を持ちますよね)

PHPでは、改行コード以外には思い当たりません。
私が知らないだけかも。


> ●上に書いた「エスケープとアラームを使う」以外に、もっとスマートな方法ってあるんでしょうか?

ファイルの形式にこだわらないのでしたら、serialize & unserialize を使って、
多次元配列をまるまるファイルに保存・読み出しという手もあります。
http://jp.php.net/manual/ja/function.serialize.php
Parent: 1194  reply: 1201 返信 編集 削除

[1201] serialize なるほど!

user: | created: 2004-01-01 22:08
レス有難うございます。


> 通常、このような特殊な文字をキーボードから入力できない場合でも、
> コピペで入力できたりしますので、

そうですね。試してみたら、確かにコピペで入力出来てしまいますね。
この対策としては、フォームからのデータを成形する、ってので解決しようと思います。
……と思ったら、serializeの件が。


> ファイルの形式にこだわらないのでしたら、serialize & unserialize を使って、
> 多次元配列をまるまるファイルに保存・読み出しという手もあります。

こんな便利な機能があったんですね!
いろいろ自分で調べてはいたんですが、これには全然辿り着けませんでした…。
三次連想配列をテキストにして、それを元に三次配列を生成して…っていうのを
結構苦労して作ったのに??。この機能を使えばイッパツじゃないですか…。


serializeで生成したテキストって良く見ると、サーバに保存される
セッションファイルのテキストに使われている形式なんですね。
セッションファイルのテキストってサーバ側で独自の処理をして変換してる
のかと思ってたんですが、普通にスクリプトで使えるとは。

--------------------

一応自分で出来る範囲のことをやってみてから訊ねるべきだなと思ってたんですが、
この件に関しては先に訊いていれば良かったかもしれないなぁ…。
でもまぁ、苦労した分は勉強になったから良しとしなくては。


ともあれ、訊いてみて良かったです。有り難うございました。
Parent: 1196  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 706 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑