◀一般トップへ
  • 6451 固定長ファイルで指定開始位置へジャンプするには
    • 6453 Re:固定長ファイルで指定開始位置へジャンプするには
      • 6455 Re2:固定長ファイルで指定開始位置へジャンプするには
        • 6459 Re3:固定長ファイルで指定開始位置へジャンプするには
          • 6460 Re4:固定長ファイルで指定開始位置へジャンプするには
            • 6461 Re5:固定長ファイルで指定開始位置へジャンプするには
              • 6462 Re6:固定長ファイルで指定開始位置へジャンプするには
                • 6463 Re7:固定長ファイルで指定開始位置へジャンプするには
                  • 6465 Re8:固定長ファイルで指定開始位置へジャンプするには
                  • 6466 Re8:固定長ファイルで指定開始位置へジャンプするには
                  • 6467 Re8:固定長ファイルで指定開始位置へジャンプするには
                  • 6468 Re8:固定長ファイルで指定開始位置へジャンプするには
    • 6471 Re:固定長ファイルで指定開始位置へジャンプするには
  • [6451] 固定長ファイルで指定開始位置へジャンプするには 使い始め 2007年11月08日 11:18

    固定長ファイルで指定開始位置へジャンプする方法はあるのでしょうか。
    画面は、折り返さない設定にした上で、(1レコード1行)
    たとえば、先頭から「1569桁目」へカーソルをジャンプ
    させたいのです。
    過去ログも、メニューも片っ端から探して見たのですが、
    見つけられませんでした。
    どなたか教えてください。
    • [6453] Re:固定長ファイルで指定開始位置へジャンプするには じゅうじ 2007年11月11日 18:36

      ▼ 使い始めさん
      > 画面は、折り返さない設定にした上で、(1レコード1行)

      画面は折り返す。
      その上で、下のステータスバーで桁位置を確認では、どうでしょう。
      • [6455] Re2:固定長ファイルで指定開始位置へジャンプするには 使い始め 2007年11月12日 09:19

        回答ありがとうございます。
        数えやすい桁数で折り返してみてはやっていたのですが、
        扱っているのが、とても長いデータで、検索したい場所も
        多々あるので、効率がわるく、このサイトで質問してみたわけです・・・
        やはり方法はないようですね・・・
        • [6459] Re3:固定長ファイルで指定開始位置へジャンプするには げんた 2007年11月13日 01:45

          数値を問い合わせて,入力した桁数右に移動するマクロって作れないでしょうか.

          viなら
          1569l
          でOKなのに...

          って私が言ってどうする.
          • [6460] Re4:固定長ファイルで指定開始位置へジャンプするには maru 2007年11月13日 02:48

            ▼ 使い始めさん

            こんなんで役に立ちますかね?

            '-------------------
            'GoToColm.vbs
            '指定の桁に移動
            '-------------------
            Option Explicit
            Call main
            Private Sub main()
            '移動先の桁を取得
            sNum = InputBox("移動後の桁位置を指定してください." _
            , "指定の桁へ移動")

            '数値以外ならキャンセル
            If Not IsNumeric(sNum) Then
            MsgBox "数値以外が入力されました."
            Exit Sub
            End If
            iNum = CLng(sNum)

            '行末桁より大きければ行末へ移動
            Editor.GoLineEnd
            iMax = CLng(ExpandParameter("$x"))
            If iNum >= iMax Then Exit Sub

            'カーソル位置が指定桁と同じか大きくなるまで右移動
            Editor.GoLineTop 1
            Do While CLng(ExpandParameter("$x")) <= iNum
            Editor.Right
            Loop

            End Sub
            • [6461] Re5:固定長ファイルで指定開始位置へジャンプするには じゅうじ 2007年11月14日 07:26

              ▼ maruさん
              > ▼ 使い始めさん
              Wikiに貼り付けました。左右移動に改良。

              http://sakura.qp.land.to/?Macro/投稿/183
              (11/15 追加)
              • [6462] Re6:固定長ファイルで指定開始位置へジャンプするには 使い始め 2007年11月14日 15:55

                ▼ maruさん
                回答ありがとうございます。
                せっかく回答いただいたのに
                サクラエディタ自体まだほとんど使ったことがなく、
                マクロどころかvbスクリプトを書いたことがないので
                使い方がよくわかりません。
                下記の手順で実行したらエラーがでました。

                1.提示していただいた、スクリプト文をメモ帳に貼り付け、
                拡張子をvbsにする。
                2.メニューからキーマクロの読み込みを行い、
                3.メニューからキーマクロの実行をしたら
                4.桁数を入力するinputboxはでてきたのですが、
                5.入力後OKをおしたら、実行時エラー[line5]この変数は
                宣言されていません。:'sNum'とでてOKをおすと
                6.WSHのメッセージで実行に失敗しました。
                と出ました。

                どこの設定がもれているのでしょうか。
                http://www.geocities.jp/maru3128/SakuraMacro/
                や他のヘルプをみてはみたものの、よくわかっていないので
                質問するのも申し訳ないのですが・・・教えてください。
                • [6463] Re7:固定長ファイルで指定開始位置へジャンプするには なすこじ 2007年11月14日 18:38

                  ▼ 使い始めさん
                  変数の宣言が必要みたいです。
                  Private Sub main()の下に3行追加してみて下さい。
                  Dim sNum
                  Dim iNum
                  Dim iMax

                  物理位置で移動チェックしているので、TABや全角文字があるとずれませんかね?
                  • [6465] Re8:固定長ファイルで指定開始位置へジャンプするには なすこじ 2007年11月15日 10:55

                    > 物理位置で移動チェックしているので、TABや全角文字があるとずれませんかね?

                    ステータスバーの桁表示とずれるのでは?と思ったのですが、全角文字の方は2バイト
                    のままなのでずれるわけがないですね。アホを露呈してしまった (^^;

                    あと、せっかくなので冗談のような仕様ですが作ってみたのをアップします。
                    ・移動したい桁数分の半角文字列の行を挿入して移動場所を特定します
                    ・移動場所の手前の文字列を検索文字列として取得します。
                    ・アンドゥで編集をキャンセルします
                    ・特定した場所へ検索にて移動します

                    ★印の所は半角文字列への置き換えが必要です

                    // --- ここから ---

                    // JumpColumn.ppa by nasukoji
                    // 実行にはPPA.DLLが必要です。
                    var
                    colm : integer;
                    lineP : integer;
                    lineL : integer;
                    maxSSize : integer;
                    cNum1 : integer;
                    cNum2 : integer;
                    count : integer;
                    xPos : integer;
                    xPos2 : integer;
                    i : integer;
                    tempStr : string;
                    searchStr : string;

                    begin
                    maxSSize := 100; // 検索文字列の制限サイズ(最大値は260)

                    // 現在の行を記憶する
                    lineP := StrToInt( S_ExpandParameter( '$y' ) ); // 物理行

                    S_BeginSelect();
                    lineL := S_GetSelectColmFrom(); // レイアウト行
                    S_CancelMode();

                    // 移動位置を取得する
                    cNum1 := StrToInt( InputBox( '桁位置ジャンプ', '桁番号', '' ) );
                    if cNum1 <= 0 then Exit; // 0以下または数字でない時は終了
                    cNum1 := cNum1 - 1; // 先頭からcNum1文字右へ移動するので-1する

                    cNum2 := 0;
                    if cNum1 > maxSSize then cNum2 := cNum1 - maxSSize;

                    // 改行を挿入する
                    S_GoLineTop(1); // 行頭(レイアウト行)へ移動
                    S_Char( 13 ); // レイアウト行の途中を切断(途中でないならただの改行)
                    S_Char( 13 ); // 検索文字列開始位置用
                    S_Char( 13 ); // 検索文字列終了位置用(ここが指定の桁位置)
                    S_Up();

                    // 指定桁数-1文字分の半角文字列を作成する(検索文字列の終わり)
                    tempStr := '';

                    while cNum1 >= 1000 do
                    begin
                    // 1000文字の半角文字列を追加
                    tempStr := tempStr + ★半角1000文字★;
                    cNum1 := cNum1 - 1000;
                    end;

                    while cNum1 >= 100 do
                    begin
                    // 100文字の半角文字列を追加
                    tempStr := tempStr + ★半角100文字★;
                    cNum1 := cNum1 - 100;
                    end;

                    while cNum1 >= 10 do
                    begin
                    // 10文字の半角文字列を追加
                    tempStr := tempStr + ' 10';
                    cNum1 := cNum1 - 10;
                    end;

                    while cNum1 > 0 do
                    begin
                    // 1文字追加
                    tempStr := tempStr + ' ';
                    cNum1 := cNum1 - 1;
                    end;

                    ■ --- つづく ---
                  • [6466] Re8:固定長ファイルで指定開始位置へジャンプするには なすこじ 2007年11月15日 10:57

                    ■ --- つづき ---
                    // 文字列を出力する
                    S_InsText( tempStr );
                    S_BeginSelect();
                    colm := S_GetSelectColmFrom(); // 桁位置(レイアウト行)を記憶する
                    S_CancelMode();
                    S_Up();

                    // 検索文字列作成用の半角文字列を作成する(検索文字列の先頭)
                    tempStr := '';
                    cNum1 := cNum2;

                    while cNum1 >= 1000 do
                    begin

                    // 1000文字の半角文字列を追加
                    tempStr := tempStr + ★半角1000文字★;
                    cNum1 := cNum1 - 1000;
                    end;

                    while cNum1 >= 100 do
                    begin
                    // 100文字の半角文字列を追加
                    tempStr := tempStr + ★半角100文字★;
                    cNum1 := cNum1 - 100;
                    end;

                    while cNum1 >= 10 do
                    begin
                    // 10文字の半角文字列を追加
                    tempStr := tempStr + ' 10';
                    cNum1 := cNum1 - 10;
                    end;

                    while cNum1 > 0 do
                    begin
                    // 1文字追加
                    tempStr := tempStr + ' ';
                    cNum1 := cNum1 - 1;
                    end;

                    // 文字列を出力する
                    if cNum2 > 0 then S_InsText( tempStr );
                    S_GoLineEnd();

                    // 桁位置までの検索用文字列として切り出す
                    S_Down();
                    S_Down();
                    S_Up_Sel();
                    S_GoLineEnd_Sel();
                    xPos := StrToInt( S_ExpandParameter( '$x' ) ); // 桁位置(物理行)を取得する
                    S_Down_Sel();
                    xPos2 := StrToInt( S_ExpandParameter( '$x' ) ); // 桁位置(物理行)を取得する
                    searchStr := S_GetSelectedString( 0 );

                    ■ --- つづく ---
                  • [6467] Re8:固定長ファイルで指定開始位置へジャンプするには なすこじ 2007年11月15日 10:58

                    ■ --- つづき ---
                    // 編集を無かったことにする
                    S_Undo(); // 文字列出力をアンドゥ
                    if cNum2 > 0 then S_Undo(); // 文字列出力をアンドゥ
                    S_Undo(); // 改行をアンドゥ
                    S_Undo(); // 改行をアンドゥ
                    S_Undo(); // 改行をアンドゥ

                    // 指定桁数より行が短い場合、行末へカーソルを移動して終了する
                    S_GoLineEnd();
                    if xPos > StrToInt( S_ExpandParameter( '$x' ) ) then Exit;

                    // 選択範囲が無い場合、行頭へカーソルを移動して終了する
                    S_GoLineTop(1);
                    if xPos2 = 1 then Exit;

                    // 文字列を検索する
                    while lineP = StrToInt( S_ExpandParameter( '$y' ) ) do
                    begin
                    S_SearchNext( searchStr, 18 ); // 文字列を検索
                    S_Right();

                    S_BeginSelect();
                    xPos := S_GetSelectColmFrom(); // 桁位置(レイアウト行)を取得する
                    S_CancelMode();

                    // 指定位置、または次の検索では指定位置を越える
                    if colm < xPos + maxSSize then Break;
                    end;

                    S_SearchClearMark(0); // 検索マークのクリア

                    // 手前でヒットした場合の位置補正
                    // 手前でヒットすると次の検索では指定位置を通り過ぎてしまうので、
                    // ここからは検索ではなく1文字送りで指定位置まで移動する。
                    if xPos < colm then
                    begin
                    while xPos < colm do
                    begin
                    S_Right();
                    S_BeginSelect();
                    xPos := S_GetSelectColmFrom();
                    S_CancelMode();
                    end;

                    // 全角文字・TAB文字の途中用の再補正
                    if xPos > colm then S_Left();
                    end;

                    // 見つからなかったらエラー(あり得ないはず)
                    if lineP <> StrToInt( S_ExpandParameter( '$y' ) ) then
                    begin
                    S_Jump( lineL, 0 ); // カーソルを戻す
                    MessageBox( 'ジャンプに失敗しました', 'error', 0 );
                    // Exit;
                    end;
                    end;

                    // --- ここまで ---
                  • [6468] Re8:固定長ファイルで指定開始位置へジャンプするには 使い始め 2007年11月15日 18:15

                    ▼ なすこじさん
                    変数宣言したらできました!
                    ありがとうございました!!!!

                    これで、ながったらしいデータの確認が早くできます。助かりました。
                    今の仕事が一段落したら、サクラエディタというものをじっくり調べて
                    みようと思いますが、取り急ぎご報告まで。
    • [6471] Re:固定長ファイルで指定開始位置へジャンプするには 通りすがり 2007年11月16日 23:14

      ▼ 使い始めさん
      > たとえば、先頭から「1569桁目」へカーソルをジャンプ

      すでにマクロで解決されたようですので、無用かとは思いますが、
      コマンドラインオプションで、「-X=1569」とか、

      filename.log(1,1569):

      とか書いてタグジャンプってのはダメですかね?
      同じような状況で自分がよく使う手です。