以下のような病院一覧のデータを、1レコード1病院に整理したいと考えています。
-----------
1 01-1017-7 斉藤医院〒038-0056 斉藤 誠一斉藤 誠一医
青医17 青森市大字飛鳥字岸田2 から
2 01-1024-3 医療法人同仁会 浪打〒030-0902 医療法人 同仁会 理菊田 一貫医
青医24 病院青森市合浦二丁目11-24 事長 菊田 一貫 から
3 01-1064-9 渡辺病院〒030-0823 医療法人 厚生会 理福島 彬裕医
青医64 青森市橋本一丁目7-4 事長 福島 彬裕 から
-----------
数字で始まる行が「1,2,3」が各病院を表しているようですが、
1病院が3レコードだったり、4レコードだったりとばらばらです。
思いついたのは、数字で始まる行の先頭に記号(例:★)をつけ、
一旦、改行を全部外し、記号(例:★)のついた行で改行をする…
どんな方法でも良いので処理できないものか、悩んでいます。
お力を貸していただけないでしょうか。
No.5ベストアンサー
- 回答日時:
ANo. 3です。
ひどく寝呆けていたようで、大変失礼しました。
下記のコードにて動作確認済みです。
よろしくお願いします。
#!/usr/bin/perl
use strict;
open(IN, "data.txt") or die "ファイルが開けない";
open(OUT, "> data2.txt") or die "ファイルが開けない";
my @buff;
while(<IN>){
chomp;
if(/^\d+ [\d-]+/ && @buff){
printf(OUT "%s\n", join(" ", @buff));
undef @buff;
}
push @buff, $_;
}
printf(OUT "%s\n", join(" ", @buff));
No.6
- 回答日時:
1 01-1017-7 斉○医院〒03x-00x6・・・・・・・・・
2 01-1024-3 医療法人同○会 浪打〒03x-09x2・・・
3 01-1064-9 ○辺病院〒03x-08x3・・・・・・・・・
先頭に連番らしき数字、次にxxx-xxxx-xの形式番号、次に名称、次に「〒」と郵便番号。
以降は何文字、何行あるかわからない情報。
整形するには、何か一定になるルールを見つけることです。
ルールが一定になればなるほど整形しやすいです。
先頭の連番の数字が1ケタと2ケタとあるようなら、
2ケタにしてやるとか、2段階になってても整形してやればなお処理を考えやすい。
01 01-1017-7 斉○医院 〒03x-00x6・・・・・・・・・
02 01-1024-3 医療法人同○会 浪打〒03x-09x2・・・・・・・・・
03 01-1064-9 ○辺病院 〒03x-08x3・・・・・・・・・
それと、
住所氏名など個人情報につながるものは
投稿するときには、特定できないように伏せた方がいいです。
だれがどう悪用するかわかりません。
ご指導有難うございます。
「ルールを見出す」とても大切な事ですよね。
頑張って整形していきたいと思います!
※記載データはWebで公開されているものですから、個人情報とは捉えておりません。
No.4
- 回答日時:
とりあえず Perl で書いてみる:
@hospitals = ();
while (<>) {
chomp;
if (/^\d/) {
push @hospitals, $_;
} else {
$hospitals[-1] .= $_;
}
}
$" = "\n";
print "@hospitals\n";
ちなみに最初の行が数字ではじまらないといきなりエラーになるというオチもあり.
むぅ, ワンライナーにしようと思えばできるなぁ....
No.3
- 回答日時:
これでどうでしょうか。
#!/usr/bin/perl
use strict;
open(IN, "data.txt") or die "ファイルが開けない";
open(OUT, "> data2.txt") or die "ファイルが開けない";
my $str = join("", <IN>);
my @record = ($str =~ /(\d+ [\d_+].+)+/g);
for(@record){
s/[\r\n]//g;
printf(OUT "%s\n", $_);
}
この回答への補足
ご指導有難うございます。1行1病院、ますます近づいてきました。
先頭が数字で始まるようになりましたが、数字で始まる行しか出力されて来ませんでした(ーー;)
数字で始まらない行が消えてしまっているみたいです。
もう少しお力添えいただけると助かります。
No.2
- 回答日時:
さしあたり次の 2点を明確にしてほしい.
1. 「レコード」って何? 「行 = レコード」と思っていい?
2. どんな形式に「整理」したいの? たとえば最初の 2行を単純に 1行にすると
1 01-1017-7 斉藤医院〒038-0056 斉藤 誠一斉藤 誠一医青医17 青森市大字飛鳥字岸田2 から
になるんだけど, それでいいの?
この回答への補足
>1.「レコード」って何? 「行 = レコード」と思っていい?
はい
>2.どんな形式に「整理」したいの? たとえば最初の 2行を単純に 1行にすると
>1 01-1017-7 斉藤医院〒038-0056 斉藤 誠一斉藤 誠一医青医 17 青森市大字飛鳥字岸田2 から
単純に1行になれば良いです。
No.1
- 回答日時:
仰っている内容を理解出来ているかわかりませんが、こういうことでしょうか。
#!/usr/bin/perl
use strict;
open(IN, "data.txt") or die "ファイルが開けない";
open(OUT, "> data2.txt") or die "ファイルが開けない";
my $str = join("", <IN>);
my @record = ($str =~ /(.+?から)/sg);
for(@record){
s/[\r\n]//g;
printf(OUT "%s\n", $_);
}
ありがとうございます。かなり欲しいものに近づきました。
1点質問内容に補足しても良いでしょうか。
-------------
6 01-1216-5 青森市民病院〒030-0821 017-734-2171 青森市棟方 博文医 538平成17年12月16日
(01-3216-9) 青森市勝田一丁目14-20 から
青医216 平成23年12月15日
7 01-1222-3 医療法人 近藤病院〒030-0813 017-734-3541 医療法人 回生会 理近藤 利満医 107平成18年 3月25日
青医222 青森市松原三丁目13-21 事長 近藤 利満 から
-------------
6(青森市民病院)のように、「*から」で終わらず、「*青医216 平成23年12月15日」で終わる行もあるのです。
処理は何段階に分かれても構わないので、もう少しお知恵を拝借できないでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 事故 交通事故後の通院について 先日、交通事故にあい、一応救急車で運ばれた先の病院で軽い打撲と診断されまし 4 2022/11/19 22:29
- 統合失調症 病気になってしまい一人暮らしの為、困っております。 三重県に住んでおり、 病院には統合失調症と診断さ 2 2022/09/09 07:27
- 医療・安全 徳州会病院についての質問。 5 2022/09/13 11:39
- がん・心臓病・脳卒中 乳がんに関する質問てす 5 2022/12/06 11:32
- 医療・安全 本土の皆さん、どうすればいいか?正解はなんでしょうか? 数週間後は直面しますよ、そのまま秋以降はイン 7 2023/07/07 05:00
- 理学療法士・作業療法士・言語聴覚士 紹介された乳がんの治療をする病院を変えたい❗️ 3 2022/12/12 00:59
- 電車・路線・地下鉄 東横線と田園都市線 帰宅ラッシュの激しいのはどっち!? 5 2023/05/05 12:04
- 医療事務・調剤薬局事務 専門学生 23卒です。志望動機の添削お願いします。 医療事務の資格(医科、歯科、調剤、クラーク、介護 1 2022/07/28 15:51
- 医療 自立支援医療利用中の転院 1 2023/07/12 09:16
- 病院・検査 大学病院の外来をかかりつけ医にする方法…症状が安定した後も継続して受診できる人とできない人の差は何? 6 2023/03/04 12:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「パスが見つかりません」とい...
-
テキストファイルの各行を配列...
-
Fortranで1行飛ばして読み込む方法
-
Perlで特定行から特定行までを...
-
バッチファイルの作り方(CSV→...
-
VBAでCSVファイルの特定行を書...
-
C言語で特定の行を抽出する方法...
-
C言語のバイナリモードでのfsca...
-
close()で例外が投げられる理由
-
ヒアドキュメントの書き方
-
MATLAB グローバル変数の宣言
-
utf-8のCSVをshift_jisに変換し...
-
chdirがうまくできない
-
openした後、closeしないでプロ...
-
unixでのファイルロックの方法...
-
ExcelをCSV書き出す場合のシー...
-
window.open でのファイル指定方法
-
perl で googleAPIを呼び出す...
-
Edge スクレイピング
-
Perl Vlookupみたいに
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Pythonでegrep機能をつかいたい
-
テキストファイルの各行を配列...
-
ファイル名を複数個配列で確保...
-
Pythonで非日本語のUnicode文字...
-
「パスが見つかりません」とい...
-
ifstream/ofstream について
-
C++でのテキストファイル読み込...
-
perlでCSVをソートする方法につ...
-
Pythonでテキストを行数指定し...
-
perlで先頭の数値をみて昇順に...
-
VBScriptにて、テキストファイ...
-
一行だけ読込
-
perlで指定範囲を複数ファイル...
-
ファイル読み込みマッチングに...
-
Perl Grepについて
-
ifstream を利用した1行分のテ...
-
Visual Basicを使って三平方の...
-
perlの引数で複数のファイル処...
-
Perlによるディレクトリ内の連...
-
system関数と引数について
おすすめ情報