ファイル内の文字列取得No.00490
Zuo さん 99/04/12 02:38
 
ファイルの中に一個所”10月 2日”というかんじで、日付が
入っているのですが、これを検索して変数に入れる方法をおしえてください。


[ ]
RE:00490 ファイル内の文字列取得No.00494
ひろ さん 99/04/13 14:50
 
 Zuo さん今日は、ひろです。
> ファイルの中に一個所”10月 2日”というかんじで、日付が
> 入っているのですが、これを検索して変数に入れる方法をおしえてください。
 もう少し具体性がないとレスが付けにくいです。「日付は必ず全角なのか?」、
「月日は 1 桁の場合はどの様に記載するのか?」等です。

 これが解れば、midstr 等で変数に格納するのは可能だと思います。

[ ]
RE:00494 ファイル内の文字列取得No.00496
Zuo さん 99/04/16 02:07
 

> Zuo さん今日は、ひろです。>> ファイルの中に一個所”10月 2日”というか
んじで、日付が
>> 入っているのですが、これを検索して変数に入れる方法をおしえてください。
> もう少し具体性がないとレスが付けにくいです。「日付は必ず全角なのか?」、
>「月日は 1 桁の場合はどの様に記載するのか?」等です。
>
> これが解れば、midstr 等で変数に格納するのは可能だと思います。

けっこういい加減で、日付は半角になったり全角のもあったりします。
基本的には全角が多いのですが。一桁の日付のときは左側に全角スペース
が入ることがあります。正規表現でいうと

[11]?[1-91-9]月[ 1-31-3]?[1-91-9]日

が近いでしょうか。さすがに4月25日などというデータはありませんが、
4月25日という形はあります。4月25日の形もあります。ランダムなの
で、格納は無理ですかね。

だめそうでしたら、数字はすべて全角だったとき(4月25日)の処理を
おしえていただけませんか? 後学のため。

[ ]
RE:00496 ファイル内の文字列取得No.00498
ひろ さん 99/04/16 15:52
 
 Zuoさん今日は、ひろです。
> けっこういい加減で、日付は半角になったり全角のもあったりします。
> 基本的には全角が多いのですが。一桁の日付のときは左側に全角スペース
 次のような感じで如何でしょうか?
//---------------------------------------------------------------
main:
  call getMonthDay;
  message $month+"\t"+$day;
  endmacro;

getMonthDay:
  gofileend;
  call save_search;
  searchup "[11]?[1-91-9]月[ 1-31-3]?[1-91-9]日",regular;
  $$char=gettext(seltopx,seltopy,selendx,selendy);
  ##month=strstr($$char,"月");
  #day=strstr($$char,"日");
  ##len=#day-##month;
  $month=leftstr($$char,##month);
  $day=midstr($$char,##month+2,##len-2);
  call toptrim $day;
  $day=$$return;
  call reset_search;
  return;

save_search://*******検索状態を保持
  #reg_search=getininum("hidemaru.ini","Env","SelectFound");
  if(!#reg_search){
    writeininum "hidemaru.ini","Env","SelectFound",1;
    envchanged;
  }$search=searchbuffer;
  #search=searchoption;
  return;

reset_search://******検索を初期状態に戻す
  if(!#reg_search){
    writeininum "hidemaru.ini","Env","SelectFound",#reg_search;
    envchanged;
  }setsearch $search, #search;
  return;

toptrim://文字列の先頭に空白文字が或る場合、空白文字を削除
  $$space="\t  ";//空白文字を定義
  while(1){
    ##word=strlen($$1);
    if(strstr($$space,leftstr($$1,2))!=-1)$$1=rightstr($$1,##word-2);
    else if(strstr($$space,rightstr($$1,2))!=-1)$$1=leftstr($$1,##word-2);
    //此所まで全角文字の対処
    else if(strstr($$space,leftstr($$1,1))!=-1)$$1=rightstr($$1,##word-1);
    else if(strstr($$space,rightstr($$1,1))!=-1)$$1=leftstr($$1,##word-1);
    else break;
  }return $$1;
//------------------------------------------------------------------------
 subroutine getMonthDay を使うと、$month に月が、$day に日付が入ります。

[ ]
RE:00498 ファイル内の文字列取得No.00511
Zuo さん 99/04/25 00:12
 

> Zuoさん今日は、ひろです。>> けっこういい加減で、日付は半角になったり全角
のもあったりします。
>> 基本的には全角が多いのですが。一桁の日付のときは左側に全角スペース
> 次のような感じで如何でしょうか?
>//---------------------------------------------------------------
>main:
>  call getMonthDay;
>  message $month+"\t"+$day;
>  endmacro;
>
>getMonthDay:
>  gofileend;
>  call save_search;
>  searchup "[11]?[1-91-9]月[ 1-31-3]?[1-91-9]日",regular;

ひろさん、ありがとうございます。

このgetMonthDay:はいいですね。さっそく改造を加えて別のところにも使って
みました。かなり使えそうですね。これからのマクロライフ?が楽しくなりそ
うです。

最初にgofileendでsearchupなのは、単に好みの問題ですか?
あがって、さがるのと変わりないですよね。

[ ]
RE:00511 ファイル内の文字列取得No.00514
ひろ さん 99/04/26 13:10
 
 Zuo さん今日は、ひろです。
> 最初にgofileendでsearchupなのは、単に好みの問題ですか?
> あがって、さがるのと変わりないですよね。
 秀丸の仕様上 cursor 位置は検索対象になりません。そこで file の先頭
に記述されていた場合の対処です。

[ ]
RE:00498 ファイル内の文字列取得No.00515
安久津 さん 99/04/27 00:25
 
こんにちはひろさん、安久津です。

発言00498で、ひろさん書く。
>searchup "[11]?[1-91-9]月[ 1-31-3]?[1-91-9]日",regular;

これは、次のようにしたほうがいいのでは?

searchup "[11]?[0-90-9]月[ 1-31-3]?[0-90-9]日",regular;

# 10月10日等にマッチ

ではでは。

[ ]
RE:00515 ファイル内の文字列取得No.00517
ひろ さん 99/04/27 11:31
 
 安久津さん今日は、ひろです。
> これは、次のようにしたほうがいいのでは?
>
> searchup "[11]?[0-90-9]月[ 1-31-3]?[0-90-9]日",regular;
 仰る通りです。ぼけてました(^^;。

[ ]