File Coverage

blib/lib/Earthquake/EEW/Decoder.pm
Criterion Covered Total %
statement 71 71 100.0
branch 18 18 100.0
condition 3 3 100.0
subroutine 4 4 100.0
pod 0 2 0.0
total 96 98 97.9


line stmt bran cond sub pod time code
1             package Earthquake::EEW::Decoder;
2              
3 1     1   21823 use utf8;
  1         9  
  1         4  
4 1     1   33 use vars qw($VERSION);
  1         1  
  1         2544  
5             our $VERSION = '0.03';
6              
7             #電文種別
8             my %code_type = (
9             '35' => '最大予測震度のみ',
10             '36' => 'M、最大予測震度及び主要動到達予測時刻',
11             '37' =>
12             'M、最大予測度及び主要動到達予測時刻(確度大)',
13             '39' => 'キャンセル報',
14             '47' => '一般向け速報',
15             '48' => 'キャンセル報',
16             );
17              
18             #発信官署
19             my %section = (
20             '01' => '札幌',
21             '02' => '仙台',
22             '03' => '東京',
23             '04' => '大阪',
24             '05' => '福岡',
25             '06' => '沖縄',
26             );
27              
28             #訓練等の識別符
29             my %msg_type = (
30             '00' => '通常',
31             '01' => '訓練',
32             '10' => '取り消し',
33             '11' => '訓練取り消し',
34             '20' => '参考/テスト',
35             '30' => 'コードのみ配信試験',
36             );
37              
38             #震度
39             my %shindo = (
40             '01' => '震度1',
41             '02' => '震度2',
42             '03' => '震度3',
43             '04' => '震度4',
44             '5-' => '震度5弱',
45             '5+' => '震度5強',
46             '6-' => '震度6弱',
47             '6+' => '震度6強',
48             '07' => '震度7',
49             '//' => '不明',
50             );
51              
52             #データの確からしさ
53             my %rk1 = (
54             '1' =>
55             'P 波/S 波レベル越え、またはテリトリー法(1点)',
56             '2' => 'テリトリー法(2 点)',
57             '3' => 'グリッドサーチ法(3 点/4 点)',
58             '4' => 'グリッドサーチ法(5 点)',
59             '5' =>
60             '防災科研システム(4 点以下、または精度情報なし)',
61             '6' => '防災科研システム(5 点以上)',
62             '7' => 'EPOS(海域〔観測網外〕)',
63             '8' => 'EPOS(内陸〔観測網内〕)',
64             '9' => '予備',
65             '/' => '不明、未設定時、キャンセル時',
66             );
67              
68             #震源の深さの確からしさ
69             my %rk2 = (
70             '1' =>
71             'P 波/S 波レベル越え、またはテリトリー法(1 点)',
72             '2' => 'テリトリー法(2 点)',
73             '3' => 'グリッドサーチ法(3 点/4 点)',
74             '4' => 'グリッドサーチ法(5 点)',
75             '5' =>
76             '防災科研システム(4 点以下、または精度情報なし)',
77             '6' => '防災科研システム(5 点以上)',
78             '7' => 'EPOS(海域〔観測網外〕)',
79             '8' => 'EPOS(内陸〔観測網内〕)',
80             '9' => '予備',
81             '/ ' => '不明、未設定時、キャンセル時',
82             );
83              
84             #マグニチュードの確からしさ
85             my %rk3 = (
86             '1' => '未定義',
87             '2' => '防災科研システム',
88             '3' => '全点(最大5 点)P 相',
89             '4' => 'P 相/全相混在',
90             '5' => '全点(最大5 点)全相',
91             '6' => 'EPOS',
92             '7' => '未定義',
93             '8' => 'P 波/S 波レベル越え',
94             '9' => '予備',
95             '/' => '不明、未設定時、キャンセル時',
96              
97             );
98              
99             #地震の発生場所
100             my %rt1 = (
101             '0' => '陸',
102             '1' => '海',
103             '/' => '不明',
104             );
105              
106             #最大予測震度の変化
107             my %rc1 = (
108             '0' => 'ほとんど変化なし',
109             '1' => '最大予測震度が1.0 以上大きくなった。',
110             '2' => '最大予測震度が1.0 以上小さくなった。',
111             '/' => '不明、未設定時、キャンセル時',
112             );
113              
114             #最大予測震度の変化の理由
115             my %rc2 = (
116             '0' => '変化なし',
117             '1' => '主としてMが変化したため(1.0 以上)。',
118             '2' => '主として震源位置が変化したため(10km 以上)。',
119             '3' =>
120             'M及び震源位置が変化したため(1 と2 の複合条件)。',
121             '4' =>
122             '震源の深さが変化したため(上記のいずれにもあてはまらず、30km 以上の変化)。',
123             '/' => '不明、未設定時、キャンセル時',
124             );
125              
126             my %ebiyy = (
127             '00' => '未到達',
128             '01' => '既に到着と予想',
129             );
130              
131             #タイプ
132             my %warn_type = (
133             'NCN' => '高度利用者向け',
134             'NPN' => '一般向け',
135             'NCPN' => '一般向け',
136             'PRC' => '強い揺れが推定される地域の追加',
137             'EBI' => '予想震度と到達時間',
138             'CAI' => '新たに追加された強い揺れが推定される地方',
139             'CPI' => '新たに追加された強い揺れが推定される県',
140             'CBI' => '新たに追加された強い揺れが推定される地域',
141             'PAI' => '強い揺れが推定される地方',
142             'PPI' => '強い揺れが推定される県',
143             'PBI' => '強い揺れが推定される地域',
144             );
145             my %ippan_shinou_code = (
146             '0000' => '',
147             '9011' => '北海道道央',
148             '9012' => '北海道道南',
149             '9013' => '北海道道北',
150             '9014' => '北海道道東',
151             '9014' => '北海道道東',
152             '9700' => '北海道南西沖',
153             '9701' => '北海道西方沖',
154             '9702' => '石狩湾',
155             '9703' => '北海道北西沖',
156             '9704' => '宗谷海峡',
157             '9705' => '国後島付近',
158             '9706' => '択捉島付近',
159             '9707' => '北海道東方沖',
160             '9708' => '根室半島沖',
161             '9709' => '釧路沖',
162             '9710' => '十勝沖',
163             '9711' => '浦河沖',
164             '9712' => '苫小牧沖',
165             '9713' => '内浦湾',
166             '9714' => '宗谷東方沖',
167             '9715' => '網走沖',
168             '9716' => '択捉島南東沖',
169             '9020' => '青森県',
170             '9030' => '岩手県',
171             '9040' => '宮城県',
172             '9050' => '秋田県',
173             '9050' => '秋田県',
174             '9060' => '山形県',
175             '9207' => '福島県',
176             '9730' => '津軽海峡',
177             '9731' => '山形沖',
178             '9732' => '秋田沖',
179             '9733' => '青森西方沖',
180             '9734' => '陸奥湾',
181             '9735' => '青森東方沖',
182             '9736' => '岩手沖',
183             '9737' => '宮城沖',
184             '9738' => '三陸沖',
185             '9739' => '福島沖',
186             '9080' => '茨城県',
187             '9760' => '千葉南東沖',
188             '9090' => '栃木県',
189             '9100' => '群馬県',
190             '9110' => '埼玉県',
191             '9120' => '千葉県',
192             '9761' => '千葉南方沖',
193             '9130' => '東京',
194             '9130' => '東京',
195             '9140' => '神奈川県',
196             '9150' => '新潟県',
197             '9372' => '新潟沖',
198             '9160' => '富山県',
199             '9170' => '石川県',
200             '9180' => '福井県',
201             '9190' => '山梨県',
202             '9200' => '長野県',
203             '9210' => '岐阜県',
204             '9220' => '静岡県',
205             '9230' => '愛知県',
206             '9240' => '三重県',
207             '9762' => '三重南東沖',
208             '9763' => '茨城沖',
209             '9764' => '関東東方沖',
210             '9765' => '千葉東方沖',
211             '9766' => '関東南方沖',
212             '9767' => '伊豆諸島近海',
213             '9768' => '東京湾',
214             '9769' => '相模湾',
215             '9770' => '伊豆東方沖',
216             '9771' => '静岡沖(※3)',
217             '9772' => '三河湾',
218             '9773' => '伊勢湾',
219             '9774' => '若狭湾',
220             '9775' => '福井沖',
221             '9776' => '石川西方沖',
222             '9777' => '能登半島沖',
223             '9778' => '富山湾',
224             '9779' => '佐渡付近',
225             '9780' => '東海道沖',
226             '9250' => '滋賀県',
227             '9260' => '京都府',
228             '9270' => '大阪府',
229             '9280' => '兵庫県',
230             '9290' => '奈良県',
231             '9300' => '和歌山県',
232             '9310' => '鳥取県',
233             '9310' => '鳥取県',
234             '9320' => '島根県',
235             '9330' => '岡山県',
236             '9340' => '広島県',
237             '9360' => '徳島県',
238             '9370' => '香川県',
239             '9380' => '愛媛県',
240             '9390' => '高知県',
241             '9790' => '土佐湾',
242             '9791' => '紀伊水道',
243             '9792' => '大阪湾',
244             '9793' => '播磨灘',
245             '9794' => '瀬戸内海',
246             '9795' => '安芸灘',
247             '9796' => '周防灘',
248             '9797' => '伊予灘',
249             '9798' => '豊後水道',
250             '9799' => '山口北西沖',
251             '9800' => '島根沖',
252             '9801' => '鳥取沖',
253             '9802' => '隠岐島近海',
254             '9803' => '兵庫北方沖',
255             '9804' => '京都沖',
256             '9805' => '淡路島付近',
257             '9806' => '和歌山沖',
258             '9350' => '山口県',
259             '9400' => '福岡県',
260             '9410' => '佐賀県',
261             '9420' => '長崎県',
262             '9430' => '熊本県',
263             '9440' => '大分県',
264             '9450' => '宮崎県',
265             '9460' => '鹿児島県',
266             '9820' => '五島列島近海',
267             '9821' => '天草灘',
268             '9822' => '有明海',
269             '9823' => '橘湾',
270             '9824' => '鹿児島湾',
271             '9825' => '種子島近海',
272             '9826' => '日向灘',
273             '9827' => '奄美大島近海',
274             '9828' => '対馬近海',
275             '9829' => '福岡北西沖',
276             '9830' => '鹿児島西方沖',
277             '9831' => '薩南諸島近海',
278             '9832' => '鹿児島東方沖(※4)',
279             '9833' => '九州南東沖',
280             '9471' => '沖縄本島近海',
281             '9472' => '南大東島近海',
282             '9850' => '沖縄南方沖',
283             '9473' => '宮古島近海',
284             '9851' => '石垣島近海',
285             '9852' => '石垣島南方沖',
286             '9853' => '西表島付近',
287             '9854' => '与那国島近海',
288             '9855' => '宮古島北西沖',
289             '9856' => '石垣島北西沖',
290             '9900' => '台湾付近',
291             '9901' => '東シナ海',
292             '9902' => '四国沖',
293             '9903' => '鳥島近海',
294             '9904' => '鳥島東方沖',
295             '9905' => 'オホーツク海',
296             '9906' => 'サハリン付近',
297             '9907' => '日本海北部',
298             '9908' => '日本海中部',
299             '9909' => '日本海西部',
300             '9781' => '父島近海',
301             '9781' => '父島近海',
302             '9910' => '南海道南方沖',
303             '9911' => 'サハリン南部',
304             '9912' => '朝鮮半島南部'
305             );
306             my %shinou_code = (
307             '000' => '',
308             100 => '石狩支庁北部',
309             101 => '石狩支庁中部',
310             102 => '石狩支庁南部',
311             105 => '渡島支庁北部',
312             106 => '渡島支庁東部',
313             107 => '渡島支庁西部',
314             110 => '檜山支庁',
315             115 => '後志支庁北部',
316             116 => '後志支庁東部',
317             117 => '後志支庁西部',
318             120 => '空知支庁北部',
319             121 => '空知支庁中部',
320             122 => '空知支庁南部',
321             125 => '上川支庁北部',
322             126 => '上川支庁中部',
323             127 => '上川支庁南部',
324             130 => '留萌支庁中北部',
325             131 => '留萌支庁南部',
326             135 => '宗谷支庁北部',
327             136 => '宗谷支庁南部',
328             140 => '網走支庁網走地方',
329             141 => '網走支庁北見地方',
330             142 => '網走支庁紋別地方',
331             145 => '胆振支庁西部',
332             146 => '胆振支庁中東部',
333             150 => '日高支庁西部',
334             151 => '日高支庁中部',
335             152 => '日高支庁東部',
336             155 => '十勝支庁北部',
337             156 => '十勝支庁中部',
338             157 => '十勝支庁南部',
339             160 => '釧路支庁北部',
340             161 => '釧路支庁中南部',
341             165 => '根室支庁北部',
342             166 => '根室支庁中部',
343             167 => '根室支庁南部',
344             180 => '北海道南西沖',
345             181 => '北海道西方沖',
346             182 => '石狩湾',
347             183 => '北海道北西沖',
348             184 => '宗谷海峡',
349             186 => '国後島付近',
350             187 => '択捉島付近',
351             188 => '北海道東方沖',
352             189 => '根室半島南東沖',
353             190 => '釧路沖',
354             191 => '十勝沖',
355             192 => '浦河沖',
356             193 => '苫小牧沖',
357             194 => '内浦湾',
358             195 => '宗谷東方沖',
359             196 => '網走沖',
360             197 => '択捉島南東沖',
361             200 => '青森県津軽北部',
362             201 => '青森県津軽南部',
363             202 => '青森県三八上北地方',
364             203 => '青森県下北地方',
365             210 => '岩手県沿岸北部',
366             211 => '岩手県沿岸南部',
367             212 => '岩手県内陸北部',
368             213 => '岩手県内陸南部',
369             220 => '宮城県北部',
370             221 => '宮城県南部',
371             222 => '宮城県中部',
372             230 => '秋田県沿岸北部',
373             231 => '秋田県沿岸南部',
374             232 => '秋田県内陸北部',
375             233 => '秋田県内陸南部',
376             240 => '山形県庄内地方',
377             241 => '山形県最上地方',
378             242 => '山形県村山地方',
379             243 => '山形県置賜地方',
380             250 => '福島県中通り',
381             251 => '福島県浜通り',
382             252 => '福島県会津',
383             280 => '津軽海峡',
384             281 => '山形県沖',
385             282 => '秋田県沖',
386             283 => '青森県西方沖',
387             284 => '陸奥湾',
388             285 => '青森県東方沖',
389             286 => '岩手県沖',
390             287 => '宮城県沖',
391             288 => '三陸沖',
392             289 => '福島県沖',
393             300 => '茨城県北部',
394             301 => '茨城県南部',
395             309 => '千葉県南東沖',
396             310 => '栃木県北部',
397             311 => '栃木県南部',
398             320 => '群馬県北部',
399             321 => '群馬県南部',
400             330 => '埼玉県北部',
401             331 => '埼玉県南部',
402             332 => '埼玉県秩父地方',
403             340 => '千葉県北東部',
404             341 => '千葉県北西部',
405             342 => '千葉県南部',
406             349 => '房総半島南方沖',
407             350 => '東京都23区',
408             351 => '東京都多摩東部',
409             352 => '東京都多摩西部',
410             360 => '神奈川県東部',
411             361 => '神奈川県西部',
412             370 => '新潟県上越地方',
413             371 => '新潟県中越地方',
414             372 => '新潟県下越地方',
415             378 => '新潟県下越沖',
416             379 => '新潟県上中越沖',
417             380 => '富山県東部',
418             381 => '富山県西部',
419             390 => '石川県能登地方',
420             391 => '石川県加賀地方',
421             400 => '福井県嶺北',
422             401 => '福井県嶺南',
423             411 => '山梨県中・西部',
424             412 => '山梨県東部・富士五湖',
425             420 => '長野県北部',
426             421 => '長野県中部',
427             422 => '長野県南部',
428             430 => '岐阜県飛騨地方',
429             431 => '岐阜県美濃東部',
430             432 => '岐阜県美濃中西部',
431             440 => '静岡県伊豆地方',
432             441 => '静岡県東部',
433             442 => '静岡県中部',
434             443 => '静岡県西部',
435             450 => '愛知県東部',
436             451 => '愛知県西部',
437             460 => '三重県北部',
438             461 => '三重県中部',
439             462 => '三重県南部',
440             469 => '三重県南東沖',
441             471 => '茨城県沖',
442             472 => '関東東方沖',
443             473 => '千葉県東方沖',
444             475 => '八丈島東方沖',
445             476 => '八丈島近海',
446             477 => '東京湾',
447             478 => '相模湾',
448             480 => '伊豆大島近海',
449             481 => '伊豆半島東方沖',
450             482 => '三宅島近海',
451             483 => '新島・神津島近海',
452             485 => '駿河湾',
453             486 => '駿河湾南方沖',
454             487 => '遠州灘',
455             489 => '三河湾',
456             490 => '伊勢湾',
457             492 => '若狭湾',
458             493 => '福井県沖',
459             494 => '石川県西方沖',
460             495 => '能登半島沖',
461             497 => '富山湾',
462             498 => '佐渡付近',
463             499 => '東海道南方沖',
464             500 => '滋賀県北部',
465             501 => '滋賀県南部',
466             510 => '京都府北部',
467             511 => '京都府南部',
468             520 => '大阪府北部',
469             521 => '大阪府南部',
470             530 => '兵庫県北部',
471             531 => '兵庫県南東部',
472             532 => '兵庫県南西部',
473             540 => '奈良県',
474             550 => '和歌山県北部',
475             551 => '和歌山県南部',
476             560 => '鳥取県東部',
477             562 => '鳥取県中部',
478             563 => '鳥取県西部',
479             570 => '島根県東部',
480             571 => '島根県西部',
481             580 => '岡山県北部',
482             581 => '岡山県南部',
483             590 => '広島県北部',
484             591 => '広島県南東部',
485             592 => '広島県南西部',
486             600 => '徳島県北部',
487             601 => '徳島県南部',
488             610 => '香川県東部',
489             611 => '香川県西部',
490             620 => '愛媛県東予',
491             621 => '愛媛県中予',
492             622 => '愛媛県南予',
493             630 => '高知県東部',
494             631 => '高知県中部',
495             632 => '高知県西部',
496             673 => '土佐湾',
497             674 => '紀伊水道',
498             675 => '大阪湾',
499             676 => '播磨灘',
500             677 => '瀬戸内海中部',
501             678 => '安芸灘',
502             679 => '周防灘',
503             680 => '伊予灘',
504             681 => '豊後水道',
505             682 => '山口県北西沖',
506             683 => '島根県沖',
507             684 => '鳥取県沖',
508             685 => '隠岐島近海',
509             686 => '兵庫県北方沖',
510             687 => '京都府沖',
511             688 => '淡路島付近',
512             689 => '和歌山県南方沖',
513             700 => '山口県北部',
514             701 => '山口県東部',
515             702 => '山口県西部',
516             710 => '福岡県福岡地方',
517             711 => '福岡県北九州地方',
518             712 => '福岡県筑豊地方',
519             713 => '福岡県筑後地方',
520             720 => '佐賀県北部',
521             721 => '佐賀県南部',
522             730 => '長崎県北部',
523             731 => '長崎県南西部',
524             732 => '長崎県島原半島',
525             740 => '熊本県阿蘇地方',
526             741 => '熊本県熊本地方',
527             742 => '熊本県球磨地方',
528             743 => '熊本県天草・芦北地方',
529             750 => '大分県北部',
530             751 => '大分県中部',
531             752 => '大分県南部',
532             753 => '大分県西部',
533             760 => '宮崎県北部平野部',
534             761 => '宮崎県北部山沿い',
535             762 => '宮崎県南部平野部',
536             763 => '宮崎県南部山沿い',
537             770 => '鹿児島県薩摩地方',
538             771 => '鹿児島県大隅地方',
539             783 => '五島列島近海',
540             784 => '天草灘',
541             785 => '有明海',
542             786 => '橘湾',
543             787 => '鹿児島湾',
544             790 => '種子島近海',
545             791 => '日向灘',
546             793 => '奄美大島近海',
547             795 => '壱岐・対馬近海',
548             796 => '福岡県北西沖',
549             797 => '薩摩半島西方沖',
550             798 => 'トカラ列島近海',
551             799 => '奄美大島北西沖',
552             820 => '大隅半島東方沖',
553             821 => '九州地方南東沖',
554             822 => '種子島南東沖',
555             823 => '奄美大島北東沖',
556             850 => '沖縄本島近海',
557             851 => '南大東島近海',
558             852 => '沖縄本島南方沖',
559             853 => '宮古島近海',
560             854 => '石垣島近海',
561             855 => '石垣島南方沖',
562             856 => '西表島付近',
563             857 => '与那国島近海',
564             858 => '沖縄本島北西沖',
565             859 => '宮古島北西沖',
566             860 => '石垣島北西沖',
567             900 => '台湾付近',
568             901 => '東シナ海',
569             902 => '四国沖',
570             903 => '鳥島近海',
571             904 => '鳥島東方沖',
572             905 => 'オホーツク海南部',
573             906 => 'サハリン西方沖',
574             907 => '日本海北部',
575             908 => '日本海中部',
576             909 => '日本海西部',
577             911 => '父島近海',
578             912 => '千島列島',
579             913 => '千島列島南東沖',
580             914 => '北海道南東沖',
581             915 => '東北地方東方沖',
582             916 => '小笠原諸島西方沖',
583             917 => '硫黄島近海',
584             918 => '小笠原諸島東方沖',
585             919 => '南海道南方沖',
586             920 => '薩南諸島東方沖',
587             921 => '本州南方沖',
588             922 => 'サハリン南部付近',
589             930 => '北西太平洋',
590             932 => 'マリアナ諸島',
591             933 => '黄海',
592             934 => '朝鮮半島南部',
593             935 => '朝鮮半島北部',
594             936 => '中国東北部',
595             937 => 'ウラジオストク付近',
596             938 => 'シベリア南部',
597             939 => 'サハリン近海',
598             940 => 'アリューシャン列島',
599             941 => 'カムチャツカ半島付近',
600             942 => '北米西部',
601             943 => '北米中部',
602             944 => '北米東部',
603             945 => '中米',
604             946 => '南米西部',
605             947 => '南米中部',
606             948 => '南米東部',
607             949 => '北東太平洋',
608             950 => '南太平洋',
609             951 => 'インドシナ半島付近',
610             952 => 'フィリピン付近',
611             953 => 'インドネシア付近',
612             954 => 'グアム付近',
613             955 => 'ニューギニア付近',
614             956 => 'ニュージーランド付近',
615             957 => 'オーストラリア付近',
616             958 => 'シベリア付近',
617             959 => 'ロシア西部',
618             960 => 'ロシア中部',
619             961 => 'ロシア東部',
620             962 => '中央アジア',
621             963 => '中国西部',
622             964 => '中国中部',
623             965 => '中国東部',
624             966 => 'インド付近',
625             967 => 'インド洋',
626             968 => '中東',
627             969 => 'ヨーロッパ西部',
628             970 => 'ヨーロッパ中部',
629             971 => 'ヨーロッパ東部',
630             972 => '地中海',
631             973 => 'アフリカ西部',
632             974 => 'アフリカ中部',
633             975 => 'アフリカ東部',
634             976 => '北大西洋',
635             977 => '南大西洋',
636             978 => '北極付近',
637             979 => '南極付近'
638             );
639              
640             sub new {
641 1     1 0 11 my $class = shift;
642 1         3 my %conf = @_;
643 1         3 $conf{basedir} = '/tmp';
644 1         12 return bless {%conf}, $class;
645             }
646              
647             sub read_data {
648 1     1 0 2 my ( $self, $str ) = @_;
649 1         2 my $data;
650 1         1 my $now_code = '';
651 1         16 foreach my $line ( split /[\r\n]/, $str ) {
652 20 100 100     179 if ( $line =~ /(\d{2}) (\d{2}) (\d{2}) (\d{12}) C(\d{2})/ ) {
    100          
    100          
    100          
    100          
    100          
    100          
    100          
653 1         8 $data->{'code_type'} = $code_type{$1};
654 1         3 $data->{'code'} = $1;
655 1         4 $data->{'section'} = $section{$2};
656 1         2 $data->{'section_code'} = $2;
657 1         3 $data->{'msg_type'} = $msg_type{$3};
658 1         3 $data->{'msg_type_code'} = $3;
659 1         2 $data->{'warn_time'} = $4;
660 1         4 $data->{'command_code'} = $5;
661 1         2 $now_code='';
662             }
663             elsif ( $line =~ /^(\d{12})/ ) {
664 1         3 $data->{'eq_time'} = $1;
665 1         2 $now_code='';
666             }
667             elsif ( $line =~ /ND(\d{14}) ([A-Z]+)(\d+)/ ) {
668 2         5 $data->{'eq_id'} = $1;
669 2         7 $data->{'warn_type'} = $warn_type{$2};
670 2         5 $data->{'warn_code'} = $2;
671 2         5 $data->{'warn_num'} = $3 * 1;
672 2         3 $now_code='';
673             }
674             elsif ( $line
675             =~ /(\d{3}) N(\d{3}) E(\d{4}) (\d{3}) (\d{2}) ([0-9\-\+]{2}) RK.+/
676             )
677             {
678 1         3 $data->{'center_code'} = $1;
679 1         3 $data->{'center_name'} = $shinou_code{$1};
680 1         3 $data->{'center_lat'} = $2 / 10;
681 1         14 $data->{'center_lng'} = $3 / 10;
682 1         2 $data->{'center_depth'} = $4 * 1;
683 1         3 $data->{'magnitude'} = $5 / 10;
684 1         4 $data->{'shindo'} = $shindo{$6};
685 1         2 $data->{'shindo_code'} = $6;
686 1         18 $now_code='';
687             }
688             elsif ( $line =~ /(\d{4}) N(\d{3}) E(\d{4}) (\d{3})/ ) {
689 1         3 $data->{'center_code'} = $1;
690 1         3 $data->{'center_name'} = $ippan_shinou_code{$1};
691 1         5 $data->{'center_lat'} = $2 / 10;
692 1         9 $data->{'center_lng'} = $3 / 10;
693 1         3 $data->{'center_depth'} = $4 * 1;
694 1         2 $now_code='';
695             }
696             elsif ( $line =~ /([CP][APB]I) ([0-9\s]+)/ ) {
697 6         10 $now_code=$1;
698 6         22 foreach my $code ( split / /, $2 ) {
699 31         179 $data->{$now_code}->{$code}->{'name'} = $ippan_shinou_code{$code};
700             }
701             }
702             elsif ( $line
703             =~ /(\d{3}) S([0-9\-\+]{2})([0-9\-\+]{2}) (\d{6}) (\d{2}) (\d{3}) S([0-9\-\+]{2})([0-9\-\+]{2}) (\d{6}) (\d{2})/
704             )
705             {
706 2         4 $now_code='EBI';
707              
708 2         13 $data->{'EBI'}->{$1}->{'name'} = $shinou_code{$1};
709 2         5 $data->{'EBI'}->{$1}->{'shindo1'} = $shindo{$2};
710 2         5 $data->{'EBI'}->{$1}->{'shindo1_code'} = $2;
711 2         5 $data->{'EBI'}->{$1}->{'shindo2'} = $shindo{$3};
712 2         5 $data->{'EBI'}->{$1}->{'shindo2_code'} = $3;
713 2         6 $data->{'EBI'}->{$1}->{'time'} = $4;
714 2         5 $data->{'EBI'}->{$1}->{'arrive'} = $ebiyy{$5};
715 2         6 $data->{'EBI'}->{$1}->{'arrive_code'} = $5;
716              
717 2         6 $data->{'EBI'}->{$6}->{'name'} = $shinou_code{$6};
718 2         5 $data->{'EBI'}->{$6}->{'shindo1'} = $shindo{$7};
719 2         5 $data->{'EBI'}->{$6}->{'shindo1_code'} = $7;
720 2         4 $data->{'EBI'}->{$6}->{'shindo2'} = $shindo{$8};
721 2         5 $data->{'EBI'}->{$6}->{'shindo2_code'} = $8;
722 2         4 $data->{'EBI'}->{$6}->{'time'} = $9;
723 2         5 $data->{'EBI'}->{$6}->{'arrive'} = $ebiyy{$10};
724 2         6 $data->{'EBI'}->{$6}->{'arrive_code'} = $10;
725             }
726             elsif ($now_code && $line=~/([0-9\s]+)/){
727 4         12 foreach my $code ( split / /, $1 ) {
728 22 100       48 if($now_code=~/[PC]BI/){
729 17         54 $data->{$now_code}->{$code}->{'name'} = $shinou_code{$code};
730             }else{
731 5         19 $data->{$now_code}->{$code}->{'name'} = $ippan_shinou_code{$code};
732             }
733             }
734             }
735             }
736 1         13 return $data;
737             }
738              
739             __END__