6行ごとの検索は?No.01222
なむnomoto さん 00/03/22 14:38
 

           なむnomotoです

 7行ごとに空改行があるデータがあります。

 8行ごと以上や、7行ごと以下の部分を検索したり
 Grepしたり、できる書き方はあるでしょうか。

 \n.+\n.+\n.+\n.+\n.+\n.+\n\n //8行目に空改行がある場合。

 これは、巧く検索してくれません。(^^;)
 

[ ]
RE:01222 6行ごとの検索は?No.01224
ひろ さん 00/03/22 17:43
 
 なむnomotoさん今日は、ひろです。
>  7行ごとに空改行があるデータがあります。
>
>  8行ごと以上や、7行ごと以下の部分を検索したり
>  Grepしたり、できる書き方はあるでしょうか。
 あの〜、具体的になむnomoto さんは何をなさりたいんでしょう? 検索に
hit した行を抽出したいだけなら、面倒臭いことを考えずに通所の grep を
やれば良いと思うのですが。

[ ]
RE:01222 6行ごとの検索は?No.01226
番頭++ さん 00/03/22 19:20
 
    gofiletop;
    if( code != 0x0D ){ insert "\n";    }   //  ファイルの先頭は改行
    gofileend;  insert "\n\n";              //  ファイルの最後は改行を二個
    gofiletop;
    searchdown "^\n.+\n.+\n.+\n.+\n.+\n.+\n.+\n.+\n\n", regular;    //  8 line
    searchdown "^\n.+\n.+\n.+\n.+\n.+\n.+\n.+\n\n", regular;    //  7 line
    searchdown "^\n.+\n.+\n.+\n.+\n.+\n.+\n\n", regular;    //  6 line


[ ]
RE:01224 6行ごとの検索は?No.01227
番頭++ さん 00/03/22 20:24
 
ファイル中のデータが 7 行ごとに、空の改行を入れてあり、
その間違いをを探すとかの処理だと思います。

いつも暇があるとコメントしますが、
手作業での間違いを探す「手続き」を作成するのも案ですが、
7 行ごとに改行を入れる「手続き」を作成するのも案です。

前者は複雑なロジックを要求します。
簡単なチェックをマクロで書いて間違いを探して、
簡単な加工マクロで、幾度もの「工程」をこなすのが楽です。好きです。

前後関係をチェックする処理は、常にデータに依存します。
決まりきった「手続き」になりにくいような気がします。
並べ替えて、合体するという考えもあります。
番号を振れば並べ替えはソートが行ってくれます。

後始末をする「手続き」を考えるよりも、
初めの「工程」を考えたほうが楽です。

改行は単なるコードです。前処理で置換して後で置き換えば元に戻ります。

仕事が DEBUG なのでいつも人の間違いを探しています。
作成した人は数分の時間軸ですが、
DUBUG は数時間、数日、それ以上の時間軸です。

Pentium 8xx の時代です。


[ ]
RE:01227 消去法No.01228
番頭++ さん 00/03/22 20:35
 
「 ... では無い物を探す 」 grep ができなければ、
「 ... であるものを消せば 」、
残りは、「 ... では無い物」が残ります。

今日はめっぱい暇な時を過ごしています。会社で。
もう帰ります。

[ ]
RE:01228 ある「工程」のあん ...No.01229
番頭++ さん 00/03/22 21:11
 
1. バックアップ

チェックしたいファイルが a1.txt で、それを a2.txt に複写します。

2. 工程 A.

ファイルの中にない文字 (コード) 例: @ を探します。
文字のある改行 ^.+\f\n を \0@ にします。
==> a3.txt でセーブします。

3. 工程 B.

ローカル grep で ^(.|\n) を探します。行番号を振ります。
==> a4.txt でセーブします。

4. 工程 C.

@ を 7 個含む行を消します。というか、改行だけの行にします。
残りは間違いです。よね。
==> a5.txt でセーブします。

5. 工程 D.

grep のファイル名を a3.txt に置換します。(工程依存)
==> a6.txt でセーブします。

6. 工程 E.

タグジャンプで修正します。<== 手作業

7. 工程 F.

@ を改行に置換します。
==> a7.txt でセーブします。

8. 確認

a2.txt と a7.txt の差分をとります。それなりのツールが必要です。

こんな感じですか ...

ほんとにもう帰ります。



[ ]
RE:01229 ある「工程」のあん ...No.01230
なむnomoto さん 00/03/22 21:36
 

                     なむnomotoです

 処理工程。読んでなるほど、そうだと思いました。
   少し智慧を磨いた方が良いかも-->自分

 しかし、相当混んだ処理工程が必要になるんですね。
 簡単な検索で解ると思ったのが間違いのようです。

 6行と空白が1セット(1ブロック)で、
 ご賢察通り、7行以上あってはイケナイのです。
 (私の説明不足で、誤解を招いてますね)
 誰かさんが作った10万行のテキストで、これの
 間違いを見つけようとしてるんです。


 マクロを有り難うございました。
 


[ ]
RE:01227 6行ごとの検索は?No.01231
なむnomoto さん 00/03/22 21:43
 

          なむmonotoです


>ファイル中のデータが 7 行ごとに、空の改行を入れてあり、
>その間違いをを探すとかの処理だと思います。

 わ、説明不足を解明いただいて申し訳ないです。
 その通りです。6行+1行空行にするためです。
 この1セットが大体14,000件弱。


>仕事が DEBUG なのでいつも人の間違いを探しています。
>作成した人は数分の時間軸ですが、
>DUBUG は数時間、数日、それ以上の時間軸です。
>
>Pentium 8xx の時代です。
>

 そうですね。10万行の入力がどれほど大変でも、
 やるしかないことですが、このデータを一気に
 変換するなんて、数秒です。
 人間の手作業にはミスが多いので、それを正すのも
 結構骨が折れるもんで、マクロなんか有り難いです。

[ ]
RE:01231 6行ごとの検索は?No.01233
山紫水明 さん 00/03/22 22:53
 
    なむnomotoさん こんばんは。

》 その通りです。6行+1行空行にするためです。
》 この1セットが大体14,000件弱。

 ということは,6行以下とか8行以上を検索して探すのが本来の目的ではなく
て,6行の後に空行を入れるように整形するのが目的だということですか?
 であれば,いったん空行を全部削除して,6行毎に空行を入れ直せばいいという
ことになりますが,そういうことでいいのですか?

 では, (^^)/~
                                        山紫水明


[ ]
RE:01233 6行ごとの検索は?No.01236
なむnomoto さん 00/03/23 14:33
 

  山紫水明さん
              なむnomotoです

>》 その通りです。6行+1行空行にするためです。
>》 この1セットが大体14,000件弱。
>
> ということは,6行以下とか8行以上を検索して探すのが本来の目的ではなく
>て,6行の後に空行を入れるように整形するのが目的だということですか?
> であれば,いったん空行を全部削除して,6行毎に空行を入れ直せばいいという
>ことになりますが,そういうことでいいのですか?

  いや、1行〜6行、8行〜10行のデータは不整なので、
  そこを探すのです。この7行以外の1ブロックを検索
  するのです。

   実際は違いますが、まあ住所録のようなものです
空行
番号
住所
氏名
誕生日やその他、出身校
男女別
趣味分類
空行
   こんなデータを整えるのです。

   不整件数は、さほど多くは無いと思いますので、検索で見つ
  けては、修正したいのです。
   マクロに多くの条件を一遍に書くと、簡単にして下さいと
  叱られまして、何回か工夫したんですが、結局は番頭++さん
  のマクロの通りで、見事に検索できました。
   # 最初に空行から始めたのが、正解のようです。さすが。
    ありがとうございました。

   空改行が2つ以上は、perlで1つに整えてしまいました。

[ ]
RE:01236 6行ごとの検索は?No.01244
ENCODINGSHIFTJIS さん 00/03/24 10:05
 
>>》 その通りです。6行+1行空行にするためです。
>>》 この1セットが大体14,000件弱。
>>
>   実際は違いますが、まあ住所録のようなものです
>空行
>番号
>住所
>氏名
>誕生日やその他、出身校
>男女別
>趣味分類
>空行
>   こんなデータを整えるのです。

データのサイズから言っても、もうベタテキストで処理するレベルじゃないです。
grep でインデックスを作っておいても自動更新されるわけじゃないし。
ベタテキストで進むのならもっとマクロの厚みを増さないと壊れてしまいます。
問い合わせ抽出、更新、印刷、バックアップ ...マクロ集を探してみましょう。

Excel や DB の心を持っているソフトの乗せたほうがいいのでは。

−−−−−−−−−−−−
一件分の高さの表示画面で
画面内をClipBoard に送るマクロでも作れば組み合わせで十分では?

__End__

[ ]
RE:01236 6行ごとの検索は?No.01249
なむnomoto さん 00/03/24 19:13
 

 ENCODINGSHIFTJIS さん
              なむnomotoです 

  # 御発言にコメントしようとすれば、ゲストモード画面が
    出て、駄目です。ここにはコメントできるんです。
    なんか変?

  仰せの通り、このデータは表計算ソフトExcelなんかで
  使うのが良いですね。
  でも、私のデータじゃない、友人のものです。
  プレーンなテキストで配布するんだそうです。

  データの並び替えは、タグを付けて(jperl)
    Excelで読み込み、好きな加工して、
  また、元に戻す(jperl)
     作業をやりました。
   友人は現在、データ修正してるらしいです。
   #Excelのデータは、3.5倍になりますね。

  そこで、7行単位の検索は解りましたが、
     # これくらいは秀丸でもできるはずと思い。

  このファイルが完成したら、誰でも、秀丸でgrepして
  前後行を抜き出して見ることができれば、便利と
  思ったのですが、これはQgrepを勧めておきました。

    何かそんなコマンドがあれば、マクロも可能なような
  気がします。    

[ ]
RE:01249 6行ごとの検索は?No.01253
きいろいまふらあ さん 00/03/24 23:53
 
脱線するかもしれませんが。

>  プレーンなテキストで配布するんだそうです。

>   #Excelのデータは、3.5倍になりますね。

csvというデータの形式はなむnomotoさんもご存知でしょうか?
カンマ区切り形式と言ったりもします。
テキストファイルである上に、データベースのデータソースとして
容易に活用できます。

[ ]
RE:01249 6行ごとの検索は?No.01255
encodingshiftjis さん 00/03/25 22:54
 
>    何かそんなコマンドがあれば、マクロも可能なような
>  気がします。

DBのデータ交換ではべたなテキストはよく使われます。
しかし、それを直接操作するのは定形的で単純なものにとどめたほうが
安全です。(ゆるゆるの文字列は捕らえがたい本性を隠し持っている。)
あるいは結果を見るだけとか。データ量の多いときは
べたなテキストをすぐDBのソフトに取り込み、そこでランダムに処理
するのが普通です。データ量がN倍に増えるのも安全や早さのコストです。
(全文検索をしようとしたらインデックスで2倍弱のデータ量になります)

1件複数行の扱いをしたいのなら何かの区切りを決めたほうがマクロは
作りやすいです。

ここらあたりはマクロというより実装設計のところだから経験をつめば
なんとかなるでしょう。

__e__
   

[ ]
RE:01253 6行ごとの検索は?No.01260
なむnomoto さん 00/03/27 15:59
 
  まふさん
           なむnomotoです

>脱線するかもしれませんが。
    :
>csvというデータの形式はなむnomotoさんもご存知でしょうか?
>カンマ区切り形式と言ったりもします。
>テキストファイルである上に、データベースのデータソースとして
>容易に活用できます。

 カンマ区切りは、本文(欧文)にカンマがあるので、使えません。
 で、タブ区切りにして、Excel読み込み
   タブ付きテキストで書き出し。
   jperlで、タブを一括削除して元の形に戻しています。
   年号のところだけが、ちょっと問題があるんですが、
   クリアできました。(^^;)

 タブ区切りの場合も、CSVと云っても良いのでしょうか?
 EXcel では「タブ付きテキスト」と表示されていますので、
 少し区別があるようです。ひょっとしたらCSVには、種々なる
 方法があるんかも知れないですが、無難そうなのがタブ付きだった
 ので、そうしたんです。


 7行本文

[ ]
RE:01255 6行ごとの検索は?No.01261
なむnomoto さん 00/03/27 16:20
 
  ENCODEINGSHIFTJISさん
               なむNOMOTOです


>DBのデータ交換ではべたなテキストはよく使われます。
>しかし、それを直接操作するのは定形的で単純なものにとどめたほうが
>安全です。(ゆるゆるの文字列は捕らえがたい本性を隠し持っている。)
>あるいは結果を見るだけとか。データ量の多いときは
>べたなテキストをすぐDBのソフトに取り込み、そこでランダムに処理
>するのが普通です。データ量がN倍に増えるのも安全や早さのコストです。
>(全文検索をしようとしたらインデックスで2倍弱のデータ量になります)
>
>1件複数行の扱いをしたいのなら何かの区切りを決めたほうがマクロは
>作りやすいです。

 DBソフトに、昔頼ったことがありましたが、だいたい腐った
 頭には、難しそうで、諦めてしまいました。
  で、専ら、秀丸エディタなんかで、見ながらやれる方にはまって
  しまってます。
 友人も、深く考えないで(考えた結果そうなったんだと思いますが)
 プレーンテキストを選んだようです。
 秀丸にはGREPがあって、簡単に引き出せることをご存じなかったか
 ら、取りあえず規則的なテキストを入力して、後でなんとかする
 計画だったようです。

 実は、DBソフトに頼ってしまうと、そのソフトを皆が入手しないと
 使えないので、海外の利用者が困ることも考慮にあるようです。


 別件ですが、私は
 10万行のGREP検索なんか作ってしまったり、123Mbのデータを
 検索するマクロを、杉浦まさきさんに作って頂いて、動いています。
 (メモリがパンクしたことは無いです。)
 現在仕上げ中のは、430Mbとか9Mbとかの検索(漢文)になります。
 すべて、秀丸エディタでできてしまうので、まあこれで良いかなんて
 決め込んでます。  

>ここらあたりはマクロというより実装設計のところだから経験をつめば
>なんとかなるでしょう。

  ううう、私は漢文なんかは強いのですが、理工系にはサッパリ
  で、経験なんてとてもとても、はるか彼方の蜃気楼のような
  感じがします。  
 #でも、良いのがあれば使って見ようかという気もないでもない(^^;)

  QGREPのようなのが、秀丸にもあれば良いのになぁと思うのは、
 私だけでは無いと思います。これで充分用が足りるんです。
 # 山紫水明さんが、何かご提示のようです。


[ ]
RE:01260 6行ごとの検索は?No.01264
きいろいまふらあ さん 00/03/27 18:09
 
まふです。

> カンマ区切りは、本文(欧文)にカンマがあるので、使えません。

csvの規格が何によって定められているか知らないのですが、
Excelでcsv形式で保存すると、カンマを含むデータはdouble quotationで括られます。
ちなみにdouble quotation自体はdouble quotation自身でエスケープされてる。
#double quotationを二つ重ねている。

ま、解決したのならなんでもいいですけど。

[ ]
RE:01264 6行ごとの検索は?No.01265
なむnomoto さん 00/03/27 19:48
 
                なむnomotoです
>csvの規格が何によって定められているか知らないのですが、
>Excelでcsv形式で保存すると、カンマを含むデータはdouble quotationで括られます。
>ちなみにdouble quotation自体はdouble quotation自身でエスケープされてる。
>#double quotationを二つ重ねている。
>
>ま、解決したのならなんでもいいですけど。

 そうなんです。それで、double quotationが邪魔になって。(^^;)
 1999. なんてのは、前の空白や後ろの"."が無くなってセーブされ、
 「なんでや!」と叫んでしまいました。タブは付いてますけど。
 これをあとで、またperlで整えるワケです。

 なんか、めんどうな作業をしてしまいました。
>ま、解決したのならなんでもいいですけど。
 取りあえず、結果オーライで間に合わせることにしました。
  (^^;)

[ ]