勝手にしやがれ Part2.

【投稿時の注意】
パスワード入力:必須。投稿後の削除時は同じパスワードを使います。
投稿者入力:いまのところ任意。入力を省略すると「名無しさん」がデフォルトで表示されます
Eメール入力:いまのところ任意。
リンクの入力:本文中に http の文字列が含まれると投稿出来ません。URL を貼るときは h 抜きで ttp:// とするなど工夫してみて下さい

3 / 13 ツリー ←次へ | 前へ→

【66】難しいのかもしれない要望です(logsortw)m(__)m 文太 2008/09/19(金) 0:47

【115】Re:LOGSORTW ver1.25.2 文太 2008/10/06(月) 0:20
【117】Re:LOGSORTW ver1.25.2 文太 2008/10/06(月) 22:46
【118】Re:LOGSORTW ver1.25.2 文太 2008/10/07(火) 23:15
【120】Re:LOGSORTW ver1.25.2 Si 2008/10/08(水) 1:13
【123】Re:LOGSORTW ver1.25.2 文太 2008/10/08(水) 23:20
【124】Re:LOGSORTW ver1.25.2 としき 2008/10/09(木) 22:09
【125】Re:LOGSORTW ver1.25.2 文太 2008/10/10(金) 18:02
【127】Re:LOGSORTW ver1.25.2 としき 2008/10/11(土) 12:53
【128】Re:LOGSORTW ver1.25.2 文太 2008/10/11(土) 13:28
【138】Re:LOGSORTW ver1.25.2 Si 2008/10/19(日) 23:34
【139】Re:LOGSORTW ver1.25.2 としき 2008/10/20(月) 22:21
【140】Re:LOGSORTW ver1.25.2 文太 2008/10/20(月) 22:32
【142】Re:LOGSORTW ver1.25.2 としき 2008/10/20(月) 23:42
【143】Re:LOGSORTW ver1.25.2 文太 2008/10/21(火) 13:20
【147】Re:LOGSORTW ver1.25.2 としき 2008/10/21(火) 20:48
【148】Re:LOGSORTW ver1.25.2 文太 2008/10/22(水) 10:58
【146】EOF? 文太 2008/10/21(火) 14:26
【150】ファイル末改行付加 文太 2008/10/22(水) 21:18

【115】Re:LOGSORTW ver1.25.2
 文太  - 2008/10/06(月) 0:20 -

引用なし
パスワード
   Siさん

> > 「念のために」入れられるものなら。少なくとも捨てないで m(__)m
> 捨てたいです ^^;

 なるほど、なるほど、プログラムする側としては悩むわけですね。分かります
よ、僕でも。捨てましょう!

 ヘッダが2行でそのあと本文が続くというパソ通なログに固有な問題なのです
ね。誰かが何か言うかもしれませんが、僕はマクロの側でそういう状況が発生し
ないようにコーディングしておきます。細かいところまでお教えいただきありが
とうございました。そんな状況が発生しないようにするのは、「それをしておか
なくてないけない」とちゃんとインプットされていれば、訳ないことなのです。
あくまで個人的なレベルでは、ということですが。
 (手元のログではないことなのも確認済みだし…。)

 了解でーす。m(__)m


 けっこう疲れてますよね、お互い。ここまでSiさんがつき合ってくれるとは思
ってなかった。実はけっこうヘロヘロ。明日から(今日からですが)、新しい週
の始まり! ゆっくりでいいですからね。変なバグ・レポートもかつて入ってい
たわけですから。

【117】Re:LOGSORTW ver1.25.2
 文太  - 2008/10/06(月) 22:46 -

引用なし
パスワード
   Siさん

 どうでもいいメモです(すいません)。

aaaaa[EOF]
 な終端をもつファイルの最後に改行を加える方法は何がいいのかなぁ、と考え
ていて、はまりました。Vzマクロ以外です。

方法1
>lsed "p;d" file    #logos版sed、この版以外だと深くはまっちゃいます。
            #嫌なんですけど、こういうの。
方法2
>lsed "n" file        #logos版sed

方法3
>oldsed "n" file    #serow版sed

方法4
>jgawk "{print}" file    #素直、素直

方法5
>mbsed "$s/[^\n][^\n]*/&\n/" file    #Bruce.版。こんな真面目な置換は
                    #大袈裟だよ。

 そっかあ、フィルタは一般にファイル末に改行がないならそのままにしておく
ものなんですね。xtr で付かなかったのは、ちょっとびっくり。typeはさすがに
付けないだろうと思っていたのですけれど。


   ##もっといい方法ありませんか?##


 しつこいのですが、こんな場合でも複数ファイルを処理しようと思ったら、

C:\KKKK>Wild -D "lsed \"p;d\" $f >$b" t*.txt
<< 環境変数対応 Wildcard 展開プログラム Ver.1.34 >>
          Copyright (c) 1996-98 by namazu & Si
DEBUG MODE:lsed "p;d" C:\KKKK\T1.TXT >T1
DEBUG MODE:lsed "p;d" C:\KKKK\T2.TXT >T2

 とやるのが吉なわけです。いいねぇ、ワイルド。m(__)m

【118】Re:LOGSORTW ver1.25.2
 文太  - 2008/10/07(火) 23:15 -

引用なし
パスワード
   mbsed "$s/$/\n/" file        #ファイル末に改行文字が2つあっても
                #別にいいじゃん、という大らかな人向け。
                #たぶん最速。

【120】Re:LOGSORTW ver1.25.2
 Si  - 2008/10/08(水) 1:13 -

引用なし
パスワード
   ▼文太さん:
> けっこう疲れてますよね、お互い。ここまでSiさんがつき合ってくれるとは思
>ってなかった。実はけっこうヘロヘロ。明日から(今日からですが)、新しい週
>の始まり! ゆっくりでいいですからね。変なバグ・レポートもかつて入ってい
>たわけですから。

これで一時休戦かと思わせながら、、

>aaaaa[EOF]
> な終端をもつファイルの最後に改行を加える方法は何がいいのかなぁ、と考え
>ていて、はまりました。Vzマクロ以外です。

と、文太さんのタフぶりには何と言っていいものやら ^^;

ハードディスクの中ををひっくり返してやっと sed を探し出して試してみました。

>>lsed "p;d" file    #logos版sed、この版以外だと深くはまっちゃいます。

これが通りましたからうちにあるのは logos版 のようです。

SED   Ver2.42l    Jun 17 1992
1992/06/17 11:00      25,108 sed.exe

> そっかあ、フィルタは一般にファイル末に改行がないならそのままにしておく
>ものなんですね。xtr で付かなかったのは、ちょっとびっくり。typeはさすがに
>付けないだろうと思っていたのですけれど。

xtr も引っ張り出して試してみました。文太さんなら既にご存じかと思いますが、

xtr -nn -nz -o=hoge.txt foo.txt

こんな感じですかね。これなら sed の方が簡潔で良いのかな?

昔々に「MS‐DOSテキストデータ料理学」とかいう本を買い込んで awk とか sed とか触っていた時期があったのですが、結局使いこなせないまま今日に至っています ^^;

【123】Re:LOGSORTW ver1.25.2
 文太  - 2008/10/08(水) 23:20 -

引用なし
パスワード
   Siさん

>> けっこう疲れてますよね、お互い。ここまでSiさんがつき合ってくれるとは思
>>ってなかった。実はけっこうヘロヘロ。
>
>これで一時休戦かと思わせながら、、
>
>>aaaaa[EOF]
>> な終端をもつファイルの最後に改行を加える方法は何がいいのか
>
>と、文太さんのタフぶりには何と言っていいものやら ^^;

 確かに完全に相手を油断させておいてというのを狙っているとしか思えん(爆)。
 なんで作者様を油断させる必要があるんだ??? ☆\(^^;)

 ふつう、「もう忘れちゃったよ」と冷たくいなされるところなのです。m(_B_)m
 優しいお言葉にすっかりよい気持ちになってしまって、それで連続・集中砲火
的発言の数々となっております。ほんとうにすいません。深謝です。そしてマリ
アナ海溝の深みから感謝、感謝であります。m(__)m

 とにかく、どうぞゆっくりと楽しまれてください。僕に振り回されないで、と。
m(__)m 何言っているのだか、ですね。


>ハードディスクの中ををひっくり返してやっと sed を探し出して試してみました。
>>>lsed "p;d" file    #logos版sed、この版以外だと深くはまっちゃいます。
>これが通りましたからうちにあるのは logos版 のようです。
>SED   Ver2.42l    Jun 17 1992
>1992/06/17 11:00      25,108 sed.exe

 はい、それは logos 版です。serow 版からの拡張で、serow さんがオリジナ
ルから落としてしまった、 少なくはない便利なところを回復させていますので
(エンバグさせてるかも、という作者の言葉にもかかわらず)、安定していて優
秀な sed です。たとえば、コマンドを羅列させる「;」(今回使用)、スクリプ
ト先頭の unix-like な「#n」、s/LHS/RHS/n の置換時の何個目指定フラグ「n」。
この3点だけでも、 僕には serow 版に固執する意味はなくなりました(気づい
たのは、とても遅かったのですが)。
 もし総合的に dos 用の sed ということになったら、vector にある

C:\>sed --version
GNU sed version 1.18 + multi-byte extension 1.03

 がGNU拡張をもっとも最近まで追っていて、参考書どおりになりそうです。
 32ビットになると、けっこう色々と深くて…。
 (僕、sedオタクなんです。大して使えやしないのですが)

> xtr も引っ張り出して試してみました。文太さんなら既にご存じかと思いますが、
> xtr -nn -nz -o=hoge.txt foo.txt

 いえいえ、知りませんでした。調べることも出来ずじまいでいました。m(__)m
 ちゃんとそういうオプションがあるんですね。

>  nn 〔初期値:nn-〕
>  入力ファイルが改行無しで終わっている場合でも出力ファイル
> は必ず改行を付けて終わるようにします。

>  nz 〔初期値:nz-〕(No ctrl-Z)
>  出力ファイルの最後に ^Z を付けません。(通常、テキスト
> ファイル出力の場合は最後に ^Z を付けるようになっています。)

 どっかのツールのどっかのドックで、そんな処理について触れてたな、と思っ
ていたのです。XTRで外れたと思っていたので、お教えいただけて「取れた小
骨」的に本当にすっきりしました。m(__)m

> 昔々に「MS‐DOSテキストデータ料理学」とかいう本を買い込んで awk とか sed
> とか触っていた時期があったのですが、結局使いこなせないまま今日に至っています ^^;

 僕も、それ持ってます。もっとも使えるところだけ使えばいい(いざとなると
お勉強が必要になり、けっこうイライラするのですが)と開き直ってますけれど。


 因みに、XTRには以下のような関数が用意されているそうで、もうCそのも
のみたい。logsortw のソースをみて、ああ、「Cって知らなくても読める」と
か誤って思ってしまいました。「あ、XTRの関数みたいだ」とも。とはいえ、
XTRの作者、村上さんは、正規表現を使えるところまでもっていけなかった、
ここが痛いですね。

@write
入出力
 write (str)指定文字列を出力する関数

@writeln
入出力
 writeln (str)指定文字列の後に改行を付加して出力する関数

@put
入出力
 put 行バッファへの出力関数

@get
入出力
 get ()1行入力。
 get (n)指定文字数入力。

@unget
入出力
 unget (str)指定文字列を次の入力の対象とする。

【124】Re:LOGSORTW ver1.25.2
 としき WEB  - 2008/10/09(木) 22:09 -

引用なし
パスワード
   ▼文太さん:

> どうでもいいメモです(すいません)。

どうでもいいレスをつけさせていただきます。
つまらんもので引きずって申し訳ない。>Siさん

>方法4
>>jgawk "{print}" file    #素直、素直

方法4’
>jgawk "1" file    #ひねくれ

方法6
#include <stdio.h>
int main(){int c;
while((c=getchar())!=EOF)putchar(c);
if(c!='\n' && c!='\r' && c!='\l')putchar('\n');
}
/* LSI-Cで動作確認済み */

何やってんだか。


> とやるのが吉なわけです。いいねぇ、ワイルド。m(__)m

いや、全く。


【125】Re:LOGSORTW ver1.25.2
 文太  - 2008/10/10(金) 18:02 -

引用なし
パスワード
   > /* LSI-Cで動作確認済み */

 ダウト!

【127】Re:LOGSORTW ver1.25.2
 としき WEB  - 2008/10/11(土) 12:53 -

引用なし
パスワード
   ▼文太さん:

> ダウト!

うあ〜、あと1枚だったのに〜!


まじめな話、敗因は、書き込む直前に

#include "mylib.h"

を削除してしまった事だと思います。
だよなぁ。ちょっと自信なし。
ということで、修正版。

#include <stdio.h>
int main(){int c;
while((c=getchar())!=EOF)putchar(c);
if(c!='\n' && c!=0x0d && c!=0x0a)putchar('\n');
}
/* LSI-Cで動作確認済み */

今度は大丈夫、だといいなぁ。

【128】Re:LOGSORTW ver1.25.2
 文太  - 2008/10/11(土) 13:28 -

引用なし
パスワード
   Siさん(変な展開で、すいません)
としきさん、ありがと。うふ。


C:\>lcc addtail.c
lld @link.i

C:\>command.com /cdir addtail.exe

ADDTAIL EXE   6319 08-10-11  13:15
    1 個      6319 バイトのファイルがあります.
          957803520 バイトが使用可能です.

C:\>type test.txt
aaaaaaaaaaaaa
bbbbbbbbbbbbbbb
C:\>addtail test.txt
^C

C:\>addtail <test.txt
aaaaaaaaaaaaa
bbbbbbbbbbbbbbb
                ;ココだよん\(^_^)/
C:\>type OK.txt
/* LSI-Cで動作確認済み */    ;the first ever compling of C program!!!

C:\>type addtail.c
#include <stdio.h>
int main(){int c;
while((c=getchar())!=EOF)putchar(c);
if(c!='\n' && c!=0x0d && c!=0x0a)putchar('\n')    ;ここがいけない
}            ;のは分かってたのだけど、#include <ctype.h>
            ;でも駄目だった。ありがとうございました。
            ;読めます、だいたい。m(__)m

【138】Re:LOGSORTW ver1.25.2
 Si  - 2008/10/19(日) 23:34 -

引用なし
パスワード
   ▼としきさん:
>if(c!='\n' && c!=0x0d && c!=0x0a)putchar('\n');

横から失礼します。

'\n' = 0x0a

じゃなかったでしたっけ?
茶々入れですみませんm(__)m

【139】Re:LOGSORTW ver1.25.2
 としき WEB  - 2008/10/20(月) 22:21 -

引用なし
パスワード
   ▼Siさん:

>'\n' = 0x0a
>じゃなかったでしたっけ?

そうかもしれません。
実はあのコード、何も資料を確認せずに記憶だけで書いたんですよ。
一応、LSI-CでコンパイルしてDOSで実行確認は取ったんですが、
確か、DOSとUNIXとMacで改行コードが違うという話があったなぁ、
と思い出しました。一応、ソースを載せる以上、どんな環境でも
動いてほしいけど、でも、わざわざ調べるのも面倒、ということで、
安全側に倒すという意味での妥協の産物ですね。

【140】Re:LOGSORTW ver1.25.2
 文太  - 2008/10/20(月) 22:32 -

引用なし
パスワード
    何だか(日頃の)ご恩を仇でかえすみたいなのですが。

--------------------------------------
C:\>command.com /ctype t1
with \n

C:\>command.com /ctype t2
without \n
C:\>Lsed "n" t1
with \n

C:\>Lsed "n" t2
without \n

C:\>addtail <t1
with \n


C:\>addtail <t2
without \n

C:\>
--------------------------------------
 確かに何かバグってるみたいですね。やっぱ読めないから直せないのですが。
 仕様は「ファイルの最終行が改行文字で終わっていない場合に、改行文字を付
加する」です。どうでもいいことですいません。性格、悪いなぁ。(^^;ゞ
m(__)m

【142】Re:LOGSORTW ver1.25.2
 としき WEB  - 2008/10/20(月) 23:42 -

引用なし
パスワード
   > 何だか(日頃の)ご恩を仇でかえすみたいなのですが。

それは全然問題ないのですが。

> 確かに何かバグってるみたいですね。やっぱ読めないから直せないのですが。

こちらの方は大問題です。
というか、私が実験した時はそうはならなかったはず。
いや、そうならなかったような気がする。
そうならなかったんじゃないかなぁ。
何か見間違えたのかなぁ。

とりあえず、あとでもう一度実験してみます。
何を失敗したのかなぁ。
まさか、EOF?

【143】Re:LOGSORTW ver1.25.2
 文太  - 2008/10/21(火) 13:20 -

引用なし
パスワード
    少なくともEOFが原因ではないようです。Ez-な人ですので。
 EOFって、1Aなんですね。

Ez-            ;EOF コードの付加

C:\>dump t1
00000000 77 69 74 68 20 5C 6E 0D-0A           |with \n..

【146】EOF?
 文太  - 2008/10/21(火) 14:26 -

引用なし
パスワード
   > まさか、EOF?
> while((c=getchar())!=EOF)putchar(c);

 もしかして、EOFがファイルにあることが前提なのかな?
 しかし、これって、1文字ゲットしては1文字出力し、ってやってるわけですか?

【147】Re:LOGSORTW ver1.25.2
 としき WEB  - 2008/10/21(火) 20:48 -

引用なし
パスワード
   > 少なくともEOFが原因ではないようです。

違います。私のソースコードの方が間違っている、ということです。
昨夜は眠かったので正しいソースコートが提示できませんでしたが、
元々のコード、EOFが来たらループから脱出、となっているのに、
脱出直後に、来たのが「EOFではない」特定のコードであったら、
という形になっています。これでは正しく動くわけがありません。
ということで、さらに修正版。

#include <stdio.h>
int main(){
int c,c2;
while((c=getchar())!=EOF){
putchar(c);
c2=c;
}
if(c2!='\n' && c2!=0x0d && c2!=0x0a)putchar('\n');
}

一応、今回もチェックしてOKである事の確認は取ったのですが、
前回もチェックOKを出したのに実はNGだったわけで。
また夢を見ているだけかもしれません。

【148】Re:LOGSORTW ver1.25.2
 文太  - 2008/10/22(水) 10:58 -

引用なし
パスワード
   としきさん

------------------------------
C:\LSI>lcc ADDTAIL2.C
lld @link.i

C:\LSI>addtail2 <t1
with \n

C:\LSI>addtail2 <t2
without \n

------------------------------
 めでたしめでたし。

【150】ファイル末改行付加
 文太  - 2008/10/22(水) 21:18 -

引用なし
パスワード
    しつこいのですが。たぶんこれが最短。少なくともsedを使うなら。

-------------------
C:\XYZ>command.com /ctype abc
without \n
C:\XYZ>lsed "" abc   #logos版
without \n

C:\XYZ>oldsed "" abc  #serow版(たぶん他のsedでは駄目)
without \n       #bugともfeatureとも言える仕様です。

C:\XYZ>
-------------------

3 / 13 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
14,004
(SS)C-BOARD v3.8 is Free