In-Reply-To: [ruby-list:6825] Re: http_get.rb 古谷さん、はじめまして。 (もしかすると NIFTY の方でコメントを交わした事があるかもしれませんが) 自宅療養とは大変ですね。お大事に。 >>[ruby-list:6825] Re: http_get.rb >>From: FURUTANI Shun-ichi <sf / x.age.ne.jp> >> >> HTTPでは改行はCRLFでありますから、 >>sock.print "GET #{file} HTTP/1.0\r\n\r\n" >> としたほうがいいでしょう。 そうなんですよね。私も気にしていたのですが、あまり綺麗な感じがしないの で、とりあえず動くままで使っていました。しかし、正しくないものをほって おくわけにもいかないので、綺麗な書き方になる方法を考えてみました。 $\ のデフォルトの値を変更するというのはいかがでしょうか? puts があるので $\ はほとんど(まったく?)使われていないと思われるので、 実害はおそらく無いと思います。それで、何をしたいかというと、print は $\ の値に関係なく改行は出力しない。puts は改行ではなく、$\ を付加して 出力するようにしたいのです。 このようにして、$\ のデフォルトを "\n" にしておけば、デフォルトの動作 はいままで通りで、$\ = "\r\n" をセットすれば、puts で綺麗に CR+LF を出 力できるようになります。 さらに、それだけでは puts "aaa\n" の出力が "aaa\n\r\n" になってしまい、 使いにくいので、もし最後が $/ と同じであれば、それは削除するというので いかがでしょうか。 簡単な動作検証しかしていませんが、結構使い勝手は良さそうです。パッチを つけますが、例によって長い行は NIFTY 側で余計な改行が入ってしまいます。 見てすぐわかるところですし、1行だけなので、つないでからあてて下さい。 また、C を使ったのは本当に久しぶりなので、一応動作はしているものの、記 述のしかたはあまりきれいではないかもしれません。 *** io.c.org Sat Feb 28 06:18:07 1998 --- io.c Sat Feb 28 08:40:47 1998 *************** *** 1297,1305 **** break; } } - if (!NIL_P(ORS)) { - io_write(out, ORS); - } return Qnil; } --- 1297,1302 ---- *************** *** 1324,1330 **** /* if no argument given, print newline. */ if (argc == 0) { ! io_write(out, str_new2("\n")); return Qnil; } for (i=0; i<argc; i++) { --- 1321,1327 ---- /* if no argument given, print newline. */ if (argc == 0) { ! io_write(out, ORS); return Qnil; } for (i=0; i<argc; i++) { *************** *** 1341,1351 **** line = argv[i]; break; } line = obj_as_string(line); io_write(out, line); ! if (RSTRING(line)->ptr[RSTRING(line)->len-1] != '\n') { ! io_write(out, str_new2("\n")); ! } } return Qnil; --- 1338,1355 ---- line = argv[i]; break; } + for (j=0; j<RSTRING(RS)->len; j++) { + if (RSTRING(line)->ptr[RSTRING(line)->len - RSTRING(RS)->len + j] != RSTRING(RS)->ptr[j]) { break; } + } + if (j == RSTRING(RS)->len) { + for (j=0; j<RSTRING(RS)->len; j++) { + RSTRING(line)->len--; + } + RSTRING(line)->ptr[RSTRING(line)->len] = '\0'; + } line = obj_as_string(line); io_write(out, line); ! io_write(out, ORS); } return Qnil; *************** *** 2318,2324 **** rb_define_hooked_variable("$-F", &FS, 0, rb_str_setter); rb_define_hooked_variable("$,", &OFS, 0, rb_str_setter); ! RS = RS_default = str_new2("\n"); ORS = Qnil; rb_global_variable(&RS_default); rb_define_hooked_variable("$/", &RS, 0, rb_str_setter); rb_define_hooked_variable("$-0", &RS, 0, rb_str_setter); --- 2322,2328 ---- rb_define_hooked_variable("$-F", &FS, 0, rb_str_setter); rb_define_hooked_variable("$,", &OFS, 0, rb_str_setter); ! RS = RS_default = str_new2("\n"); ORS = str_new2("\n"); rb_global_variable(&RS_default); rb_define_hooked_variable("$/", &RS, 0, rb_str_setter); rb_define_hooked_variable("$-0", &RS, 0, rb_str_setter); 青山 和光 Wakou Aoyama <pxn11625 / niftyserve.or.jp>