• ベストアンサー

テキストデータの解析

ユーザが操作したデータの解析を行っています。 データを秀丸で開き、コマンド一覧表(CSV)約1000行から 日本語名を手入力してます。 ユーザが操作したデータ(LOG)は↓のイメージです。 データ量は、10MB~1000MB(10万行~ ------------------------------ Command001 ~~~~~~(詳細) Command002 ~~~~~~(詳細) Command003 ~~~~~~(詳細) ------------------------------ 手入力しているのは、コマンド一覧表から日本語名を 一行下に追記する「//切り取り」「//コピー」などと入力 ↓がイメージです。 ------------------------------ Command001 //コピー ~~~~~~(詳細) Command002 //貼り付け ~~~~~~(詳細) Command003 //切り取り ~~~~~~(詳細) ------------------------------ 秀丸とコマンド一覧表(CSV)を使って、この作業を自動化出来ないでしょうか。 よく使うコマンドは、秀丸のキー操作を使って行っていますが どうしても漏れが出てしまい、正確な解析が出来ません。 LOGをWORDに貼り付けて、置換マクロを組んでみましたが案の定 「置換」なので、Command001が「//コピー」となってしまいます。 どなたかアドバイスお願いします。 もしくは、こんなソフトお勧めがありましたら教えて下さい

質問者が選んだベストアンサー

  • ベストアンサー
noname#144013
noname#144013
回答No.5

こんにちは。#4です。 > >前提条件 > >コマンド文字列は、行の先頭から記述されているものとします。 > の箇所で、「行の先頭」から記述されていない箇所がありました。 この内容より、コマンド文字列は、行の途中から始まる場合もあるという事と、 > CSVサンプル(ここから)>約1000行 > ------------------- > Command001,//コピー > Command002,//貼付 > Command003,//切り取り > Command004,//新規作成(ファイル) > ------------------- > CSVサンプル(ここまで) この内容より、挿入文字列には、既に"//"が含まれているという事ですので、 上記の条件を考慮して、下記のようにマクロの修正を行ってみて下さい。 これで、対応可能かと思います。 ■マクロの修正部分 注)マクロソースにコピペする際は、全角スペースをタブor半角スペースに置換して下さい。  <変更前>   //置換処理(正規表現による置換を行う)   $strSrch = "(^" + $strCmd + ".*)$";  //検索文字列   $strRepl = "\\1\n//" + $strIns;    //置換文字列   replaceallfast $strSrch, $strRepl, regular;    //置換実行  <変更後>   //置換処理(正規表現による置換を行う)   $strSrch = "(" + $strCmd + ".*)$";  //検索文字列...(※行頭を意味する"^"を削除)   $strRepl = "\\1\n" + $strIns;     //置換文字列...(※"//"を削除)   replaceallfast $strSrch, $strRepl, regular;    //置換実行 ■注意事項  ログファイルの記述で、1行に種類の違う複数のコマンドが記述してあった場合、  例えば、下記のような記述の場合、    Command001    ~~~~~~    Command002    ~~~~~~    xxxx Command003 xxxx Command001 xxxx  ←1行に違うコマンド記述が複数ある場合    ~~~~~~  マクロでの置換結果は以下のようになります。    Command001    //コピー    ~~~~~~    Command002    //貼付    ~~~~~~    xxxx Command003 xxxx Command001 xxxx    //切り取り                      ←このようにそれぞれのコマンドに対する    //コピー                         挿入文字列が付加されます。    ~~~~~~ 以上です。

shapecat02
質問者

お礼

レスありがとうございます。 掲載していただいたマクロを修正しておりました。 思ったように動かず、分からなかった部分補足いただき 本当ありがとうございます。 修正/起動確認などしていたらすでに3時過ぎ レスいただいたので、もう少し頑張りたいところですが ほっとしたところで急な眠気に襲われ今日は床につきたいと 思います。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

noname#144013
noname#144013
回答No.4

こんにちは。 今回の自動置換を行うための、秀丸エディタ用のマクロを作成してみました。 宜しければ、試してみて下さい。 ■前提条件 1)ログファイル(LOG)の形式について   コマンド文字列は、行の先頭から記述されているものとします。   (コマンド文字列の前にスペースorタブなどが入っていないものとします) 2)置換テーブルファイル(コマンド一覧表ファイル)の形式について   置換に使用する、コマンド一覧表ファイル(CSV)(※以下、置換テーブルファイルとします)   の形式は、以下のようなものとします。     '==コメント==     コマンド文字列,挿入文字列         :       :     コマンド文字列,挿入文字列   ※コマンド文字列の大文字/小文字は区別します。   ※行先頭が ' (アポストロフィ)で始まる行はコメント行とします。   ※空白行は無視します。   ※区切り文字 "," の前後には、スペースorタブを入れないものとします。 ■使い方 1)マクロファイルを保存します。   下記のマクロソースをコピペして、拡張子を .mac として適当な名前を付けて、   秀丸エディタがあるフォルダに保存して下さい。   秀丸エディタの設定で、「マクロ用フォルダ」を指定している場合は、そのフォルダ   に保存して下さい。   注)保存する前に、全角スペースをタブor半角スペースに一括置換して下さい。 2)マクロをメニューに登録します。   秀丸エディタを起動して、     メニュー: マクロ → マクロ登録   で表示された「マクロ登録」ダイアログで空いているエリアに、適当なタイトルを   付けて1)で保存したマクロファイルを登録して下さい。 3)秀丸エディタで編集元のログファイルを開いて下さい。 4)マクロを起動します。     メニュー: マクロ → 2)で登録したマクロのタイトル   をクリックしてマクロを起動します。 5)置換テーブルファイルを開きます。   ファイルオープンのダイアログが表示されますので、ここで置換テーブルファイルを   指定して開いて下さい。 6)置換実行の確認。   置換実行を確認するメッセージボックスが表示されますので、置換を実行する場合   は、「はい」をクリックして下さい。   ※これで置換が実行されます。   ※置換完了後は、『x個の置換を行いました。』というメッセージボックスが表示され    ますので、[OK]ボタンをクリックして下さい。(これでマクロが終了します) 7)置換後のログファイルを保存します。   置換後のログファイルは自動保存しませんので、必要ならば「上書き保存」などの   保存操作を行って下さい。 ■マクロソース 注)下記ソースには、インデントのため全角スペースを入れています。   ファイルに保存する際は、全角スペースをタブor半角スペースに置換して下さい。 //////↓ここから////// //================================================ //コマンド文字列の一括置換マクロ // //■置換テーブル(CSV)の形式 // コマンド文字列,挿入文字列 //     :       : // コマンド文字列,挿入文字列 // // ※コマンド文字列の大文字/小文字は区別する。 // ※行先頭が ' で始まる行はコメント行とする。 // ※空白行は無視する。 // ※区切り文字 "," の前後には、スペースorタブを //  入れないものとする。 // //■置換パターン // 検索文字列= (^{コマンド文字列}.*)$ // 置換文字列= \1\n//{挿入文字列} //================================================ //現在の秀丸の検索設定状態を保存 $sv_srchBuf = searchbuffer; #sv_srchOpt = searchoption; //編集元ファイルのファイル名取得 $edf_dir = directory;        //フォルダ名 $edf_nm1 = filename;       //フルパスのファイル名 $edf_nm2 = basename;      //ファイル名 #hh0 = hidemaruhandle(0);    //編集元ファイルのハンドルを取得 //置換テーブルファイルをオープンする $tbf_dir = directory;              //フォルダ名の初期値 $tbf_nm2 = "*.csv";              //ファイル名の初期値 $tbf_nm1 = $tbf_dir + "\\" + $tbf_nm2;  //フルパス名の初期値 readonlyopenfile $tbf_nm1;    //ファイルオープンダイアログを表示 if(result == false){         //ファイルオープン失敗時はマクロ終了   setactivehidemaru #hh0;   //編集元ファイルをアクティブにする   endmacro;            //マクロ終了 } //置換テーブルファイルのファイル名取得 $tbf_dir = directory;       //フォルダ名 $tbf_nm1 = filename;       //フルパスのファイル名 $tbf_nm2 = basename;      //ファイル名 $tbf_ftype = filetype;      //ファイルタイプ #hh1 = hidemaruhandle(0);   //置換テーブルファイルのハンドルを取得 #t_lastline = linecount2;     //行数を取得 gofiletop;              //ファイル先頭に移動 setactivehidemaru #hh0;     //編集元ファイルをアクティブにする escape;               //範囲選択を取り消し gofiletop;              //ファイル先頭に移動 //ファイルオープンで[キャンセル]の時(=ファイル名が"無題")はマクロ終了 if($tbf_ftype == "new"){   closehidemaruforced #hh1;  //置換テーブルファイルをクローズする   endmacro;            //マクロ終了 } //置換実行の確認 question "置換を実行しますか?"; if(result != yes){           //キャンセル?   closehidemaruforced #hh1;  //置換テーブルファイルをクローズする   endmacro;            //マクロ終了 } #rep_cnt = 0;          //置換個数の初期化 //置換処理(置換テーブル分を全置換するまでループ) while(1){   //置換テーブルファイルをアクティブにする   setactivehidemaru #hh1;   //置換テーブルより1行読込み   #t_lineno = lineno;          //現在行の行番号を取得   #len = linelen2;            //現在行の文字数を取得                        //現在行の1行分を取得   $strLine = gettext2(0, #t_lineno, #len, #t_lineno, 0);   $strWk1 = leftstr($strLine, 1);    //先頭1文字を取得   #pos1 = strstr($strLine, ",");    //区切り文字の検索   //空白行 or コメント行 or 区切り文字なし の場合は次行へ   if(#len<1 || $strWk1=="'" || #pos1<0){     if(#t_lineno >= #t_lastline){       break;      //最終行ならループを抜ける     }else{       golinetop2;       down;      //次行の先頭に移動       continue;    //次処理へ     }   }   //コマンド文字列、挿入文字列を取得   $strCmd = leftstr($strLine, #pos1);   $strIns = midstr($strLine, #pos1+1, #len-(#pos1+1));   //編集元ファイルをアクティブにする   setactivehidemaru #hh0;   gofiletop;        //ファイル先頭に移動   //置換処理(正規表現による置換を行う)   $strSrch = "(^" + $strCmd + ".*)$";  //検索文字列   $strRepl = "\\1\n//" + $strIns;    //置換文字列   replaceallfast $strSrch, $strRepl, regular;    //置換実行   if(result > 0){     #rep_cnt = #rep_cnt + result;    //置換個数の更新   }   //置換テーブルファイルをアクティブにする   setactivehidemaru #hh1;   //最終行だったらループを抜ける   if(#t_lineno >= #t_lastline){     break;   }   //次行の先頭に移動   golinetop2;   down; } //編集元ファイルをアクティブにする setactivehidemaru #hh0; gofiletop;        //ファイル先頭へ移動 //秀丸の検索設定状態を復元 setsearch $sv_srchBuf, #sv_srchOpt; //置換テーブルファイルをクローズする closehidemaruforced #hh1; //置換完了メッセージの表示 $msg = str(#rep_cnt) + "個の置換を行いました。"; message $msg; //マクロ終了 endmacro; //////↑ここまで////// 【補足】 1)上記のマクロは、秀丸エディタのバージョンがVer 7.00以上を想定しています。 2)置換処理で検索文字列の大文字/小文字を区別したくない場合は、ソース内の下記の行   を以下のように変更して下さい。    変更前: replaceallfast $strSrch, $strRepl, regular;    //置換実行    変更後: replaceallfast $strSrch, $strRepl, regular, nocasesense;  //置換実行 3)マクロ機能の詳細については、秀丸エディタのヘルプ(マクロヘルプ)をご覧下さい。 以上です。参考になれば幸いです。 もし、お使いの環境で上手く動作しなかった場合は、すみません。 また、目的の動作と違っていた場合は、マクロを修正してみて下さい。

shapecat02
質問者

お礼

レスおよび大変参考になるマクロまで記載して頂きありがとうございます。 >前提条件 >コマンド文字列は、行の先頭から記述されているものとします。 の箇所で、「行の先頭」から記述されていない箇所がありました。 なんとか記載いただいたマクロを確認しながら、修正していきたいと 思います。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
noname#223623
noname#223623
回答No.3

#1です。前回の回答は冗長だった。他のやりかたも考えてたので、それと関連してちょっと書きすぎました。回答とすれば#2さんの内容で必要十分です。 さて、ログの内容ですが、 > Command001の後にも文字列がある行があるので > 改行コードが入ると困る事になりました。 これは可能性として考えていましたが、サンプルではよくわからなかったので前回はふれませんでした。ログとCSVのサンプルがあればアドバイスできるかもしれないです。自己解決が難しいようなら補足してください。

shapecat02
質問者

補足

2度にわたりレス感謝です。 ログサンプル(ここから)>全角スペース無/2バイト文字無 ------------------- Command001 ~~~~~~ Command002 ~~~~~~ Command003 ~~~~~~ xxxxxx Command004 xxxxxxxx ~~~~~~ ------------------- ログサンプル(ここまで) CSVサンプル(ここから)>約1000行 ------------------- Command001,//コピー Command002,//貼付 Command003,//切り取り Command004,//新規作成(ファイル) ------------------- CSVサンプル(ここまで) こんな具合です、#4さんが、マクロを公開して頂いたので そちらを参考に確認してみたいと思います。 レスありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

>「置換」なのでCommand001が「//コピー」となってしまいます。 多分、「Command001」を「//コピー」に置換しているのではないかと思いますが、 「Command001」を「Command001+(改行コード)+//コピー」に置換すればよいのでは?

shapecat02
質問者

補足

レスありがとうございます。 Command001の実行したログに、 Command001(改行せず)~~~~詳細 がある行がありました。 置換で改行してしまうとちょっと困る事になります。 ですが、置換で改行コードを入れる事が出来るということなので 別の機会に参考にさせていただきます。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
noname#223623
noname#223623
回答No.1

例として次のlogがあったとしよう。  Copy  詳細foo  Paste  詳細bar  Cut  詳細hoge  Paste  詳細piyo CSVファイルの詳細は不明だが、仮に次のような内容だと考える。  Copy,コピー  Paste,貼り付け  Cut,切り取り Wordのメニューで「編集-置換」を使用するなら正規表現に似た記法が使える(参考URLに説明があります)。次の検索文字列と置換文字列を指定してみよう。  検索文字列: (Paste^13)  置換文字列: \1//貼り付け^13 「ワイルドカードを使用する」にチェックを入れて置換すると次のようになる。  Copy  詳細foo  Paste  //貼り付け  詳細bar  Cut  詳細hoge  Paste  //貼り付け  詳細piyo 同じ機能を使ってWordマクロを組んだのなら、少し修正するだけでいけるかもしれない。しかし、現在のマクロがどんなものか不明なので今回の回答はこれまでにしておく。 上記はWord2000/Win2000で確認しました。 補足:WSH-VBSでのやり方も考えた。というかもう作っちゃったけど、長くなるので今回は載せない。興味があったら補足してください。

参考URL:
http://www.shuiren.org/chuden/teach/word/search/replace02.htm
shapecat02
質問者

お礼

レスありがとうございます。 腕がないので、Wordの置換マクロでなんとかなりそうですが 教えていただいた内容を修正して 検索文字列>Command001 置換文字列>Command001(改行コード)//コピー となっていますが、Command001の後にも文字列がある行があるので 改行コードが入ると困る事になりました。 プログラム?のイメージとしては、LOGの検索文字列を CSVの一番左(EXCELで開くとA列)から引っ張って LOG内を検索し、検索文字列があったら、B列の内容の行末を改行し コピーする感じと言えばいいでしょうか。 それでも大変参考になりました。ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • アクセス解析のお勧め本ありませんか?

    アクセス解析のCGIを設置したのはいいのですが、ログ解析の方法がわかりません。 訪問数やページビュー数を見るだけでなく、表にまとめるなどにして、もっと詳細にデータを見られるようにしたいのです。 データ分析の方法などが載っている本やサイトを知っている方がいたら、お勧めのものを教えて頂けないでしょうか。 Google Analyticsは使用していないので、それ以外でも可能な方法が載っているものだと助かります。 どうぞよろしくお願い致します。

  • ホームページのアクセス解析ソフトについて

    アクセスログ解析ソフトを探しています。 Webサーバ(IIS)のアクセスログを解析でき、且、操作性・見た目が良いソフトを探しています。 (必要な機能としては、ページ・日付ごとに集計ができ、アクセス元の情報(ログの取り方にもよるのかな?)も集計し、一覧で見られるもの。)

  • マクロで、別ブックのデータを、既存ブックの一欄に

    マクロで以下のような操作をしたいと思っております。 どのようなコードを書けばよろしいでしょうか。ご教授ください。 【顧客データ一覧.xls】というブックのシート1に顧客データ一覧表があります。 同ブックのシート1上部にコマンドボタンを作成し、ボタン押下で以下のような操作を行いたい 1.ファイルダイアログを開いて、【顧客データひとり分.xls】というブックを選択 2.【顧客データひとり分.xls】に入力されているデータを、【顧客データ一覧.xls】の顧客データ一覧表の末尾に、コピーして追加・上書保存 顧客データひとり分はセル(3,4)に年齢が入力されている等、入力箇所は固定です。 3.顧客データひとり分.xlsは閉じて、更新された顧客データ一覧.xlsを表示させる よろしくお願いいたします。マクロは作成したことがありますが、何年もブランクがあり、かなり忘れてしまいました・・・。 と、エクセル2003以来久しぶりに操作ですので、エクセルそのものに大変戸惑っております。。。実力不足でお恥ずかしいのですが、お力をお借りできれば幸いです。

  • cgiのログをcsvとして出力、編集がうまくできません

    フリーのcgiスクリプトを利用して入力したものが表の ような形式で表示できるWEBページを作りました。 データをいくつか入力した後、ログファイルの「<>」を 「,」に置換し、csvファイルとしてエクセルで読み込み、 エクセルでデータを沢山入力してからまた逆に置換し、 cgiのログに戻そうとしたところ、エクセルで開いた 時に文字化けしています。 ログデータそのものは、メモ帳で開くと文字化けしてい ますが、Tera Padで開くとちゃんと見えます。 なんとかしてエクセルでうまく表示させ、編集すること はできないでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • エクスプローラからCSVデータを取り出す

    エクスプローラーからリストをコピーしてファイル一覧表を作成していますが、ファイル名しか利用できません。 作成日や画像の場合、撮影日付等も一緒にCSVデータに取り出したいのですが・・・ツール等ありましたら教えて下さい。

  • Windows2000/XP/2003 イベントログ解析

    Windowsイベントログをファイルに出力し、そのログを解析し、レポートに出力できるツールを探しています。何か良いツールはないでしょうか? Windowsイベントログ  出力:evt,txt,csv等(手動) 解析ツール  言語:日本語版  取込:evt,txt,csv等  レポート:情報・警告件数・エラー件数を表又は       円グラフなどで出力できるもの

  • カンマ形式のテキストファイルの置換

    テキストファイルの変換に困っています. 1,2,3,4 5,6,7,8 というデータを 1 2 3 4 5 というように置換操作でカンマ→改行にしたいと 思っています. ・秀丸の場合 ,→\n(改行文字)でできます. でもメモ帳の場合は\nのようなエスケープシーケンス は使えません メモ帳で置換後の文字列を改行にしたいのですが どのようにしたらいいでしょうか?教えてください メモ帳でだめならエクセルではできないでしょうか?

  • 企業のデータ一覧表のサイト

    上場企業(あるいはその他ももしあれば)の、売上高、資本金(あとあれば、純利益、社員数)などのデータが、一覧表になっているようなデータ(できれば、CSVなどで)は、どこかにありますでしょうか。無料、有料でも構いません。 売上高だけのランキング、資本金だけのランキングなどは、いくつか見つかりますが、表にして整理してみたいので。(ばらばらにコピーして、エクセルに貼り付けてvlookup で参照してくっつけるという方法もあるでしょうが、ちょっと手間ですし)

  • エクスプローラからcsvデータを取り出す

    エクスプローラーからリストをコピーしてファイル一覧表を作成していますが、ファイル名しか 利用できません。 作成日や画像の場合、撮影日付等も一緒にCSVデータに取り出したいのですが・・・ツール等 ありましたら教えて下さい。 ファイル数としては約400程で"全て選択”でコピーしています。 osはwin7です

  • FC2アクセス解析の保存方法について

    お世話になります。 少し前にFC2アクセス解析の表示方法が変わって、検索ワードなどが表の形であらわされるようになりました。 なのでこれまでは、検索ワード等をバックアップするときは、ドラッグしてメモ帳にコピペしていたのですが、それをするとレイアウトがめちゃくちゃになり、できません。 アクセス解析のダウンロードの仕様はあるのですが、それはログのごくごく一部だけで、あとはたくさんのデータが表になってしまったので、うまくバックアップ保存できないでいます。 画面上で表になっている、FC2のアクセス解析のデータを、できるだけ簡単に保存バックアップするにはどうすればよいでしょうか。 貴重なデータの数々だし初心者だしで、困っています。 よろしくお願いします。