

#! /usr/bin/perl
@data=<>;
open (IN,"newtype.txt");
@file = <IN>;
close (IN);
foreach $address (@file)
{
($pn,$ad) = split(/\t/,$address);
$pnad{$pn}=$ad;
}
foreach $jusyo (@data)
{
chomp $jusyo;
print $jusyo;
print "\n";
print "$pnad{$jusyo}";
}
foreach $line (@file)
{
@data = split(/t\/, $line);
if($data[0] =~ "51105")
{
print "$data[0]";
print "$data[1]";
}
elsif($data[0] =~ "651130")
{
print "$data[0]";
print "$data[1]";
}
}
exit;
コンパイルするときには
./sample.pl data.txt をシェルにうって実行します。
このプログラムでは、はじめに自分で指定したファイル内に存在する郵便番号(通常は7桁だけなんですが、プログラムを見ていただければわかると思われますが、それ以外に5桁(たとえば12354XX,x12354x,xx12354など))と6桁(134567x,x134567など)がありまして、それを表示させたいんですが、上のプログラムでは、if文以下の5桁と6桁があった場合にそれを同時に表示させるプログラムができていないんです。
ハッシュをもちいてプログラムを作り直したいんですが、教えてください。
今日の夜8時までに出さなくてはいけないので、すぐに回答をいただけたらありがたいです。
A 回答 (8件)
- 最新から表示
- 回答順に表示
No.8
- 回答日時:
>>No.1さん
失礼しました。
本日二度目の謝罪(ノ∀`)
一応弁明させていただくと
\
当方はこれを、実際のプログラムでは半角逆スラッシュだが、Windows環境で半角逆スラッシュを入れられないので、全角逆スラッシュで表記したと判断しました。
半角逆スラッシュ=円マークがわかっている方なら、ここでは普通に円マークで入れると思うのですよ。
実行文(./sample.pl data.txt)から環境はUNIX系で間違いないので、半角逆スラッシュが普通に入力できます。
半角逆スラッシュが入力できるのに全角逆スラッシュで入力するとは思えません。
まあ質問者が帰ってこないまま20時過ぎてしまったので真相は闇の中ですね。
No.7
- 回答日時:
いや、別に謝るほどのことではないかと>xyz37005さん
質問者さんは逃亡したっぽいので状況が不明ですが、
MacのSafariだったかで、半角円マークを入力して投稿すると
もれなく全角逆スラッシュにしてくれるという仕様があったように覚えています。
ま、それかどうかはわかりませんけど。
No.6
- 回答日時:
No1回答者です。
>NO1さんの言われる\が\ではないかという話は、本件はUNIXの場合だと思うので気にしなくていいと思います。
念のため補足しますが、私が言いたいのは、全角の \ が間違いと言う事です。
バックスラッシュが間違いで、円記号が正解だ、と言う意味ではありませんよ。
\ これが円記号に見えるか、バックスラッシュに見えるかは、環境に依存します。
UNIX系ではバックスラッシュに見えると思いますので、わざわざ全角の \ を使う必要がない、
よって、この質問はWindows環境から投稿されたと推測しています。
Windows環境で、MS明朝やMSゴシックなど使っていれば、円記号に見えるはずです。
この状態では、半角のバックスラッシュは入力出来ません。
書籍などでは、バックスラッシュで表示されている場合もあると思いますが、
それを参考にして、バックスラッシュを入力しようとすると、ハマります。
半角のバックスラッシュが入力出来ないからと言って、全角を使うのは間違いです。
この場合は、半角の円記号を使うのが正解になります。
全角のバックスラッシュが使われていたので、質問主さんがこの辺りを
勘違いされてるかも知れないと、推測しました。
もちろん私の勝手な推測ですので、実際の所は分かりませんが・・・
そろそろ時間ですが、お返事ないですね。解決していることを祈りましょう。
No.5
- 回答日時:
>>No.4さん
すんません。
>@data=();
と見間違えてた(´;ω;`)ブワッ
まあどちらにせよ2つの入力ファイルの内容と出力したいデータの形式がわからなければ、明確な回答出せないんだが。
夜8時まで4時間切ったがのんびりしてていいんだろうか。
No.4
- 回答日時:
> data.txtの意味合いはなんでしょうか?
> 本スクリプトには引数に対する処理がないので、このdata.txtは意味がありません。
質問にあるスクリプトの頭の方で
@data=<>;
のようにファイルハンドルなしのダイヤモンド演算子を使っているので
ここで読み込まれるのに使われるのではないかと。
No.3
- 回答日時:
>今日の夜8時までに出さなくてはいけないので、すぐに回答をいただけたらありがたいです。
これがもし会社などで業務上使用するプログラムなら、ヒントをあげるので自分でコーティングしよう。
ここで正解を出すことはさほど難しくはないが、それは君のためにも会社のためにもならない。
まず質問の内容ですが、5桁と6桁の郵便番号を抜き出したいと受け取りました。
それを実現するには
>if($data[0] =~ "51105")
>elsif($data[0] =~ "651130")
ここの条件文を変えればいいです。""の中身を変えます。
今のままだと、
$data[0]が文字列"51105"を含む場合
$data[0]が文字列"651130"を含む場合
にしかなりません。
$data[0]が数字が5個続く文字列を含む場合
$data[0]が数字が6個続く文字列を含む場合
にしてやらねばいけません。ここでの注意は7桁の数字は5桁も6桁も含むこと。
具体的にどう表記するかはご自分で考えてください。
“perl 正規表現”などで検索すればいろいろ情報が得られます。
他に気になった点としては
>foreach $jusyo (@data)
この時点で@dataが空なので中身は実行されません。
>@data = split(/t\/, $line);
おそらく書き間違いかと思いますが、タブなら\tです。
NO1さんの言われる\が\ではないかという話は、本件はUNIXの場合だと思うので気にしなくていいと思います。
>print "$data[0]";
>print "$data[1]";
このまま出力すると全てのデータが区切り無しで表示されます。
間に改行などを入れるとよろしいかと思います。
>./sample.pl data.txt をシェルにうって実行します。
data.txtの意味合いはなんでしょうか?
本スクリプトには引数に対する処理がないので、このdata.txtは意味がありません。
出力ファイルにしたいのであれば、./sample.pl > data.txtになります。
最後にperlはコンパイルじゃありませんから!!
No.2
- 回答日時:
> if文以下の5桁と6桁があった場合にそれを同時に表示させるプログラムができていないんです
5桁の条件と6桁の条件を同時に満たすときに
2回出力すれば良いという意味なら
elsif($data[0] =~ "651130")
この elsif を if にすればいいのでは?
> print "$data[1]";
こういうときに、変数をダブルクォートで括る必要はないですから。
No.1
- 回答日時:
とりあえず気になるのは下記の二つ
>($pn,$ad) = split(/\t/,$address);
($pn,$ad) = split(/\t/,$address);
>@data = split(/t\/, $line);
@data = split(/\t/, $line);
タブ区切りなら、\t だと思います。
------------------------------------------------
これで解決しない場合、もう少し詳しく説明して下さい。
まず、newtype.txt と data.txt の内容は何でしょう?
説明と、具体的なサンプルをお願いします。
そして、どういう結果(出力)が欲しいのかも、
具体的な例を出して、説明して下さい。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ビットデータのチェック方法
-
stable diffusionのエラー
-
C#でのswitch文
-
C言語でのLinuxとwindows共通の...
-
EOM間にperl文を作成したい
-
Excel VBA グラフ作成のとき...
-
H8/36064のAD変換データの文字...
-
printfの%eで指数部分の桁数を...
-
C言語 平均点を求める
-
c言語の多次元配列で1から100ま...
-
PINVOKEで構造体配列をマーシャ...
-
C言語 ファイル内のデータと入...
-
エクセルVBA:日付データの変換...
-
perlチェックでエラーが出て困...
-
RegQueryValueExでの2バイト文字
-
c言語 配列から数字だけをint型...
-
10Mバイトて文字数に すると何...
-
DataGridViewの特定列に入力さ...
-
C++ Builderで文字列をバイトに...
-
char str[256]の256の意味は?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
printfの%eで指数部分の桁数を...
-
stable diffusionのエラー
-
【Excel VBA】10進数を2進数に...
-
ポインター引数の関数でコンパ...
-
matlabでのRRI検出
-
C#でのswitch文
-
int型(2バイト)データの分割
-
C言語 ファイル内のデータと入...
-
'dataType' 引数を Null にする...
-
RegQueryValueExでの2バイト文字
-
iアプリ jamファイルの動的な出力
-
[error] [client ---- ] Argument
-
EOM間にperl文を作成したい
-
平滑化フィルタ
-
任意な項目のソート
-
変数の書き方
-
Cプログラムがどうしても動きま...
-
hiddenを使ったセッション
-
機械受注は?
-
チェックボックスの値だけが受...
おすすめ情報