3桁区切りのカンマを削除No.09065
いちもんじ さん 19/09/24 13:20
 
マクロで
変数 $a に "\100,000,000-"のような文字列があります。

この文字列から「,(カンマ)」を削除して
  "\100000000-"
としたいのですが、できますか?
方法があれば、どなたか、ご教示ください。

カンマの位置を読み取り、左側文字とカンマを飛ばして右側の文字列を連結し、カン
マがなくなるまで繰り返すマクロを作れないかと思案していますが、

strstr関数だと、素直には「\」を検索できないようで、

  $a = "\100,000,000-";
  #a = strstr($a,",");

だけだと、#aは「2」になってしまいます。


[ ]
RE:09065 3桁区切りのカンマを削除No.09066
h-tom さん 19/09/24 20:23
 
h-tom です。

>$a = "\100,000,000-";
>#a = strstr($a,",");
message $a + "\n" + str(#a);

最後に、message 文 追加して、$a に何が入っているか確認してみましょう。

>だけだと、#aは「2」になってしまいます。
こちらでは、「3」ですよ?

でもって、文字列を切り貼りする方法の他に、hmjre.dllの置換関数使って、置換す
る方法もあります。

[ ]
RE:09066 3桁区切りのカンマを削除No.09068
いちもんじ さん 19/09/25 12:12
 
>message $a + "\n" + str(#a);
>
>最後に、message 文 追加して、$a に何が入っているか確認してみましょう。
>

messageでは「\」が表示されませんね。
 (特殊文字だから??)

>>だけだと、#aは「2」になってしまいます。
>こちらでは、「3」ですよ?

 ご指摘のとおり、「3」でした。スミマセン。
 先頭の¥からゼロ始まりで数えたら、カンマの位置は「4」になるのかなぁと思う
のですが.... 


[ ]
RE:09068 3桁区切りのカンマを削除No.09069
Iranoan さん 19/09/25 14:41
 
いちもんじさんこんにちは、Iranoan です
> messageでは「\」が表示されませんね。
>  (特殊文字だから??)

>  ご指摘のとおり、「3」でした。スミマセン。
>  先頭の¥からゼロ始まりで数えたら、カンマの位置は「4」になるのかなぁと思
>うのですが....
は同じことが原因です
仰る通り、「\」がメタ・キャラクタだからです

「\n」同様「\1」で一文字扱いです
検索・置換中で使っていないので特別な意味を持たず、秀丸エディタでは気を利かせ
てエラーにはせず、結局「1」とだけした時と同じに成るわけですが…

どちらにしても今回のケースは、
https://help.maruo.co.jp/hmjre/html/0008_API_MACRO.html
にも有る HmJre.dll の関数 ReplaceRegular() あたりを使ったほうがずっと簡単です

[ ]
RE:09069 3桁区切りのカンマを削除No.09071
いちもんじ さん 19/09/25 16:25
 
> どちらにしても今回のケースは、
> https://help.maruo.co.jp/hmjre/html/0008_API_MACRO.html
> にも有る HmJre.dll の関数 ReplaceRegular() あたりを使ったほうがずっと簡単です

Iranoanさん

アドバイスをいただきありがとうございます。
自分にとってはマクロでHmJre.dllは未経験ですが、トライしてみます。

[ ]
RE:09071 3桁区切りのカンマを削除No.09072
いちもんじ さん 19/09/25 17:30
 
>> どちらにしても今回のケースは、
>> https://help.maruo.co.jp/hmjre/html/0008_API_MACRO.html
>> にも有る HmJre.dll の関数 ReplaceRegular() あたりを使ったほうがずっと簡単
>です

「カンマ」の置換(削除)はできましたが、

例えば、先頭の「\」(半角)を全角文字の「¥」に置換するにはどうしたら良いで
しょうか?

[ ]
RE:09072 3桁区切りのカンマを削除No.09073
Iranoan さん 19/09/25 18:01
 
いちもんじさんこんにちは、Iranoan です
> >> どちらにしても今回のケースは、
> >> https://help.maruo.co.jp/hmjre/html/0008_API_MACRO.html
> >> にも有る HmJre.dll の関数 ReplaceRegular() あたりを使ったほうがずっと簡
>単です
>
> 「カンマ」の置換(削除)はできましたが、
>
> 例えば、先頭の「\」(半角)を全角文字の「¥」に置換するにはどうしたら良い
>でしょうか?
「\」 はマクロでも正規表現でもメタ・キャラクタなので、二重にエスケープする必
要が有ります

ReplaceRegular() 関数の
第一引数:\\\\
第二引数:¥
で出来るかと

[ ]
RE:09073 3桁区切りのカンマを削除No.09077
いちもんじ さん 19/09/26 13:12
 
>ReplaceRegular() 関数の
>第一引数:\\\\
>第二引数:¥
>で出来るかと

$a = "\100,000,000-";
$s = dllfuncstr( "ReplaceRegular", "\\\\", $a, 0, "¥" ,1);
message $s;

上記にすると$sはブランクになります。

¥100,000,000-
にしたいのですが、うまくいきません。

[ ]
RE:09077 3桁区切りのカンマを削除No.09078
h-tom さん 19/09/26 20:20
 
h-tom です。

>$a = "\100,000,000-";
>$s = dllfuncstr( "ReplaceRegular", "\\\\", $a, 0, "¥" ,1);
>message $s;
>
>上記にすると$sはブランクになります。
もう一度言いますが、$a の中身を message文で確認してみましょう。
"\"はありませんよね。

>messageでは「\」が表示されませんね。
> (特殊文字だから??)
表示されていないのではなく、$a の中に、"\"は入っていません。

理由は、Iranoan さんが説明してくれています。
> 「\n」同様「\1」で一文字扱いです
> 検索・置換中で使っていないので特別な意味を持たず、秀丸エディタでは気を利か
>せてエラーにはせず、結局「1」とだけした時と同じに成るわけですが…
最近の秀丸エディタは、マクロ実行時に警告を出してくれますけどね。(設定を変え
ていなければ)

ないものを置換しようとしているので、
> ヒットしなかった場合や正規表現のコンパイルエラーの場合は""を返します
ということです。

どうすればいいかは、マクロヘルプの「式について」−「文字列」を見てください。

[ ]