• 締切済み

ほしいデータの文字列の抽出がわかりません・・・

たびたび質問して申し訳ありません・・・ PHPであるファイル(jyusho.txt)内容を読み込むとします。 ファイル内容は名前、住所、生年月日、出身地となります。 ---------------------------------------------------------------- 北島三郎△"東京都八王子市山奥1丁目"△19000101△アメリカ 五木ひろし△"広島県尾道市坂上5丁目△五木ビル△1101号室"△19000101△広島 かんだうの△"東京都渋谷区代官山1丁目△デリシャスビル101"△19000101△東京 <省略> 北島三郎△"東京都八王子市山奥1丁目"△19000101△アメリカ <省略> バリー・ボンズ△"東京都武蔵村山4丁目△都営ビル201号室"△富山 --------------------------------------------------------------- 上記のようなデータ(レコード)がテキストファイルに入っているとします。 このデータを連想配列に格納しようと考えています。 それぞれ、名前、住所、生年月日、出身地を格納したいのですが、 それぞれのデータの間は△(半角スペース)で区切ってあります。 住所は""で囲まれた情報が住所ですが、住所の中には △(半角スペース)が格納されていますが、これはデータの区切りでは ありません。 また上記の場合は、さぶちゃんが2回でてきました。 こういう風に同じデータが複数でた場合は、 すべての情報(名前、住所、生年月日、出身地のデータ)がすべて合致した 場合は連想配列には格納しないことにしたいです。 このような情報を連想配列に格納する場合、 どのようにすればいいのでしょう? 色々考えたのですが思いつきません。 住所の△(半角スペース)がなければ・・・・ ながなが書いてしまいましたが、どうかよろしくお願いいたします。

  • PHP
  • 回答数4
  • ありがとう数6

みんなの回答

  • kusukusu
  • ベストアンサー率38% (141/363)
回答No.4

> array_unique($data)と実行すると($dataは今回のレコードをexplodeなど > で分割した、氏名、住所、・・が格納されている連想配列)・・・ > 『重複データのさぶちゃん』のみが格納されています。 ごめんなさい(^^;勘違いで。 #No1で言えば、file()で開いた後です。 $fileopen=file("jusho.txt"); $fileopen=array_unique($fileopen);

  • kusukusu
  • ベストアンサー率38% (141/363)
回答No.3

> おそらく△(半角スペース)で、explode(" ", "レコード")と その通りです(^^;たいぽです。 > explode(" ", "レコード")とすると > かんだうのの誕生日がデリシャスビル101"となってしまいます。 なるほど。。ちょっと遠回りしないといけませんねぇ… 住所は、"住所"って形ですよね? explode()で切った後に、 if(ereg("\\",$brithday)) { } とやって、文字列を再評価すればいいと思います。 (もし誕生日に「"」を含めば…)

pantsu69
質問者

お礼

再び返信ありがとうございます。 先ほどのご指摘のようにarray_unique関数を使用してみました。 色々なサイトで検索したところ、 array_unique($data)と実行すると($dataは今回のレコードをexplodeなど で分割した、氏名、住所、・・が格納されている連想配列)・・・ 『重複データのさぶちゃん』のみが格納されています。 array_uniqueだとさぶちゃんの重複データは削除するのでは なのでさぶちゃんデータ、五木ひろしデータ、・・・バリーボンズデータが 取得できるとおもってました。 上記のようになるのは僕の書き方がわるいんでしょうか? $data = array_unique($data);としています。 もしかして $data2 = array_unique($data);として $dataと$data2の連想配列のディフをとらないといけないのでしょうか? よろしくお願いいたします。

  • kusukusu
  • ベストアンサー率38% (141/363)
回答No.2

> また上記の場合は、さぶちゃんが2回でてきました。 > こういう風に同じデータが複数でた場合は、すべての情 > 報(名前、住所、生年月日、出身地のデータ)がすべて > 合致した場合は連想配列には格納しないことにしたいです。 一つ忘れていました(^^; これはlistの途中でも、一旦整形が終わって格納し終わった後でも、どちらでやってもいいですね。 たぶん整形が終わった後にarray_unique()でやった方が楽ですよ。 uniqu

pantsu69
質問者

お礼

下記の確認処理なんですが、 explode関数は指定文字列の前にパラメータが 省略不可となります。 おそらく△(半角スペース)で、explode(" ", "レコード")と お書きになりなかったのだと思いますが、 explode(" ", "レコード")とすると かんだうのの誕生日がデリシャスビル101"となってしまいます。

  • kusukusu
  • ベストアンサー率38% (141/363)
回答No.1

今日はこれと似たような、コードを2回書いたので、 ( http://odn.okweb.ne.jp/kotaeru.php3?q=431275 http://odn.okweb.ne.jp/kotaeru.php3?q=431398 ) 今回は、ロジックだけにします(笑) それともう一つ、 > 色々考えたのですが思いつきません。 こんな事を書くのはあまりいいともいませんよ。 「一体何を考えたんだ?それを書いてみろ」って思います。 正直私の場合、これがなかったら実際のコードまで書こうかと思っていました。 で、本題に まずfile()関数でレコード毎に配列に取り込みます。 そして、レコード毎にlist()とexplode()等を使って、それぞれの項目に分けていきます。 例: list($name,$address,$birthday,$home)=explode("レコード"); これでOKだと思いますよ。

pantsu69
質問者

お礼

ありがとうございました。 >「一体何を考えたんだ?それを書いてみろ」って思います。 確かにそうですね。 どう考えたとか、どういうエラーがでないとか書かないといけませんね。 失礼しました。 上記のロジックは今から確認しますが、 取り急ぎ、反省です。 確認後、また報告します。ありがとうございました。

関連するQ&A

  • スペースで区切った文字列を分割する方法

    ◆EXCEL2002を使用してます。 ◆A1には、以下の住所(都道府県から始まり、ビル名まで)が入ってます。 ◆番地とビル名は、全てスペースで区切られています。 ◆例 東京都港区赤坂1丁目23番45号 ABCDEFGビル ●完成 B1 東京都港区赤坂1丁目23番45号 C1 ABCDEFGビル 上記のように スペースで区切られた文字列を分割する方法を教えてください。 よろしくお願いします。

  • Excel関数、VBAで可能か教えてください

    いつもこちらの識者の皆様にはお世話になっております。 Excelのことで質問させてください。 A1-A3セルに下記のようなデータがあります。 東京都千代田区千代田1丁目1-1日本マンション 101 東京都千代田区千代田1丁目1-2 東京都千代田区千代田1丁目2 これをそれぞれ、B列に号地までの住所、C列に物件名と部屋番号に分けたいのですが、関数もしくはVBAで可能でしょうか? 定義としては、 1.物件名と部屋番号の間には必ず半角スペースがある。  (半角スペースを含まないセルはそのままB列にデータをコピーでOK) 2.番地と号地は半角数字、物件名は全角。 一戸建てのデータはifで半角スペースを含まないものをそのまま持ってくればいいんですが、集合住宅の場合、どのようにしたらできるのか分からず行き詰っています。 vbaでsplを使うことも考えましたが、うまくいきそうにありません。 どなたか、上記内容の場合どのような関数、もしくは構文が適しているか教えていただけませんでしょうか。 よろしくお願いいたします。

  • スペースの入った文字列の呼び方

    データベースから全てのデータをSQLで取り出し、 それを一度、HASHにいれてから配列で取り出そうと思っているのですが、 データベースに"姓'半角スペース'名"(例、山田 太郎)のようにはいっている 名前データを配列を使って呼び出すと、姓(例、山田)までしか表示されません。 説明が分かりにくいかもしれませんが困っています。 よろしくお願いします。

  • エクセル 住所データを分ける

    エクセルで、以下のようなデータを分けたいのですが、お知恵をお貸し下さい。宜しくお願い致します。 <データ> 〒100-0001 東京都千代田区~~~ 上記のような場合、郵便番号と都道府県の間に半角のスペースが入ってます。これを郵便番号と住所と別々のセルに分けたいのですが、どうした良いでしょうか? 宜しくお願い致します。

  • POSTした文字列をSQLコマンドに整形したい

    検索フォームに入力した単語に該当するtitleをSQLで検索するようなPHPを作成したい場合、 たとえば検索フォームに「php 連想配列 作成」と入力したらまず $key=_POST["key"]; として$keyに文字列を格納し、この後全角、半角問わず、スペースで3つの文字列を区切り、その文字列から配列を作成し、最終的に $keys=sprintf("php"or "連想配列" or"作成"); $sql = sprintf("SELECT * FROM dbname WHERE (title like".$keys.") ORDER BY id"); $result=mysql_query($sql, $link); while($row=mysql_fetch_assoc($result)) { print($row[title]) } というようなコードで出力すると思います。 この、上の$keyから$keysまでのコードが書けません。 がんばったのですが、正規表現を組みあわせたりすると途端にごちゃごちゃになります。 $keyから$keysまでのコードをどなたか教えていただけないでしょうか。 $keyから全角、半角問わず、スペースで3つの文字列を区切り、その文字列から配列を作成し、$keysに該当する変数を作成するコードです。 もしかしたら配列にしなくてもいい方法があるのかもしれませんが、私には思いつきませんでした。 どなたか、ご教示のほど、どうかよろしくお願いします。

    • ベストアンサー
    • PHP
  • CSVデータをDBに移行するには

    Perlを使ってCSVデータをDBに移行して格納したい のですが、流れはCSVファイルを開いて、CSVファイルを連想配列に書き込んで、 DBを開いて、連想配列データをデータベースに書き込んで、DBを閉じるという 流れの考えでよろしいのでしょうか?

    • ベストアンサー
    • CGI
  • 文字列がうまく取り出せない

    文字列がうまく取り出せないので教えて頂きたいのですが $str1 = "[2007年](10月)東京"; $str2 = "[2007年](10月)神奈川 (横浜)"; 上記2通りのデータがあり $str1の場合は、 Array ( [0] => 2007 [1] => 10月 [2] => 東京 ) $str2の場合は Array ( [0] => 2007 [1] => 10月 [2] => 神奈川 [3] => 横浜 ) と配列に格納したいのですが 思うようにできません・・ この場合どう記述すればよいのでしょうか??

    • ベストアンサー
    • PHP
  • 正規表現による文字列の抽出

    $data = 'a b c<a href="x/y/z/hoge.jpg">hoge.jpg </a> …<A HREF = "aa/b/c/hoga.jpg">hoga.jpg</A>…'; 上記の文字列から正規表現で 『x/y/z/hoge.jpg』と『aa/b/c/hoga.jpg』を取り出して配列に格納しようと思っているのですがうまくいきません。 条件は 1.『<a href="』(大文字の場合、またはイコールの前後に半角スペースが含まれる場合もあります。)と『">』に囲まれています。 2.文字列中に何回登場するかは決まっておりません。 3.取り出す文字列の長さはきまっておりません。 以下のように書いてみたのですが…。書き方がわかりません。 どなたかご教授いただけないでしょうか。 よろしくお願いいたします。 while ($data =~ /<a\s[hH][rR][eE][fF].=.\".*?">/g){ push(@arr, $&); } foreach(@arr){print $_,"\n";}

    • ベストアンサー
    • Perl
  • phpで日本語の文字列を抽出したいのですが、教えて

    phpで下記のようなデータ  「あいう 平成25年6月12日 かきくけこ 平成25年6月12日 さしすせそ 住所 東京都あいうえお1番234-5 電話 23098098098」 上記のような文字列のデータを$dataの変数に入れているのですが、 この$dataから、日本語で「住所」の後から「電話」の前までのデータを抽出したいのですが、 抽出する方法がわかりましたら教えて頂けないでしょうか? 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • テキストファイルの文字操作の仕方

    下記の[元データ]ようなテキストファイルのデータをCSV形式の データとして取り扱いたいのですが、[処理後]のように 変換する良い方法はないでしょうか? 何らかしらのプログラミングが必要になるかと思いますが ご教授いただければ幸いです。 どうかよろしくお願い致します。 [元データ] 出身地:東京 名前:山田太郎 性別:男 年齢:26歳 生年月日:1976年1月1日 出身校:東京大学 住所:東京都杉並区 電話:03-0000-0000 FAX:03-0000-0001 出身地:埼玉 名前:鈴木一郎 性別:男・・・・(以下同様) [処理後] 東京,山田太郎,男,26歳,1976年1月1日,東京大学,東京都杉並区,03-0000-0000,03-0000-0001 埼玉,鈴木一郎,・・・

専門家に質問してみよう