

#! /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で質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonでDBのカラム名で取得したオブジェクトの値を表示したい 1 2022/05/13 03:41
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- その他(プログラミング・Web制作) python 2 2022/12/23 09:06
- その他(プログラミング・Web制作) pythonのこのエラーがわかりません 3 2022/11/16 14:54
- その他(プログラミング・Web制作) pandasでまとめてインデックスを削除するにはどうすればいいですか? たとえば、以下のプログラムで 1 2022/07/31 23:09
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
任意な項目のソート
-
iアプリ jamファイルの動的な出力
-
matlabでのRRI検出
-
AND検索がうまくできない
-
sort関数でひらがなとカタカナ...
-
ホスト名の取得&表示について
-
matlabのソースコードをpython...
-
このプログラムなんですが
-
RegQueryValueExでの2バイト文字
-
ポインター引数の関数でコンパ...
-
00月00日00時00分→0000年00月00...
-
変数に格納したいです。
-
この花の名前を教えてください。
-
hiddenを使ったセッション
-
画像ファイルの読み込みについて
-
printfの%eで指数部分の桁数を...
-
病院の当番表
-
Perlで2つのテキストファイルの...
-
MySQLに登録すると文字化け
-
論理演算子について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
printfの%eで指数部分の桁数を...
-
stable diffusionのエラー
-
int型(2バイト)データの分割
-
CreateProcessでの環境変数の設...
-
【Excel VBA】10進数を2進数に...
-
エクセルVBA:日付データの変換...
-
C#でのswitch文
-
Excel VBA グラフ作成のとき...
-
ポインター引数の関数でコンパ...
-
C言語でのLinuxとwindows共通の...
-
C言語の構造体にてバブルソート...
-
sort関数でひらがなとカタカナ...
-
VisualBasicでレジストリキーの...
-
構造体のソートの方法について...
-
RegQueryValueExでの2バイト文字
-
'dataType' 引数を Null にする...
-
ActivePerlでSMTPプロトコルで...
-
POSTで配列のデータを渡す方法は?
-
min_elementの三番目の引数
-
c言語の多次元配列で1から100ま...
おすすめ情報