CGI-BBS > CGI > Perl > 1つの変数の値を分割し複数の変数に代入したい。


カレッヂ
カレッヂ


質問者 宇宙のステルヴィア  投稿日 8/28(木) 15:35:01
配列を分割したいときはsplit関数を使いますよね。
では、1つの変数の値を分割するときは?
たとえば、
$dey = "2003/08/28";
を「/」で切り分けて
$dey1 = "20030828";
にするとか、
$dey1 = "2003"; $dey2 = "08"; $dey = "28";
と、複数の変数に分割して代入するなどです。
各変数は、
$dey = "$dey1"."/"."$sey2"."/"."$dey3";
「.」で連結すれば、
$dey = "2003/08/28";
にもどせるのですから、その反対もできると思うのですが、
その方法・関数がわかりません教えてください。

プロバイダ参照:http://www.mirai.comm.to/
サーバのOS:UNIXサーバ
パソコンのOS:Win95系
エディタ:
FTPソフト:
サーバ移転:していない
改造:している
CGI習熟度:advanced

回答者 まさ  [削除]  投稿日 8/28(木) 18:27:05
splitが使えますよ。

$dey = "2003/08/28";

なら

my ($dey1, $dey2, $dey3) = split /\//, $dey;

で

$dey1 には2003が
$dey2 には08が
$dey3 には28が

入ります。

質問者 宇宙のステルヴィア  [削除]  投稿日 8/29(金) 00:25:33
もしスラッシュではなくハイフンにしたとしたら、
my ($dey1,$dey2,$dey3) = split /\-/, $dey;
でよろしいでしょうか?

タイトルとは多少異なりますが、
演算子を使用するところが共通しているので、
次の質問も聞いてくださいませんか?

     ▼1つ目  ▼2つ目  ▼3つ目
$word = "あいうえお かきくけこ さしすせそ";

この変数に3つの言葉(値)が全角スペース区切って代入されている場合、

$word = "あいうえお";

のように1つ目以降を切り捨てる方法を教えてください。
わがままのようですがよろしくお願いします。
回答者 まさ  [削除]  投稿日 8/29(金) 11:49:58
>もしスラッシュではなくハイフンにしたとしたら、
>my ($dey1,$dey2,$dey3) = split /\-/, $dey;
>でよろしいでしょうか?

はい構いません。

>変数に3つの言葉(値)が全角スペース区切って代入されている場合、

$word = "あいうえお かきくけこ さしすせそ";

$Zspace_euc  = '(?:\xA1\xA1)'; # EUC-JP
$Zspace_sjis = '(?:\x81\x40)'; # SJIS

my ($w1,$w2,$w3) = split /$Zspace_sjis/, $word;

これで同じように分けられます。
ただ全角スペースはSJISとEUCで違うので注意して下さい。

自動でやりたい場合はjcode.pl等を使って、文字コードを判定させ
if文で場合分けすればできます。

質問者 宇宙のステルヴィア  [削除]  投稿日 8/29(金) 22:54:48
複数すなわち文字列の数が限られていなかった場合、
どのようにすればよいですか?
     ▼1つ目  ▼2つ目  ▼3つ目・・・・・▼Xつ目
$word = "あいうえお かきくけこ さしすせそ・・・・〇×△□";
回答者 まさ  [削除]  投稿日 8/30(土) 10:11:14
同じスレッド内で次から次へと質問するのはよくないと思いますが。

上に示したように、splitの戻りはLISTです。
ですから配列で受けて下さい。

質問者 宇宙のステルヴィア  [削除]  投稿日 8/30(土) 13:03:46
大変参考になったことを感謝します。
私も質問のしかたに気をつけます。
又今度なにか、問題にぶつかったときはよろしくお願いします。
ありがとうございました。

このページは終了したので返信(回答)は書きこめません
 


Web裏技