ページ:[ ] [1] [2] [3] [4] [5] [6] [7] [8] [ ]
566
2013/4/21 (日) 11:49:12  
[566] 特定文字行の特定文字以降を削除したい。

お世話になります。
ネットの世界を探してみたんですが、見当たらなかったので、こちらで質問させて頂きます。
(探し方が悪かったらごめんなさい)

例:/ABC/DEFGHIJKLM/OPQRSTU.A

2万行ある中から、上記の先頭4文字「ABC/」該当する行の最後の
「.A」のみ削除したいのですが、マクロで対応可能でしょうか?

すみませんが、どなたかご存知の方がいらっしゃいましたら、お教え下さい。
よろしくお願いします。
さいとう
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0


2013/4/21 (日) 16:59:25  
[567] Re:特定文字行の特定文字以降を削除したい。

▼ さいとうさん
> 例:/ABC/DEFGHIJKLM/OPQRSTU.A
>
> 2万行ある中から、上記の先頭4文字「ABC/」該当する行の最後の
> 「.A」のみ削除したいのですが、マクロで対応可能でしょうか?


マクロ関数のS_ReplaceAll()を使えば実現可能と思います。
http://www.geocities.jp/maru3128/SakuraMacro/reference/find/S_ReplaceAll.html
novice
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0


2013/4/21 (日) 19:33:21  
[568] Re2:特定文字行の特定文字以降を削除したい。

▼ noviceさん
> ▼ さいとうさん
> > 例:/ABC/DEFGHIJKLM/OPQRSTU.A
> >
> > 2万行ある中から、上記の先頭4文字「ABC/」該当する行の最後の
> > 「.A」のみ削除したいのですが、マクロで対応可能でしょうか?
>
> マクロ関数のS_ReplaceAll()を使えば実現可能と思います。
> http://www.geocities.jp/maru3128/SakuraMacro/reference/find/S_ReplaceAll.html


早速のレス有り難うございます。
確認してみます。
さいとう
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0


2013/4/21 (日) 20:38:30  
[569] Re3:特定文字行の特定文字以降を削除したい。

正規表現の置換で、
置換前:^(/ABC/.+)\.A
置換後:$1
と書くだけでできそうな気がします。
マクロで書くところの
S_ReplaceAll('^(/ABC/.+)\\.A', '$1', 38);
です。
もか
INCM1.23a

562
2012/10/17 (水) 09:36:25  
[562] 外部コマンド実行後のウィンドウを抑止したい。

S_ExecCommand('COPY A.TXT B.TXT', 0); // 外部コマンド実行
にて、マクロを実行すると、「コピーが終了しました」の
ウィンドウのメッセージがでますが、
この、ウィンドウを出ない様にしたいのですが、
何か良い方法はありますでしょうか?
よろしくお願い致します。
TAM2
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)


2013/4/17 (水) 04:48:59  
[564] Re:外部コマンド実行後のウィンドウを抑止したい。

wshマクロで
1、Scripting.FileSystemObjectのCopyFile
2、WScript.ShellのExec
などをつかうというのはどうでしょう?
あかま
Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31

558
2012/8/8 (水) 21:08:09  
[558] 編集中のファイルパスを遡ってGrep

マクロ初心者です。
次のようなマクロを作成したいのですが・・

編集中のファイルパスを遡ってGrepしたい。
<例>
D:\project\oooo\abc.c を編集中にカーソル上の単語を
@"D:\"
A"D:\project"
を対象にGrepしたいのです。
@Aは別マクロでキーに割り当てます。
対象ファイルは"*.c *.h *.cpp"

どなたかアドバイスをお願いします
つんつく
Mozilla/5.0 (Windows NT 6.1; rv:12.3) Gecko/20120717 Firefox/12.3 PaleMoon/12.3


2012/8/10 (金) 00:13:17  
[559] Re:編集中のファイルパスを遡ってGrep

<400>相対パスにある同名のCもしくはHファイルを..
を参考に作成してみました(初マクロ)

// カーソル語をルート直下SubDirでGrep
// TAB=4
// 実行には PPA.DLL が必須です。sakura.exe と同じフォルダに ppa.dll を入れておいてください。
// マクロファイルの拡張子は .PPA でなくてはなりません。

var                // 変数を確保する場所
        NewPath:String;
        FullPath:String;
        PDir,Dir,Fname,Ext:String;
        pt:Integer;                // 整数数値変数
        NL:String;
        CurWord:String;
begin        // ここより処理内容        //{
        // ↓改行を用意
        NL := '
';
        FullPath := S_GetFilename();        // 編集中のファイル名を取得する
        CurWord := S_ExpandParameter('$C');        //

        // フルパスファイル名(FullPath)をディレクトリ(Dir)とファイル名(Fname)に分離する。
        Fname := FullPath;
        Dir := '';
        repeat        //{
                pt := Pos( '\' , Fname );
                if( pt > 0 ) then        begin
                        Dir   := Dir + Copy  ( Fname , 1 , pt );
                        Fname :=       Delete( Fname , 1 , pt );
                end;
        until ( pt <= 0 );        //}

        // ディレクトリ(Dir)を親ディレクトリ(PDir)とディレクトリ(Dir)に分離する。
        if ( Length(Dir) > 3 )        then        Dir := Delete(Dir,Length(Dir),1);
        PDir := '';
        repeat        //{
                pt := Pos( '\' , Dir );
                if( pt > 0 ) then        begin
                        PDir := PDir + Copy  ( Dir , 1 , pt );
                        Dir  :=        Delete( Dir , 1 , pt );
                end;
        until ( pt <= 0 );        //}

        NewPath := PDir ;

//         // ↓for デバッグ
//         MessageBox(
//         '[' + NewPath                + ']' + NL +
//         '[' + FullPath                + ']' + NL +
//         '[' + PDir                        + ']' + NL +
//         '[' + Dir                        + ']' + NL +
//         '[' + Fname                        + ']' + NL +
//         '' , '確認' , 0 );

        // NewPath が空で無ければ開く
        if (NewPath <> '')        then        S_Grep(CurWord,'*.cpp;*.c;*.h',NewPath,1);
end;
//}
つんつく
Mozilla/5.0 (Windows NT 6.1; rv:12.3) Gecko/20120717 Firefox/12.3 PaleMoon/12.3


2012/8/10 (金) 21:29:10  
[560] Re2:編集中のファイルパスを遡ってGrep

これじゃダメだってことが判った。

家のWin7じゃOKだけど会社のXPじゃダメ。
なんだろう?
♂つくん♂
Mozilla/5.0 (Windows NT 6.1; rv:12.3) Gecko/20120717 Firefox/12.3 PaleMoon/12.3


2012/8/13 (月) 00:25:41  
[561] Re3:編集中のファイルパスを遡ってGrep

// カーソル語をルート直下SubDirでGrep
// GrepSubDirCurWord.ppa

// 実行には PPA.DLL が必須です。sakura.exe と同じフォルダに ppa.dll を入れておいてください。
// マクロファイルの拡張子は .PPA でなくてはなりません。

var                // 変数を確保する場所
        NewPath:String;
        FullPath:String;
        PDir,Dir,Fname,Ext:String;
        pt:Integer;                // 整数数値変数
        NL:String;
        CurWord:String;
        Cnt:Integer;                // 整数数値変数
begin        // ここより処理内容        //{
        // ↓改行を用意
        NL := '
';
        FullPath := S_GetFilename();        // 編集中のファイル名を取得する
        CurWord := S_ExpandParameter('$C');        //

        // フルパスファイル名(FullPath)をディレクトリ(Dir)とファイル名(Fname)に分離する。
        Fname := FullPath;
        Dir := '';
        repeat        //{
                pt := Pos( '\' , Fname );        //'
                if( pt > 0 ) then        begin
                        Dir   := Dir + Copy  ( Fname , 1 , pt );
                        Fname :=       Delete( Fname , 1 , pt );
                end;
        until ( pt <= 0 );        //}

        // ディレクトリ(Dir)を親ディレクトリ(PDir)とディレクトリ(Dir)に分離する。
        if ( Length(Dir) > 3 )        then        Dir := Delete(Dir,Length(Dir),1);
        PDir := '';
        Cnt := 0;
        repeat        //{
                pt := Pos( '\' , Dir );                //'
                if( pt > 0 ) then        begin
                        PDir := PDir + Copy  ( Dir , 1 , pt );
                        Dir  :=        Delete( Dir , 1 , pt );
                         Cnt := Cnt + 1;
                         if ( Cnt > 1 ) then break;
                 end;
        until ( pt <= 0 );        //}

        NewPath := PDir ;

         // ↓for デバッグ
//  MessageBox(
//  '[' + NewPath                + ']' + NL +
//  '[' + FullPath                + ']' + NL +
//  '[' + PDir                        + ']' + NL +
//  '[' + Dir                        + ']' + NL +
//  '[' + Fname                        + ']' + NL +
//  '' , '確認.end' , 0 );

        // NewPath が空で無ければ開く
        if ( Length(CurWord) > 1 )        then
                if (NewPath <> '')        then        S_Grep(CurWord,'*.cpp;*.c;*.h',NewPath,1);
        end;
end;
//}
♂つくん♂
Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3

557
2012/5/20 (日) 21:43:47  
[557] -

-
管理者削除
Mozilla/5.0 (Windows NT 5.1; rv:6.0.1) Gecko/20100101 Firefox/6.0.1

552
2012/4/7 (土) 03:03:24  
[552] ファイルの先頭から現在位置まで削除するマクロ

ファイルの先頭から現在位置まで削除するマクロ
をさがしています。よろしくお願いします。
ろろ
Mozilla/4.7 [ja] (Win95; U)


2012/4/9 (月) 00:05:41  
[553] Re:ファイルの先頭から現在位置まで削除するマクロ

▼ ろろさん
S_GoFileTop_Sel(0);        // (選択)ファイルの先頭に移動
S_Delete(0);        // 削除

マクロのタイプはmacです。
コヨ−テ
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)


2012/4/11 (水) 00:39:03  
[554] Re2:ファイルの先頭から現在位置まで削除するマクロ

▼ コヨ−テさん
できました。ありがとうございました。
現在位置からファイルの最後まで削除するマクロもできました。
S_GoFileEnd_Sel(0); // (選択)ファイルの最後に移動
S_Delete(0);        // 削除
マクロのタイプはmacです。
ろろ
Mozilla/4.7 [ja] (Win95; U)


2012/4/21 (土) 11:29:54  
[555] 「キーマクロの記録」を活用

蛇足で申し訳ありませんが。

(1) メニューから
   ツール → キーマクロの記録開始
(2) メニューから
   編集 → 選択 → (選択)ファイルの先頭に移動
(3) Delete キー押下
(4) メニューから
   ツール → キーマクロの記録終了&保存
(5) 保存したマクロファイルを開く
   おめでとう!

さらに全然関係ない、チラシの裏の独り言ですが、
ユニコード版になって、保存されるマクロファイルの文字コードが UTF-8 になったのですね。
うーん。
昔の資産が全てSJISで書かれていて、今のところ問題なく使えていますが、気持ち悪いから UTF-8 にした方が良いのかなあ。
gis_dur
Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko/20100101 Firefox/11.0


2012/4/22 (日) 11:22:38  
[556] Re:「キーマクロの記録」を活用 範囲選択開始もありました

▼ gis_durさん
ありがとうございます。
//キーボードマクロのファイル
S_BeginSelect(0);        // 範囲選択開始
S_GoFileTop(0);        // ファイルの先頭に移動
S_Delete(0);        // 削除
ろろ
Mozilla/4.7 [ja] (Win95; U)

546
2012/2/4 (土) 11:21:02  
[546] 直前の閉じていない HTML/XML タグを閉じる

コツコツバージョンアップし続けていたものをリリースします。
今も需要あるかなあ?

/**********************************************************
**  Close Last Tag 3.0                                   **
***********************************************************
**  A "Sakura-Editor Macro" using WSH 5.6                **
**  For sakura.exe ver.1.6.2.0 and over                  **
**                               zlib/libpng ライセンス  **
**                      Copyright (C) 2004-2012 gis_dur  **
***********************************************************
**【動作】                                               **
**  カーソル位置より前にある HTML/XML タグを             **
**  ファイル先頭に向かって検索し、                       **
**  1. 終了タグのない開始タグ                            **
**  2. 閉じていないHTMLコメント        <!--      -->     **
**  3. 閉じていないCDATAブロック       <![CDATA[ ]]>     **
**  4. 閉じていないJSPスクリプトレット <%        %>      **
**  5. 閉じていないJSPコメント         <%--      --%>    **
**  がある場合、対応する終了タグを挿入します。           **
**  コメントタグ内は無視します。                         **
**********************************************************/

// サクラエディタ unicode 版の場合は true にする
var UNICODE_VER = true;
// xml モード(大文字・小文字を区別する)
var XML_MODE = false;
// 挿入した閉じタグの後ろにカーソルを移動するかどうか
var MOVE_CURSOR = true;
// 閉じタグを省略可能な要素名
var NO_CLOSE_TAG = "," +
[
  "area", "base", "basefont", "bgsound", "br",
  "col", "embed", "frame", "hr", "img",
  "input", "isindex", "keygen", "link", "meta",
  "nextid", "param", "spacer", "wbr"
].join(",") + ",";

/*********************************************************/

// シェル
if (typeof(Shell) == "undefined") {
  Shell = new ActiveXObject("WScript.Shell");
}

// 文字列拡張
if (typeof(String.prototype.is_wide) == "undefined") {
  String.prototype.is_wide = function() {
    if (UNICODE_VER) return false;
    if (this.length == 0) return false;
    var c = (this.length == 1) ? this : this.charAt(0);
    return (!c.match(/[ア-ンァィゥェォッャュョ゛゜ー、。「」・]/) && escape(c).length >= 4);
  };
}

(function() {
  if (!XML_MODE) {
    NO_CLOSE_TAG = NO_CLOSE_TAG.toUpperCase();
  }
  // タグを表す正規表現
  var TAG_CHARS = "s!\"#$%&\'()=~|^\\`{+*}<>?@[;],/";
  (function(){
    var tmp = "";
    for (var i=0; i<TAG_CHARS.length; i++) {
      tmp += "\\"+TAG_CHARS.charAt(i);
    }
    TAG_CHARS = "[^"+tmp+"]+";
  })();
  var TAGS_EXPRESSION = new RegExp();
  TAGS_EXPRESSION.compile("<!--|-->|<!\\[CDATA\\[|\\]\\]>|<%--|--%>|<%|%>|<"+TAG_CHARS+"([^>]*/>)?|<\\/"+TAG_CHARS+"", "g");
 
  // データ
  var stack = new Array();
  var ins_text = "";
  var err_text = "";
 
  // ステート
  var is_comment = false;
  var is_cdata = false;
  var is_jsp_comment = false;
  var is_jsp = false;
  var is_error = false;
 
  // テキストをすべて取得
  Editor.CancelMode(0);
  var cursorX = Number(Editor.ExpandParameter('$x')) - 1;
  var cursorY = Number(Editor.ExpandParameter('$y')) - 1;
  Editor.SelectAll(0);
  var all_text = Editor.GetSelectedString(0);
  Editor.CancelMode(0);
 
  // 改行を統一
  all_text = all_text.replace(/\r\n|\r|\n/g, "\n");
  var all_lines = all_text.split("\n");
  var num_lines = all_lines.length;
 
  // カーソル以前のテキストをすべて取得
  var tmp_text = all_lines[cursorY];
  if (tmp_text == null) {
    tmp_text = "";
  }
  if (num_lines-(cursorY+1) > 0) {
    all_lines.splice(cursorY+1, num_lines-(cursorY+1));
  }
  for (var i=0; i<cursorX; i++) {
    if (tmp_text.charAt(i).is_wide()) {
      cursorX--;
    }
  }
  all_lines[cursorY] = tmp_text.substring(0, cursorX);
 
  // タグを取得
  var all_tags = all_lines.join(" ").match(TAGS_EXPRESSION);
  var num_tags = (all_tags == null)? 0: all_tags.length;
 
  // 直前の開始タグを検索
  for (var i=num_tags-1; i>=0; i--) {
    // タグ文字列取得
    var now_text = all_tags[i];
    if (!XML_MODE) {
      now_text = now_text.toUpperCase();
    }
 
    // 特殊なステートにある場合
    if (is_comment) {
      if (now_text == "<!--") {
        is_comment = false;
      }
      continue;
    }
    else if (is_cdata) {
      if (now_text == "<![CDATA[") {
        is_cdata = false;
      }
      continue;
    }
    else if (is_jsp_comment) {
      if (now_text == "<%--") {
        is_jsp_comment = false;
      }
      continue;
    }
    else if (is_jsp) {
      if (now_text == "<%") {
        is_jsp = false;
      }
      continue;
    }
 
    // 特殊なステートに遷移する場合
    if (now_text == "-->") {
      is_comment = true;
      continue;
    }
    else if (now_text == "<!--") {
      ins_text = "-->";
      break;
    }
    else if (now_text == "]]>") {
      is_cdata = true;
      continue;
    }
    else if (now_text == "<![CDATA[") {
      ins_text = "]]>";
      break;
    }
    else if (now_text == "--%>") {
      is_jsp_comment = true;
      continue;
    }
    else if (now_text == "<%--") {
      ins_text = "--%>";
      break;
    }
    else if (now_text == "%>") {
      is_jsp = true;
      continue;
    }
    else if (now_text == "<%") {
      ins_text = "%>";
      break;
    }
    // 閉じタグ不要
    else if (now_text.indexOf("/>") != -1) {
      continue;
    }
    // 閉じタグのスタックに追加
    else if (now_text.indexOf("</") == 0) {
      now_text = now_text.substring(2);
      stack.push(now_text);
      continue;
    }
 
    // 要素名取得
    now_text = now_text.substring(1);
 
    // 省略可能なタグの場合
    if (NO_CLOSE_TAG.indexOf(","+now_text+",") != -1) {
      if (stack.length == 0) {
        continue;
      }
      else {
        tmp_text = stack.pop();
        if (now_text != tmp_text) {
          stack.push(tmp_text);
        }
        continue;
      }
    }
    // 通常のタグの場合
    else {
      if (stack.length == 0) {
        ins_text = "</" + all_tags[i].substring(1) + ">";
        break;
      }
      else {
        tmp_text = stack.pop();
        if (now_text != tmp_text) {
          is_error = true;
          err_text += "タグの包含関係が不正です。\r\n";
          err_text += "<"+now_text+"> ... ... </"+tmp_text+">\r\n";
          stack = new Array();
          break;
        }
      }
    }
  }
 
  // コメント中
  if (is_comment) {
    is_error = true;
    err_text += "コメントの開閉関係が不正です。\r\n";
  }
  // CDATA 中
  else if (is_cdata) {
    is_error = true;
    err_text += "CDATA ブロックの開閉関係が不正です。\r\n";
  }
  // JSP コメント中
  else if (is_jsp_comment) {
    is_error = true;
    err_text += "JSP コメントの開閉関係が不正です。\r\n";
  }
  // JSP 中
  else if (is_jsp) {
    is_error = true;
    err_text += "JSP スクリプトレットの開閉関係が不正です。\r\n";
  }
  // スタックに終了タグあり
  else if (stack.length > 0) {
    is_error = true;
    err_text += "開始タグのない終了タグが見つかりました。\r\n";
    for (var i=0; i<stack.length; i++) {
      err_text += "<"+stack[i]+">\r\n";
    }
  }
 
  // エラーダイアログ表示
  if (is_error) {
    Shell.Popup(err_text, 0, "文法エラー", 0);
    return;
  }
 
  // 終了タグの挿入
  Editor.InsText(ins_text);
 
  // カーソルを動かさない場合は、元の位置に戻す
  if (!MOVE_CURSOR) {
    for (var i=0; i<ins_text.length; i++) {
      Editor.Left(0);
    }
  }
})();
gis_dur
Mozilla/5.0 (Windows NT 5.1; rv:10.0) Gecko/20100101 Firefox/10.0


2012/2/4 (土) 11:30:53  
[547] 要手動修正

UNICODE版サクラエディタをご利用の場合は修正不要です。
ANSI版サクラエディタをご利用の場合は、以下の行を手動で修正する必要があります。

22行目
var UNICODE_VER = true;

var UNICODE_VER = false;

49行目
return (!c.match(/[ア-ンァィゥェォッャュョ゛゜ー、。「」・]/) && escape(c).length >= 4);

ア ン ァ ィ ゥ (中略) 「 」 ・ までを半角カナにする
※サクラエディタで行全体を選択して、メニューから「変換」「全角カタカナ→半角カタカナ」を実行すると楽です。
gis_dur
Mozilla/5.0 (Windows NT 5.1; rv:10.0) Gecko/20100101 Firefox/10.0


2012/2/4 (土) 16:22:00  
[549] Re:直前の閉じていない HTML/XML タグを閉じる

gis_durさん、待ってました!需要あります!

早速設定してみました。使ってみたところ、
--
[Line 49] 文字セットの範囲が不正です。
--
というエラーが出てしまいます。

サクラエディタのバージョンは2.0.3.0。
49行目の修正はUNICODE版なので必要はないと思います。

よろしくお願いします。

▼ gis_durさん
> コツコツバージョンアップし続けていたものをリリースします。
> 今も需要あるかなあ?
> 
> /**********************************************************
> **  Close Last Tag 3.0                                   **
> ***********************************************************
> **  A "Sakura-Editor Macro" using WSH 5.6                **
> **  For sakura.exe ver.1.6.2.0 and over                  **
> **                               zlib/libpng ライセンス  **
> **                      Copyright (C) 2004-2012 gis_dur  **
> ***********************************************************
> **【動作】                                               **
> **  カーソル位置より前にある HTML/XML タグを             **
> **  ファイル先頭に向かって検索し、                       **
> **  1. 終了タグのない開始タグ                            **
> **  2. 閉じていないHTMLコメント        <!--      -->     **
> **  3. 閉じていないCDATAブロック       <![CDATA[ ]]>     **
> **  4. 閉じていないJSPスクリプトレット <%        %>      **
> **  5. 閉じていないJSPコメント         <%--      --%>    **
> **  がある場合、対応する終了タグを挿入します。           **
> **  コメントタグ内は無視します。                         **
> **********************************************************/
> 
> // サクラエディタ unicode 版の場合は true にする
> var UNICODE_VER = true;
> // xml モード(大文字・小文字を区別する)
> var XML_MODE = false;
> // 挿入した閉じタグの後ろにカーソルを移動するかどうか
> var MOVE_CURSOR = true;
> // 閉じタグを省略可能な要素名
> var NO_CLOSE_TAG = "," +
> [
>   "area", "base", "basefont", "bgsound", "br",
>   "col", "embed", "frame", "hr", "img",
>   "input", "isindex", "keygen", "link", "meta",
>   "nextid", "param", "spacer", "wbr"
> ].join(",") + ",";
> 
> /*********************************************************/
> 
> // シェル
> if (typeof(Shell) == "undefined") {
>   Shell = new ActiveXObject("WScript.Shell");
> }
> 
> // 文字列拡張
> if (typeof(String.prototype.is_wide) == "undefined") {
>   String.prototype.is_wide = function() {
>     if (UNICODE_VER) return false;
>     if (this.length == 0) return false;
>     var c = (this.length == 1) ? this : this.charAt(0);
>     return (!c.match(/[ア-ンァィゥェォッャュョ゛゜ー、。「」・]/) && escape(c).length >= 4);
>   };
> }
> 
> (function() {
>   if (!XML_MODE) {
>     NO_CLOSE_TAG = NO_CLOSE_TAG.toUpperCase();
>   }
>   // タグを表す正規表現
>   var TAG_CHARS = "s!\"#$%&\'()=~|^\\`{+*}<>?@[;],/";
>   (function(){
>     var tmp = "";
>     for (var i=0; i<TAG_CHARS.length; i++) {
>       tmp += "\\"+TAG_CHARS.charAt(i);
>     }
>     TAG_CHARS = "[^"+tmp+"]+";
>   })();
>   var TAGS_EXPRESSION = new RegExp();
>   TAGS_EXPRESSION.compile("<!--|-->|<!\\[CDATA\\[|\\]\\]>|<%--|--%>|<%|%>|<"+TAG_CHARS+"([^>]*/>)?|<\\/"+TAG_CHARS+"", "g");
> 
>   // データ
>   var stack = new Array();
>   var ins_text = "";
>   var err_text = "";
> 
>   // ステート
>   var is_comment = false;
>   var is_cdata = false;
>   var is_jsp_comment = false;
>   var is_jsp = false;
>   var is_error = false;
> 
>   // テキストをすべて取得
>   Editor.CancelMode(0);
>   var cursorX = Number(Editor.ExpandParameter('$x')) - 1;
>   var cursorY = Number(Editor.ExpandParameter('$y')) - 1;
>   Editor.SelectAll(0);
>   var all_text = Editor.GetSelectedString(0);
>   Editor.CancelMode(0);
> 
>   // 改行を統一
>   all_text = all_text.replace(/\r\n|\r|\n/g, "\n");
>   var all_lines = all_text.split("\n");
>   var num_lines = all_lines.length;
> 
>   // カーソル以前のテキストをすべて取得
>   var tmp_text = all_lines[cursorY];
>   if (tmp_text == null) {
>     tmp_text = "";
>   }
>   if (num_lines-(cursorY+1) > 0) {
>     all_lines.splice(cursorY+1, num_lines-(cursorY+1));
>   }
>   for (var i=0; i<cursorX; i++) {
>     if (tmp_text.charAt(i).is_wide()) {
>       cursorX--;
>     }
>   }
>   all_lines[cursorY] = tmp_text.substring(0, cursorX);
> 
>   // タグを取得
>   var all_tags = all_lines.join(" ").match(TAGS_EXPRESSION);
>   var num_tags = (all_tags == null)? 0: all_tags.length;
> 
>   // 直前の開始タグを検索
>   for (var i=num_tags-1; i>=0; i--) {
>     // タグ文字列取得
>     var now_text = all_tags[i];
>     if (!XML_MODE) {
>       now_text = now_text.toUpperCase();
>     }
> 
>     // 特殊なステートにある場合
>     if (is_comment) {
>       if (now_text == "<!--") {
>         is_comment = false;
>       }
>       continue;
>     }
>     else if (is_cdata) {
>       if (now_text == "<![CDATA[") {
>         is_cdata = false;
>       }
>       continue;
>     }
>     else if (is_jsp_comment) {
>       if (now_text == "<%--") {
>         is_jsp_comment = false;
>       }
>       continue;
>     }
>     else if (is_jsp) {
>       if (now_text == "<%") {
>         is_jsp = false;
>       }
>       continue;
>     }
> 
>     // 特殊なステートに遷移する場合
>     if (now_text == "-->") {
>       is_comment = true;
>       continue;
>     }
>     else if (now_text == "<!--") {
>       ins_text = "-->";
>       break;
>     }
>     else if (now_text == "]]>") {
>       is_cdata = true;
>       continue;
>     }
>     else if (now_text == "<![CDATA[") {
>       ins_text = "]]>";
>       break;
>     }
>     else if (now_text == "--%>") {
>       is_jsp_comment = true;
>       continue;
>     }
>     else if (now_text == "<%--") {
>       ins_text = "--%>";
>       break;
>     }
>     else if (now_text == "%>") {
>       is_jsp = true;
>       continue;
>     }
>     else if (now_text == "<%") {
>       ins_text = "%>";
>       break;
>     }
>     // 閉じタグ不要
>     else if (now_text.indexOf("/>") != -1) {
>       continue;
>     }
>     // 閉じタグのスタックに追加
>     else if (now_text.indexOf("</") == 0) {
>       now_text = now_text.substring(2);
>       stack.push(now_text);
>       continue;
>     }
> 
>     // 要素名取得
>     now_text = now_text.substring(1);
> 
>     // 省略可能なタグの場合
>     if (NO_CLOSE_TAG.indexOf(","+now_text+",") != -1) {
>       if (stack.length == 0) {
>         continue;
>       }
>       else {
>         tmp_text = stack.pop();
>         if (now_text != tmp_text) {
>           stack.push(tmp_text);
>         }
>         continue;
>       }
>     }
>     // 通常のタグの場合
>     else {
>       if (stack.length == 0) {
>         ins_text = "</" + all_tags[i].substring(1) + ">";
>         break;
>       }
>       else {
>         tmp_text = stack.pop();
>         if (now_text != tmp_text) {
>           is_error = true;
>           err_text += "タグの包含関係が不正です。\r\n";
>           err_text += "<"+now_text+"> ... ... </"+tmp_text+">\r\n";
>           stack = new Array();
>           break;
>         }
>       }
>     }
>   }
> 
>   // コメント中
>   if (is_comment) {
>     is_error = true;
>     err_text += "コメントの開閉関係が不正です。\r\n";
>   }
>   // CDATA 中
>   else if (is_cdata) {
>     is_error = true;
>     err_text += "CDATA ブロックの開閉関係が不正です。\r\n";
>   }
>   // JSP コメント中
>   else if (is_jsp_comment) {
>     is_error = true;
>     err_text += "JSP コメントの開閉関係が不正です。\r\n";
>   }
>   // JSP 中
>   else if (is_jsp) {
>     is_error = true;
>     err_text += "JSP スクリプトレットの開閉関係が不正です。\r\n";
>   }
>   // スタックに終了タグあり
>   else if (stack.length > 0) {
>     is_error = true;
>     err_text += "開始タグのない終了タグが見つかりました。\r\n";
>     for (var i=0; i<stack.length; i++) {
>       err_text += "<"+stack[i]+">\r\n";
>     }
>   }
> 
>   // エラーダイアログ表示
>   if (is_error) {
>     Shell.Popup(err_text, 0, "文法エラー", 0);
>     return;
>   }
> 
>   // 終了タグの挿入
>   Editor.InsText(ins_text);
> 
>   // カーソルを動かさない場合は、元の位置に戻す
>   if (!MOVE_CURSOR) {
>     for (var i=0; i<ins_text.length; i++) {
>       Editor.Left(0);
>     }
>   }
> })();
pst11841
Mozilla/5.0 (Windows NT 6.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1


2012/3/18 (日) 12:56:22  
[550] Re2:直前の閉じていない HTML/XML タグを閉じる

返事が遅くなってすみません。

確認したところ、マクロファイルを UTF-8 で保存すると同じ現象が起きました。
SJIS で保存すると解消しませんか。


▼ pst11841さん
> gis_durさん、待ってました!需要あります!
> 
> 早速設定してみました。使ってみたところ、
> --
> [Line 49] 文字セットの範囲が不正です。
> --
> というエラーが出てしまいます。
> 
> サクラエディタのバージョンは2.0.3.0。
> 49行目の修正はUNICODE版なので必要はないと思います。
> 
> よろしくお願いします。
gis_dur
Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2


2012/3/18 (日) 20:08:25  
[551] Re3:直前の閉じていない HTML/XML タグを閉じる

pst11841 です。ご対応ありがとうございます。
Shift-JISで保存しなおして、使えるようになりました。
これで行きます
ありがとうございました!
pst11841
Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2

530
2011/9/20 (火) 19:08:08  
[530] 指定した文字の前あるいは後で改行

質問です。
指定した文字の前で改行するには
どうしたらいいでしょうか。
たとえば、"「"を指定して、

"私は言った。「行きます」"

       ↓
"私は言った。
「行きます」"

のようにするにはどうしたらいいでしょうか?

また、できれば、
指定した文字の後で改行する方法についても
教えていただけるとうれしいです。


junk_maruo
Mozilla/5.0 (Windows NT 5.1) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.122 Safari/534.30


2012/2/4 (土) 12:58:09  
[548] Re:指定した文字の前あるいは後で改行

【ヒント】
Windows(改行コードが \r\n)の場合
(1) 「ツール」「キーマクロの記録開始」
(2) 「検索」「置換」
    置換前: 「
    置換後: \r\n「
    □ 正規表現(E) チェックあり
    「すべて置換(A)」
(3) 「ツール」「キーマクロの記録終了&保存」
(4) 保存したマクロファイルを開く → おめでとう!
gis_dur
Mozilla/5.0 (Windows NT 5.1; rv:10.0) Gecko/20100101 Firefox/10.0

545
2011/12/22 (木) 16:40:29  
[545] 構造体の要素名を出せる補完マクロ

以下のようなマクロはありませんでしょうか。
ヘッダファイル等に構造体などが定義してあって、
いちいち開かないでもリストで出てくれば効率よくなるかと思いました。

struct {
    char moji;
    int suuji;
} stTest;

main()
{
    stTest test;

    test.         // ここで"."を入れた時点で候補を出す
                  // (ここでは"moji"と"suuji"をリストで出す)
}
ぐっさん
Mozilla/5.0 (Windows NT 5.1; rv:8.0.1) Gecko/20100101 Firefox/8.0.1

544
2011/12/11 (日) 16:19:51  
[544] 選択行コメントアウトの勝手に改良版

var aExt = new Array();

aExt[""] = "//"; //デフォルト

aExt["c"] = "//";   aExt["cpp"] = "//"; aExt["h"] = "//";
aExt["js"] = "//";  aExt["java"] = "//";
aExt["vbs"] = "'";  aExt["bas"] = "'";  aExt["frm"] = "'";  aExt["cls"] = "'";
aExt["mac"] = "//";
aExt["pl"] = "#";   aExt["pm"] = "#";   aExt["cgi"] = "#";
aExt["tex"] = "%";
aExt["php"] = "//";
aExt["asm"] = ";";
aExt["uws"] = "//";
aExt["conf"] = ";"; aExt["cnf"] = ";";  aExt["ini"] = ";";  aExt["inf"] = ";";
aExt["ppa"] = "//";
aExt["cmd"] = "rem ";    aExt["bat"] = "rem ";
aExt["sql"] = "--";
 
//行選択されていなくても
GoLineTop(13);
sSelect = GetSelectedString(0);
if (sSelect.length == 0) GoLineEnd_Sel();

sSelect = GetSelectedString(0);
 
//拡張子を切り出し
sExt = ExpandParameter("$f");
sExt = sExt.substring( sExt.lastIndexOf(".") + 1);
sExt = sExt.toLowerCase()

if(aExt[sExt] == null){
        sExt = "";
}
 
//選択範囲を置換
if(sSelect.substring(0, aExt[sExt].length) == aExt[sExt]){
        //コメント解除用
        ReplaceAll ("^([    \s]*)" + aExt[sExt], "$1", 148);
}
else{
        //コメントアウト用
        ReplaceAll ("^.", aExt[sExt] + "$&", 148);
}

//正規表現検索を無理やり解除
ReplaceAll ("@@@@@@@@@@", "@@@@@@@@@@", 146);

CancelMode();
SearchClearMark();
ReDraw(0);
beta
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)

ページ:[ ] [1] [2] [3] [4] [5] [6] [7] [8] [ ]
INCM/CMT
Cyclamen v3.81