◀一般トップへ
  • 2752 FileSaveAsの使い方
    • 2753 RE: FileSaveAsの使い方
      • 2754 RE2: FileSaveAsの使い方
        • 2755 Re3: FileSaveAsの使い方
        • 2756 Re3: FileSaveAsの使い方
          • 2757 Re4: FileSaveAsの使い方
          • 2759 名前を付けて保存、名前の変更、成功です
            • 2760 RE: 名前を付けて保存、名前の変更、成功です
              • 2762 RE2: 名前を付けて保存、名前の変更、成功です
                • 2764 Re3: 名前を付けて保存、名前の変更、成功です
                  • 2767 Re4: 名前を付けて保存、名前の変更、成功です
                    • 2768 Re5: 名前を付けて保存、名前の変更、成功です
                      • 2777 Re6: 名前を付けて保存、名前の変更、成功です
                        • 2779 Re7: gomiです
  • [2752] FileSaveAsの使い方 tsune 2003年02月24日 20:06

     初めまして。tsuneと申します。
     最近、サクラエディタを使い出しました。なかなかよい使い勝手だと思います。フリーとはありがたいですね。
     さて、マクロを使って、「名前を付けて保存」をしたいのですが、
    「文法エラー」
    となってうまくいきません。
     newnameを文字変数に指定して、編集中のファイル名を取り込み、
    これに特定の文字を付加して新しいファイル名としたいのです。
    以下のように記載しましたが、この行が「文法エラー」になります。
    引数の指定方法が多分間違っているのだと思いますが、
    関連ページであちこち調べても、答えが見つかりません。
     FileSaveAs(newname);

     ご存知の方、どうかお教えください。

     なお、PPAのExecを利用して、ファイル名を変更するのでも同じ目的は達成できるのですが、これもできません。
     具体的には、編集中のファイル名(フルパス)をfilenameという名前の変数に取り込み、
     これの拡張子(htm)をhtmlに変更したいのです。
     宜しくお願いします。
    • [2753] RE: FileSaveAsの使い方 すい 2003年02月24日 22:12

      > newnameを文字変数に指定して、編集中のファイル名を取り込み、
      >これに特定の文字を付加して新しいファイル名としたいのです。
      >以下のように記載しましたが、この行が「文法エラー」になります。
      >引数の指定方法が多分間違っているのだと思いますが、
      >関連ページであちこち調べても、答えが見つかりません。
      > FileSaveAs(newname);

      FileSaveAs じゃ駄目でやんす。PPA の中では S_FileSaveAs でやんす。
      みな機能名称の先頭に S_ が付くでやんす。

      先頭の S_ の有無が PPA側の機能なのかサクラエディタ側の機能なのかの
      判定材料となっているので、S_ 無しで FileSaveAs と出てくると
      「PPA の機能中の FileSaveAs」と解釈して実行され、
      そんな物無い → 文法エラー です。

      あと、引数などの点でも文法ミスってますね、確かに。<↓仕様>
      ----------
      S_FileSaveAs /// void S_FileSaveAs ( S1 , i1 , i2 ) ;
      名前を付けて保存

      S1:文字列:保存するファイル名

      i1:整数数値:文字コードセット {
      0:Shift_JIS
      1:JIS
      2:EUC
      3:Unicode
      4:UTF-8
      5:UTF-7
      6:UnicodeBE
      }

      i2:整数数値:改行コード {
      0:変更しない
      1:CRLF
      2:LF
      3:CR
      }
      ----------
      > なお、PPAのExecを利用して、ファイル名を変更するのでも同じ目的は達成できるのですが、これもできません。
      > 具体的には、編集中のファイル名(フルパス)をfilenameという名前の変数に取り込み、
      > これの拡張子(htm)をhtmlに変更したいのです。

      Exec は「外部の実行プログラムを起動する」という物です。
      ファイル名の変更をするなら「ファイル名を変更するプログラム」を指定
      しなくてはなりません。そういう機能を持つプログラム(実行ファイル)を
      用意して path が通っている所に置いておかなければ駄目です。

      Windows 標準であれば command.com (Windows95系)や cmd.exe (WindowsNT系)
      を指定して実行する事になりますね。

      あと、「ファイルをサクラエディタで開いたままファイル名を変更する」
      は無理かと。排他制御でロックされているでしょ。(デフォルト設定で)
      手順としては、
      1.ファイルを閉じて(無題) - S_FileClose();
      2.ファイル名を変更 - Exec('command.com','/c "'+oldname + '" "'+ newname + '"' , True);
      3.新しいファイル名のファイルを開く - S_FileOpen(newname);
      という処理になるハズ。
      • [2754] RE2: FileSaveAsの使い方 すい 2003年02月24日 22:19

        >> なお、PPAのExecを利用して、ファイル名を変更するのでも同じ目的は達成できるのですが、これもできません。
        >> 具体的には、編集中のファイル名(フルパス)をfilenameという名前の変数に取り込み、
        >> これの拡張子(htm)をhtmlに変更したいのです。
        >
        >手順としては、
        >1.ファイルを閉じて(無題) - S_FileClose();
        >2.ファイル名を変更 - Exec('command.com','/c "'+oldname + '" "'+ newname + '"' , True);
        >3.新しいファイル名のファイルを開く - S_FileOpen(newname);
        >という処理になるハズ。
        ↑これ、↓こんなんでよろし?
        ----------
        // 実行には PPA.DLL が必須です。
        // TAB = 4

        var // 変数を確保する場所
        oldname,newname:String; // 文字列変数を用意
        ext:String; // 文字列変数を用意
        CRLF:String; // Debug 用 文字列変数を用意
        pt:Integer; // 整数数値変数を用意
        begin // ここより処理内容の記述
        CRLF := '
        ';
        oldname := S_GetFilename(); // ファイル名を取得する。

        // ↓ファイル名末尾 4文字を取り出し、英小文字に変換して文字列変数 ext へ取り込む
        ext := LowerCase( Copy(oldname , Length(oldname)-3 ,4) );

        if ( ext = '.htm' ) then // 拡張子が .htm なら
        begin
        // 拡張子を変更する。
        newname := Delete(oldname , Length(oldname)-3 ,4) + '.html';

        // ファイル名からディレクトリ部分を削除する。
        repeat
        pt := Pos('\',newname); // pt := '\' の位置
        newname := Delete(newname,1,pt); // newname := 先頭~'\' を削除した文字列
        until( pt = 0 ); // '\' が見つからなかった( pt == 0 )ら、ループ脱出

        MessageBox( 'Old:' + oldname + CRLF + 'New:' + newname , 'Debug' , 0 );

        S_FileClose(); // 閉じて(無題)
        Exec('command.com' , '/c ren "'+oldname + '" "'+ newname + '"' , True); // for Win95系
        S_FileOpen(newname);
        end;
        end;
        ----------
        • [2755] Re3: FileSaveAsの使い方 tsune 2003年02月24日 23:59

          ▼ すいさん
          > >> なお、PPAのExecを利用して、ファイル名を変更するのでも同じ目的は達成できるのですが、これもできません。
          > >> 具体的には、編集中のファイル名(フルパス)をfilenameという名前の変数に取り込み、
          > >> これの拡張子(htm)をhtmlに変更したいのです。
          > >
          > >手順としては、
          > >1.ファイルを閉じて(無題) - S_FileClose();
          > >2.ファイル名を変更 - Exec('command.com','/c "'+oldname + '" "'+ newname + '"' , True);
          > >3.新しいファイル名のファイルを開く - S_FileOpen(newname);
          > >という処理になるハズ。
          > ↑これ、↓こんなんでよろし?
          > ----------
          > // 実行には PPA.DLL が必須です。
          > // TAB = 4
          >
          > var // 変数を確保する場所
          > oldname,newname:String; // 文字列変数を用意
          > ext:String; // 文字列変数を用意
          > CRLF:String; // Debug 用 文字列変数を用意
          > pt:Integer; // 整数数値変数を用意
          > begin // ここより処理内容の記述
          > CRLF := '
          > ';
          > oldname := S_GetFilename(); // ファイル名を取得する。
          >
          > // ↓ファイル名末尾 4文字を取り出し、英小文字に変換して文字列変数 ext へ取り込む
          > ext := LowerCase( Copy(oldname , Length(oldname)-3 ,4) );
          >
          > if ( ext = '.htm' ) then // 拡張子が .htm なら
          > begin
          > // 拡張子を変更する。
          > newname := Delete(oldname , Length(oldname)-3 ,4) + '.html';
          >
          > // ファイル名からディレクトリ部分を削除する。
          > repeat
          > pt := Pos('\',newname); // pt := '\' の位置
          > newname := Delete(newname,1,pt); // newname := 先頭~'\' を削除した文字列
          > until( pt = 0 ); // '\' が見つからなかった( pt == 0 )ら、ループ脱出
          >
          > MessageBox( 'Old:' + oldname + CRLF + 'New:' + newname , 'Debug' , 0 );
          >
          > S_FileClose(); // 閉じて(無題)
          > Exec('command.com' , '/c ren "'+oldname + '" "'+ newname + '"' , True); // for Win95系
          > S_FileOpen(newname);
          > end;
          > end;
          > ----------
        • [2756] Re3: FileSaveAsの使い方 tsune 2003年02月25日 00:10

          すいさん、早速の御教示ありがとうございます。

           勤め先に環境が用意してありますので、「名前を付けて保存」、「リネーム」とも、明日、早速試してみます。
           なお、先の投稿で、「FileSaveAs()」と書いたのは、頭に「S_」を書き忘れていました。「サクラエディタ応援ページ」でこのことは承知しており、作成中のマクロでもこれは守っていたのですが、この点の御指摘まで、お手を煩わせて申し訳ありませんでした。
           今回、御教示戴きました引数などの仕様は、どちらに行けば判るのでしょうか。
           よろしければ教えて戴けませんでしょうか。

           間違って、名前だけ入れて一件投稿してしまいました。
           削除キーの入力前だったので、削除もできません。
           管理人様、削除して戴けませんでしょうか。
          • [2757] Re4: FileSaveAsの使い方 すい 2003年02月25日 00:54

            > 今回、御教示戴きました引数などの仕様は、どちらに行けば判るのでしょうか。

            http://www.egroups.co.jp/files/sakura-editor/User/Data/
            の
            「サクラエディタ マクロ設定セット(強調キーワード,キーワードヘルプ辞書ファイル)作成途上版」
            を見てください。
            未だにサクラエディタ最新版バイナリに追いついていない状況の物のままですが...

            最新版までに追加されている物については、サクラエディタのソースを
            見て自分で解析するしか手はありません。

            あと、ここの掲示板、「マクロ会議室(サクラエディタ マクロ掲示板)(サクラエディタ マクロBBS)」
            もあるんですけど...(;^^;)
            # げんたさん の所 http://members.tripod.co.jp/sakura_editor/
            # では「マクロ会議室」となっていて、実際行ってみると
            # 「サクラエディタ マクロ掲示板」となっていて、html上の
            # <title>~</title> は「サクラエディタ マクロBBS」
            # なので、「マクロ会議室」「サクラエディタ マクロ掲示板」
            # 「サクラエディタ マクロBBS」どれが正式名称なのかサッパリ???(笑)
            # なので。紹介が難しい。(;^^a
          • [2759] 名前を付けて保存、名前の変更、成功です tsune 2003年02月25日 01:12

            すいさん、ありがとうございました。

             取り敢えず、手元の環境(Win2000)を簡単に整えて、試してみたところ、
            「名前を付けて保存」と「古いファイルの削除」の組合せも、
            「名前の変更」も両方うまくいきました。

             「古いファイルの削除」は、サクラエディタのマクロの紹介ページ
            (と言ったら良いのでしょうか)のdelthis_20030103_20.cabから、
            delfile.exeを利用させて戴きました。

             「名前の変更」の方は、OS違いでしたので、「command.com」を
            「cmd.exe」に変えました。
             今回は、名前の変更内容が拡張子の変更だけでしたので、「*.html」で
            よいみたいですね。
             でも、教えて戴きましたパス名の除去ルーチンは、これから色々と使い道が
            ありそうです。

             まだ、未完ですが、お教え戴きました処理部分も含めて、作成中のマクロを
            投稿させて戴きます。
             同じフォルダ内にあってリンクされている画像ファイルの名前を、半角空白を
            詰めた形式に変更する必要があるため、HTMファイル内のリンク情報を書き換え、
            書き換え済の識別用に拡張子を変更するものです。
             マクロの終了時にチャイムが鳴るのが少し気になりますけど、一応動作します。
             ファイルを順次に開く処理をどうするか、思案中・・・。

            var
            str:String; //文字列変数宣言
            oldname:String; //ファイル名格納用
            newname:String; //HTMLファイル名格納用

            //ファイルを開く(未作成)


            //半角空白を"_"に置換する
            begin //置換処理開始
            S_GoFileTop(0); // ファイルの先頭に移動
            while (true) do //無限ループ
            begin
            S_SearchNext('src="', 16); //リンク情報を探す
            str := S_GetSelectedString(0); //選択範囲の文字列取得
            if (str <> '') then //何か文字列が選択されていれば、
            begin //以下の処理を実行
            S_Right(0); // カーソル右移動
            S_GoLineEnd_Sel(0); // (選択)行末に移動(折り返し単位)
            S_ReplaceAll(' +', '_', 148); //半角空白を"_"に置換(正規表現、ダイアログ自動閉、選択範囲をそれぞれオン)
            end //処理終了
            else //選択文字列無し="src"が見つからない(=置換終了)故
            Break; //ループ抜ける
            end; //無限ループ終了

            //ファイル名を変更
            oldname := S_GetFilename(); // 編集中のファイルのフルパスを取得
            newname := oldname + 'L'; // HTMLファイル名を生成
            // S_FileSaveAs( newname , 0 , 0 ); // 拡張子'HTML'で保存
            S_FileSave(); // 上書保存
            S_FileClose(); // 閉じて(無題)
            Exec('cmd.exe' , '/c ren "'+ oldname + '" *.html"' , True);

            // 古いファイルを削除(S_FileSaveAsが利用可能で、名前変更ができない場合に使用)
            // Exec( 'delfile.exe', oldname , False ); //PPA.DLLのExecとdelfile.exeを利用
            S_WinClose(); // ウィンドウを閉じる
            end;
            • [2760] RE: 名前を付けて保存、名前の変更、成功です すい 2003年02月25日 01:39

              > 今回は、名前の変更内容が拡張子の変更だけでしたので、「*.html」で
              >よいみたいですね。

              言われてみれば仰せの通り。あんな処理、一生懸命やらなくても良かったですね。
              うっかり やってしまいました。(;^^ゞ

              >  「古いファイルの削除」は、サクラエディタのマクロの紹介ページ
              > (と言ったら良いのでしょうか)のdelthis_20030103_20.cabから、
              > delfile.exeを利用させて戴きました。

              # ちなみにソレ(delfile.exe)、command.com/cmd.exe を使うと、
              # 「Win95系とWinNT系とでマクロを変更しなくてはならない」
              # というのと「DOS画面が現れるのがうっとうしい」というだけの
              # 理由で使っているんですよね。
              # ってわざわざ言うまでもなく見当ついていると思いますが。(^^;

              > ファイルを順次に開く処理をどうするか、思案中・・・。

              http://www.egroups.co.jp/files/sakura-editor/User/MACRO/
              の「grepr_20030201_20.cab
              マクロ(PPA):Grep結果から複数のファイルに対して置換処理をまとめておこなう」
              で似たような事を姑息な手(力ずく)で やってます。(笑)
              参考になるかどうかは?ですが。前処理部分が長くて見にくいし。
              • [2762] RE2: 名前を付けて保存、名前の変更、成功です すい 2003年02月25日 02:20

                一応、って事で。

                >> ファイルを順次に開く処理をどうするか、思案中・・・。
                >
                >http://www.egroups.co.jp/files/sakura-editor/User/MACRO/
                >の「grepr_20030201_20.cab
                >マクロ(PPA):Grep結果から複数のファイルに対して置換処理をまとめておこなう」
                >で似たような事を姑息な手(力ずく)で やってます。(笑)

                ↑で大雑把にやっている事

                処理対象のファイル名一覧ファイルを開いた状態でマクロ実行開始する。
                ↓以下、マクロの処理内容。

                S_GetSelectedString(); で一行ずつファイル名を文字列変数 str へ取得。
                # S_GetSelectedString は一行ずつしか内容を取り込めないから。

                取り込んだファイル名(フルパス)を文字列変数 files に追加格納していく。
                ファイル名の区切りには CRLF改行を使用している。
                187行近辺:files := files + str + CRLF;

                files := 'C:\hogehoge\hoge1.txt(CRLF)
                C:\hogehoge\hoge2.txt(CRLF)
                C:\hogehoge\hoge3.txt(CRLF)
                ';
                ↑みたいな感じになっていくの。
                こうして処理対象ファイル名一覧の文字列変数 files が用意出来た所でメイン処理

                269行近辺:
                ループ開始 {

                  files 中から先頭の「セパレーターの CRLF改行文字」の位置を探して、
                   str に「files の先頭~CRLF改行文字の前まで」の文字列を格納する。(次の処理対象ファイル名)
                   files は「先頭~CRLF改行文字」の文字列を削除した内容に更新しておく。(残りの処理対象ファイル名一覧)

                  で、今まで開いていたファイルを S_FileClose();(閉じて(無題))して
                  S_FileOpen( str );(処理対象のファイルを開く)して

                  んで、一生懸命書き換え処理メイン。

                } これを文字列変数 files が空っぽになるまでグルグルループ。

                ループ抜けたら後始末してマクロ終了。

                tsuneさん でしたら↑この程度の説明で処理内容を十分イメージできますよね?(^^;


                「処理対象ファイル一覧」なんかは
                「外部コマンド実行」で dir/b *.htm とか dir/b/s *.htm とかで取れますかね。
                マクロ的には
                S_ExecCommand('dir/b *.htm', 1);
                ですが。ただ、↑これやってからそのまま書き換え処理まで
                連続でやるのは無理ですが。
                「外部コマンド実行」の実行結果は別ウィンドウで開いちゃいますから。
                • [2764] Re3: 名前を付けて保存、名前の変更、成功です tsune 2003年02月25日 20:12

                  すいさん

                   重ね重ねありがとうございます。
                   御紹介戴きましたマクロも、サクラエディタのマクロ・ディレクトリ内に放り込んで、使える状態にはしておりますので、
                   御説明に従って、近いうちに作ってみます。
                   たぶん、大丈夫とは思いますが、また、判らなくなったら、or うまくいったら、報告に参ります。

                   「サクラエディタ マクロ設定セット(強調キーワード,キーワードヘルプ辞書ファイル)作成途上版」も戴いて参りました。まだ、読んでませんが・・・。早く読まなきゃ・・・。


                   #2757で御指摘を戴きましたが、マクロの話は「マクロ会議室」に行ったほうがよろしいのですね。
                   今回の報告も含め、次からはそちらに書き込むように致します。
                   御指摘に気がつく前に、もう一つ書き込んじゃいました。すみません。
                   では。
                  • [2767] Re4: 名前を付けて保存、名前の変更、成功です すい 2003年02月26日 01:34

                    > 「サクラエディタ マクロ設定セット(強調キーワード,キーワードヘルプ辞書ファイル)作成途上版」も戴いて参りました。まだ、読んでませんが・・・。早く読まなきゃ・・・。

                    「読む」というよりも「設定する」のですが。(*^^*)
                    マクロを快適に作成・編集する環境を構築するための設定ファイルですので。
                    # 設定方法を「読む」という事ではありますが。

                    「きちんと環境を構築するとこんな事までできるんだ、このエディタ」
                    とかって感動していただけると幸いです。(笑)(笑)

                    > #2757で御指摘を戴きましたが、マクロの話は「マクロ会議室」に行ったほうがよろしいのですね。
                    > 今回の報告も含め、次からはそちらに書き込むように致します。

                    あぅ、すみません。そういう意図ではなかったです。
                    「“マクロ掲示板”もありますからね。そちらの過去ログとかも
                     漁ると ひょっとしたら ためになる情報が...」
                    という程度の事で。
                    まぁ、どちらの掲示板に書き込もうが私は気になりませんが、、、
                    # どうせ他に あんまり書き込み無いし(爆)
                    マクロ掲示板に書き込んだ方がベターっちゃベターなんでしょうけど。
                    • [2768] Re5: 名前を付けて保存、名前の変更、成功です tsune 2003年02月26日 07:26

                      すいさん

                      |「読む」というよりも「設定する」のですが。(*^^*)
                      |マクロを快適に作成・編集する環境を構築するための設定ファイルですので。
                      |# 設定方法を「読む」という事ではありますが。
                       取り敢えず、「設定」致しました。(*^^*ゞ
                       で、どうやって使うのか、強調キーワードなんて使ったことがないもので、
                      これから調べま~す。
                       多分、マクロの編集中に使うのですね・・・と。
                       こないだ作ったPPAを開いてみます。
                       おぉっ! コマンドをダブルクリックすると使い方が表示されるではありま
                      せんか! 感動。(; ;)ホロホロ

                      |「きちんと環境を構築するとこんな事までできるんだ、このエディタ」
                      |とかって感動していただけると幸いです。(笑)(笑)
                       ホント、奥の深いエディタでございます。

                      |「“マクロ掲示板”もありますからね。そちらの過去ログとかも
                      | 漁ると ひょっとしたら ためになる情報が...」
                      |という程度の事で。
                      |まぁ、どちらの掲示板に書き込もうが私は気になりませんが、、、
                      |# どうせ他に あんまり書き込み無いし(爆)
                      |マクロ掲示板に書き込んだ方がベターっちゃベターなんでしょうけど。
                       そうでしたか。
                       確かに、書込の数が少ないですねぇ。
                       いろいろとありがとうございました。
                      • [2777] Re6: 名前を付けて保存、名前の変更、成功です すい 2003年02月26日 21:55

                        > おぉっ! コマンドをダブルクリックすると使い方が表示されるではありま
                        >せんか! 感動。(; ;)ホロホロ

                        「マクロファイルを開いた状態で、s_file とか途中までキー入力して [Ctrl]+[  ](スペースバー) 」
                        で感動して欲しかった...と、わがまま言ってみるテスト。
                        standing ovation 希望。(笑)
                        # なに言ってんだ > 私
                        • [2779] Re7: gomiです tsune 2003年02月26日 23:57

                          |「マクロファイルを開いた状態で、s_file とか途中までキー入力して [Ctrl]+[  ](スペースバー) 」
                          |で感動して欲しかった...と、わがまま言ってみるテスト。
                          |standing ovation 希望。(笑)
                          |# なに言ってんだ > 私
                           やってみました。

                           おぉっ!
                           何だ、これは・・・。
                           奥が深すぎる・・・。

                           ども。ゴミで済みません。