From: "akira yamada / やまだあきら" Date: 1997-09-22T18:18:15+09:00 Subject: [ruby-list:4506] Re: mail address class やまだあきらです. いまだこりず(^_^;)にメールの解析用スクリプトのお話です. Thu, 18 Sep 97 16:56:40 +0900 頃の Mail-Count: 04408 Subject: [ruby-list:4408] Re: mail address class についてのお話にて 石塚圭樹 さん曰く… (石 == keiju@bc.mbn.or.jp (石塚圭樹 ) さん) >> という話は class MIME < RFC822 とかって形にしていく, とかかな. In article 04408, <199709180759.QAA03278.keiju@bc.mbn.or.jp> 石> module MIME 石> include RFC822 石> class Address 石> include MIME 石> というイメージです. この辺り, いろいろ考えてはみたのですが 結局一度実装してみなきゃどっちがいいかわからないなぁ という結論にいたり, とりあえず class のままにしています. 石> ただ, 最終的にどんな機能を実装したいかによって変わってくるとは思います 石> が... ですね. 機能としての目標はあるのですが, それが ruby 的にどうなるかと言うのを予想できないので しばしこのままの状態で続けようと思っています. 石> ただ, やまださんのは状態遷移見ながら処理を進めていますが, これだと状態 石> の数が多くなると制御し切れなくなると思います. ので, その状態になると識 石> 別したらそのcaseの中で処理していく方法の方が良いかも知れません. 石> 石> while token = tokens.shift 石> case トークン 石> when "<" 石> 一気に<...>の処理を行う 石> ... 石> end 石> end 石> 石> という感じですね. なるほど, と思ったのですがネストが許されちゃっていて 特別扱いすると逆に複雑になるかな? と思えたので この点は以前のままにしています. # コメントの処理だけわけちゃいましたが… 私がやっている程度の解析だと 状態の数がこれ以上増えると言うこともないでしょうし. ってなわけで, 前のやつはちょいと形が変わりましたが再び流してみます. またコメントをいただけるとありがたいです. とりあえず mbox 形式は考えていません. MH のフォルダ様のファイルを引数で指定して ruby RFC822.rb Mail/inbox/10? とかすると きっと動いてくれると思います. # まだエラー処理, その他はいっさいしていません. ## かなり太っちゃったなぁ… (-_-; -- やまだ あきら (akira@linux.or.jp or akira@nurs.or.jp) Linux 関連ページ begin 644 RFC822.rb.gz M'XL("/PV)C0"`U)&0S@R,BYR8@#%.FMS$U>6GZU?<=,VHQ:69,D\'`0V"-M@ M9RWPVB($;,?32&VK!TGMD5K!YK'_A>2*2@4G@3`L.,:Q&;SXP6(R.SN33&4K M4\RF9@*D=K9,IJ9J*S.UY]Q'/Z26,62K5@7R[;[G?<\Y]YQ[U1QH)F_JI6@L M&H-1MSDU4S(FMDZ$CWZ^WMXV5+FY@(!`AI)M4OJ_>J2Y]L+CWZQ9>W;M.-Y:>+W_.9 M[K[D$!&?3D(.:,49DASN[N\GF9Q6TC*67NJ2\_N)2D@L$N_H",/?:"3>WA$- M<2KI`=*`BEFT2F:>.!]!A>P25,BNN*!2^[$E(%HQ2WIZ![IJJ!#"9<&!+-4R*YVH,+(3!AZ/NN088^1HE;0B9)0 MR(AX<<;,SI`QTCTT<,3!XF"(%=_)3(%&#A-].I.O9(WB))JK'.:"AIEN0+++ MA<^H.ESQ,8*&U(M6V<]2(\B?#)P<'HR@S5QH8S54;3*DTX?0`2NGUZY^F13` MYT#HRA3!:8<6B.XK35:?,(IZEAA%CF#F\^8YI%#6,Y9A%LM<9Y"D;)0MF/`C M8DX`0.&,4=08"CYKEED(DY]73$O/1LI6"3`9)3_T\I2>,;1\F5CF61TYFB6B MY\NZBRN2M/1IJ\PMK^*R=I+16$<[^E%?;[*G=VA\J/=H[UN.9[>]K8Z,QG;' M(P`6A_^[(J/QCKUCK:'$:'FG&MT94D=+H\6+^*\4:FD#.D>.#_3T]HQ[R"&= M$3)JC;7ZH(B`?;>Z5OVN.N<7LLXZ,Q_A_MY&^M+)PW4AM!^,7M"*EI&!%>>@ MC$8>5D@K1<[E#$N/L+C@[JHR5QIS>(0:TWB9SWX6(J2S"]TAR]=\H/]8;W)H M_&1??[IWG&O12484-(<2)O"7?;,Q:65CJU49XS:PUY?;0%$5L(`28M\'V'<7 M^SZD(.]4I6R1,SIZI'"?.@7:@$B8H>QGWPGV/8K?!Y0N)$*DRUDFJ91U7PI1 MAC7"OL>46A.0[O[DP/#X\(G#3/D#"B8B$)[].:2$ M`_6V!#G9['[^)\%,`Q_V5_%'&1V-UE://SJ#8,X0)D&T"%[-V?@H4>DLQLWJT^CN!!$,;QV,H7 MR=>GG)AKOE`_&_V9:115Y:(2NM3F9>J)?$17FR\XTRZ\4%N=M"[D6D2<]B)S MP_9HEI[88I_.:C/N'59)F44%?4Y)5W2%^=Y)/2O>Y"J*KW<>*1D<8EBS.,YP MI8B@)WN2IX`JY"AOO%MX6!-KLQ1Z8 M!/)LO!?'%4XL=HGK48#])^?2XPV-ZP'2Z6>X4"FM)%XEITK^FJ2T&0'R!F@@ M!GF)59GTQQK6IP3(\8PPP#'S'?&J1\\@5NKXL72?8PL0CXL/JH"`MEU`1MLN M(*5M%Q",C<$P)/B&T!V-(LP$4MJF`3G9N`/-I$^Q\>LP!N'8>!^,03[.$P4` M$?E#7!CSO%G4W4YQ(LW7]V@JK=1GX!-%XQT(7"U/TD9!?X44?LPLP=HE"WK) MR&A%DB`GTKYV[AU.LPS8V^,G!NG5RI!`B@E"(F1/&WSM]J72+:AT^U/IAKQ2 MTO*,REZDLL??4P25E#^5E%DI6IH!PD1(!U+9ZTME4%`9]*[CSXJE$RMS"H1)41V]_0?[4^3D$-EP,R`JV6-B0F] M!&L%V\2KB)(S*Z5R:\$H0K/3UY=*H3[ITTZ`GD@'"8LQ#!#P^Z!X$/$&KLC> M1#`O@3_R!SMK=&%=.#IVNT8<",\DI8:(YS(>89[KY$--,#R<88/Y!L$+S#8@Q2W!BW"XI'>.D<>XX'Z),@WR( M,OTC'[+,-R3&;#<08ULF8164Z00?HDQOVK8*GA2L4*:WQ!CYGA)C6Z;3GJTE M"UMHQ#*P]<)L.,+V3"SJQM@4$5/"L[)94BB0F9E7"P!KGXS`R43*\B@!Z=C)+V&($=AKS.@].M72>/&\_^X*60 M/#;.P5Y([%$NP?9,CV78D]^^`?UD[)M*M* M>QL[*2B9L":)GM5GRKQ:"EX,0K44)J&#ZFCV0CS)J?@@PFJ.]V?JE6I@48O4$(H6J]$PCO;[@BJ0T<<"#03D\Q_ MN?R4WJ*+O*JD&_<>TLT[W]*G"Y_3>?H,3X^^AL3S#;U'[T,2HB&&M'034#XF ME2(V:H2NT`\YZ.K\%_2*!T04]X1N+OQP\[^V@A0]GXM:#>-,7H-HZM.UK([Q MH%E6B21RWD>,,?NA7#GS,SUCX:H813Q6J3_URNH3,&?@QF.I-_19QQ41G4GB>'BTP4;='/^;W2Y^OCRG>HS MNK'Z\>)'\W^?^[-/W]5,U%B<0!%)XOLZ8H[_PT9%Z%7ZA&[<^OR3QVOW%K\7 MT@F]@*6B;,&2#',XV3'`VOYQ<37`:$`'EM?)1'12M\IJ2`A5U*Y?Z>/_O7F_#,Z)U0GY$Q)U\YR#'%`4;HX6@RUM`'B M/_\%$%8DYX4/Z--`P-[9I#S@9="E<3?"M5_X]N'?!!10;1DGG?_D.60)-+&3 MI7%V=M9)6N+1C#8%J0D7+]`$*&+E,$X.J@YL*-!DK^J(\QK:UTYV>@!"M+0' MFO#PIQ%D)X=@)TGX`5A;1)_SFT!3(W:$<8L[9(`EF.3]ZI/+=YQM_O*R!!`< M6<0Z'B=J&R+B(8HOQRUS?+*`V4>5S(/8,@;'0J36-GRBSJ%L/.$[P;%Z3#F% MR$(J#*.1,8_!D7!)MRJEHI\YO:AUJU6/'/6!<5$`/Q[7LMF27B[7$=K*+;@- M!2MARBFM5-9M:C["KG$#O7 M'OX*W&3]\C)1^;D^MT)!.ZN/E_2I_,RXR&#-:F%&JL+%SK&T$9"6*<%C6<^S M3&#K'!Q"&A'+#$H+Y9CKILT$\]X2_,>P"3B!X$\'$\>V:$CG=E/BWI8"0MJD M'C&R-83ZBQ$N)J/H9(V2)""=/]#$$4YAX5+@Y/!<=U1AZUEQ00%[06A6GLLY@*/9O6\;NFJHH2XU'H9\K8N:\@CR8'A7I![ M^;.[U^@L9,*YZG78PKY8OSW_/^QX%2)AC5ZA5QFNU,2+:^L'FYP'G)WEDEI6 MG@L"+Q+#8OH#/3T[[BC*(\?12MO_:+7H%MAUN+R%_P+-W9+2R3J8#3>=R ML"[*Z*B".YB-D!XZ`?!R4F&3("?3'\>DUAAE(G;K)L=ZDF^3Y-D`;_X1U&PU MF$R`)N&=0@[UQ6+P-7D`.1(J&5T*OABT;MFE.TX:]VNGCQWH%Z#EVTM[)SL1'6MI=52BKEUK: M!5Q!P+7LBH+,AGS+VOI.?HP\TK+;C2Y`L.=GB'O2,(LMM+1WN MMV4]P]_N8V^96/MJYF*PK'G8UO"%F++.\T39$H\YIG*UJFY;^;:VOA:*^Z@H MK0#F MMS3<>YHOM,0OQ16FP$Y5%8;;N6MO+!8BV%1PF^W<&PNY*C-^<'%0M+\I+;/K@EY]? M_[MH+IM)DI>0A%7/D(0R,:/H>GU5##>/.$MX@N:D3]C3GLK M&%:H.4E"PM27,_9EW58ES4O7&]L`(V>6K3H,/#">JZ[6 MH4S"[%2=9$IBOT+*,T5+FZ[G@C8QK%H482'8L6YLL$.C^Y3"6K@1?TQA)\ES M7%%IB174R_SR>2RP5?U5S!KO&-F*EA?;OEOF;X21Z.;<`G*X2XE7+RRT+0T]9*!$/R7+L-<>]98E$%^AWU];G?B]^PX`_>F"_ M;<"?8`#1%3KK\7Z.YHH25P'H*KPX"CO[Q#5=N;V`)WKDIX>"I/HUK-;'M17C M`2DB#PU)QY7C9M??@[H%RL6#KWFYN=S270?61K\4TS?&^41MA+@M!,ZVL?;] M^JSKD*Y&A2ZI@L/73XXZ`7T$\>8'%FJNI7(+LJ4)W"ORTZZ@4PK3>ND37NG= M+N+-?D[Q[?$"__K;DP3=_4/#1>/9U+U2*O\*BLVSW MO\7RZA5ZES[@"7>6!>:B5Q9[3XA.5I[='-]=J/*KY6(^B^_AEH']PV\65KD-U!V M#;IY\\.%?V.'8YP"]*0!O+_D5RH.F'-!IK[[`7%?3'&"[F:8;GZR>>C8! M5<3RVM(7-N+7=`G0ZN[2^&U8H[LTUN&[[LZZS0*&\YF\+D_=.7ZTJ)^3-V>B MGYR(G@4?&C;(II-Q/L&CR'K6;)(@]_ M)5@>Z.Q23?O:P73,P$T5LJ/B[M,[3^D?A`5EE[-.GWB<`1?U_O7Y#;JY]AOZ MX=R?Z)_IO&,*V<+DG),1,6FRQMJLF^'UHDNJ_J*E3Z(;2K&6KBU^?^^AK%"% M,/1+>`3/Y#\?H`^6/\/&C?X!$BLK45?_>./7-@45?9=NBFME2+JW+W_Z5X"[ M2A_,KT)JWZ!7#X9>0@E_P8=Y:>D(+@Z;T(*^UYX0"GB2YR-O+?@*%_D@69^] M\&=D8:7-+^.Y,#7QW9@MX M[N,>>'YOM$V54/Q(%R,@%E6:QN#9`)'US+5;]'W_?9TA'$X.]^[=3>@*9)3GU1N0M]8:5P(U&"O; M@O\YEGG9"%,6"X*7X>6'^V*NO&!)]:=ZR0%9MS0+&R'=ZGW6_<-#P.('1