置換後に、新規ファイル作成をNo.03874
yamasan さん 03/09/25 12:30
 
こんにちは。yamasanと申します。お願いします。

やりたいことは、住所録のデータから、
一名一名別個のhtmlファイルを作りたいのです。

001\t氏名1\t住所1\t電話1
002\t氏名2\t住所2\t電話2
003\t氏名3\t住所3\t電話3
004\t氏名4\t住所4\t電話4
・・・・

という文字列を置換して、
各々をhtmファイルにして保存したいのですが、
分かりませんので、お尋ねします。

例が分かり難くて、申し訳ありませんが、

replaceall "^.[^\\t]*\\f\\t.[^\\t]*\\f\\t.[^\\t]*\\f\\t.+$", "<HTML><HEAD><T
ITLE>\\1</TITLE></head><body><table border=0><tr><td><b>\\1</b><br><br>住所
:\\2<br>TEL:\\3<br></td><td><img src=img/ce_\\0\.gif></td></tr></table>
</body></HTML>", regular;
replaceall "\\t", "", regular;
endmacro;

というマクロで、置換は出来ているんですが、
その後、<HTML>〜</HTML>を切り取って、
新規ファイルに保存することが出来ません。
ファイル名は、置換前の行頭の数字にしたいのです。

つまり、001.htm、002.htm、003.htm、・・・、です。
欠番があるといけないので、置換時に用いる\0から、
ファイル名をとりたいです。

ですので、置換時に<font color=\"#ffffff\">\\0\.htm</font>
等と、挿入して、\0.htmをファイル名に取り出そうとか、考えますが、
新規ファイルを作成して、というのが、未だマクロで分かりません。

どうぞ、お願い申し上げます。

[ ]
RE:03874 置換後に、新規ファイル作成をNo.03875
yamasan さん 03/09/25 16:01
 
お願いします。以前に、以下のようなマクロを教えていただきました。

//お教え頂いたマクロのsearchupとsearchdownを変えました
#reg_search = searchmode;
$search = searchbuffer;
#search = searchoption;
if( !#reg_search ){
  openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
  writeregnum "SelectFound",1;
  envchanged;
  closereg;
}
gofileend;
while( 1 ){
  searchup "<HTML>";
  if( !result )break;
  #bx = seltopx;
  #by = seltopy;
  left;
  searchdown "</HTML>";
  if( !result )continue;
  moveto selendx,selendy;
  beginsel;
  moveto #bx,#by;
  delete;
}
//検索を初期状態に戻す
if( !#reg_search ){
  openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
  writeregnum "SelectFound",#reg_search;
  envchanged;
  closereg;
}
setsearch $search, #search;
//マクロ終わり

このマクロの
  delete;
の箇所を変えればいいのでしょうか?

cutやpaste、newfileと、saveをどう組み合わせたらいいのでしょう?
厚かましいとは思いますが、どうぞ、お願いします。


[ ]
RE:03875 置換後に、新規ファイル作成をNo.03876
山紫水明 さん 03/09/25 20:59
 
 yamasanさん,こんばんは。


》001\t氏名1\t住所1\t電話1
》002\t氏名2\t住所2\t電話2
》003\t氏名3\t住所3\t電話3
》004\t氏名4\t住所4\t電話4
》・・・・

》という文字列を置換して、
》各々をhtmファイルにして保存したいのですが、
》分かりませんので、お尋ねします。

》例が分かり難くて、申し訳ありませんが、

 確かにわかりにくくて(^^; 誤解しているかも知れませんが,後掲のマクロでどう
でしょうか?
 名,マクロの中で,途中改行が入っている文は改行を外してください。
     では, (^^)/~
                                        山紫水明

//--------------------------------------------------------//
#y = 0;
#handle = hidemaruhandle( 0 );
disabledraw;
gofiletop;
while( code != eof ) {
    $nf[#y] = gettext( 0, #y, 3, #y ) + ".htm";
    #y = #y + 1;
    down;
}
replaceall "^.[^\\t]*\\f\\t.[^\\t]*\\f\\t.[^\\t]*\\f\\t.+$", "<HTML><HEAD><T
ITLE>\\1</TITLE></head><body><table border=0><tr><td><b>\\1</b><br><br>住所
:\\2<br>TEL:\\3<br></td><td><img src=img/ce_\\0\.gif></td></tr></table>
</body></HTML>", regular;
replaceall "\\t", "", regular;
#y = 0;
gofiletop;
while( code != eof ) {
    selectline;
    copy;
    newfile;
    paste;
    saveas $nf[#y];
    #handle2 = hidemaruhandle(0);
    setactivehidemaru #handle;
    closehidemaru #handle2;//新ファイルを閉じていく場合
    movetolineno 1, lineno + 1;
    #y = #y + 1;
}
reopen;//元のファイルを初めの状態に戻す時
endmacro;
//--------------------------------------------------------//


[ ]
RE:03876 置換後に、新規ファイル作成をNo.03877
yamasan さん 03/09/26 16:53
 
山紫水明さん、こんにちは。
このサポート掲示板では、度々、お世話になっています。
本当に、ありがとうございます。

結果から申します。解決しました〜!助かりました。

疑った訳ではないのですが(スイマセン)、
行頭の番号を不連続にして、

003\t氏名1\t住所1\t電話1
005\t氏名2\t住所2\t電話2
010\t氏名3\t住所3\t電話3
025\t氏名4\t住所4\t電話4

という例でも、希望通りに、ファイルを作成できることを、確認しました。
本当に、素晴らしいです! 
このマクロは、今後とも、少なからず使わせて頂きます。

お教え頂いた、マクロを暫く眺めているのですが、
理解できる部分も少しはありますが、やはり、自分では作れません。

    copy;
    newfile;
    paste;
    saveas $nf[#y];

と、縦に並べることで、他に記述しなくても、
順番に処理されることが、少し分かりました。

いつも、ご親切にありがとうございます。
繰り返し、重ねてお礼を申し上げます。
本当に、ありがとうございました。m(_ _)m

[ ]
RE:03876 置換後に、新規ファイル作成をNo.03878
yamasan さん 03/09/26 17:05
 
山紫水明さん、こんにちは。yamasanです。
スイマセンが、もう一つだけお尋ねしたいです。

お教え頂いたマクロを使って、

003\t氏名1\t住所1\t電話1
005\t氏名2\t住所2\t電話2
010\t氏名3\t住所3\t電話3
025\t氏名4\t住所4\t電話4

から、c_003.htm、c_005.htm、c_010.htm、c_025.htmと作成したい場合は、

    $nf[#y] = gettext( 0, #y, 3, #y ) + ".htm";
を、
    $nf[#y] = "c_" + gettext( 0, #y, 3, #y ) + ".htm";

とすることで、間違いないでしょうか?
うまく動作して作成できているようですが、
この書き方に誤りは無いでしょうか。
自信がないので、どうぞ、お教えください。ちょっと、不安です。

[ ]
RE:03878 置換後に、新規ファイル作成をNo.03879
山紫水明 さん 03/09/26 20:08
 
 yamasanさん,こんばんは。

》疑った訳ではないのですが(スイマセン)、

 「必要は発明の母,疑いは進歩の父」とか(^^;

》    $nf[#y] = gettext( 0, #y, 3, #y ) + ".htm";
》を、
》    $nf[#y] = "c_" + gettext( 0, #y, 3, #y ) + ".htm";

》とすることで、間違いないでしょうか?

 それでいいです。
 ちなみにこのマクロは頭の数字の部分が3桁の場合のみ正しく動きます。
 2桁や4桁の場合は単に数字を2や4にすればいいのですが,両方混じってい
たらうまくいきません。それに対応するマクロの書き方もありますが。
 それから,
003\t氏名1\t住所1\t電話1
が,折り返しなしの1行の時に限定されます。2行以上にわたる場合も,少しや
やこしいですが,対応できないことはありません。

     では, (^^)/~
                                        山紫水明

[ ]
RE:03879 置換後に、新規ファイル作成をNo.03880
yamasan さん 03/09/27 15:14
 
山紫水明さん、こんにちは。yamasanです。ありがとうございます。

> ちなみにこのマクロは頭の数字の部分が3桁の場合のみ正しく動きます。

   $nf[#y] = gettext( 0, #y, 3, #y ) + ".htm";

この事ですね。
3という数字があったので、やっと、理解出来た次第です…。

>たらうまくいきません。それに対応するマクロの書き方もありますが。

>が,折り返しなしの1行の時に限定されます。2行以上にわたる場合も,少しや
>やこしいですが,対応できないことはありません。

本当は、聞いておきたい気がしているのですが、
あまりに厚かましいので、このままやってみます。

行頭を3桁に合わせて、
折り返し無しの1行になっていることを確認してから、
やって行きます。お世話になりました。本当に、感謝しています。
重ねて、ありがとうございました。m(_ _)m

[ ]
RE:03880 置換後に、新規ファイル作成をNo.03881
山紫水明 さん 03/09/27 20:02
 
 yamasanさん,こんばんは。

》本当は、聞いておきたい気がしているのですが、

 前に書いたのはマクロとしては中途半端なので,改訂版以下に書いておきます。
 最初の while 文を以下のものに置き換えてください。

-----------------------------------
while( code != eof ) {
    #by = y;
    searchdown "\\t", regular;
    if( !result ) break;
    #ey = y;
    $nf[#y] = gettext( 0, #by, x, y ) + ".htm";
    #y = #y + 1;
    movetolineno 1, lineno + 1;
    if( y == #ey ) break;
}
-----------------------------------

 これで多分,桁数や折り返しに関わりなくできると思います。

     では, (^^)/~
                                        山紫水明

[ ]
RE:03881 置換後に、新規ファイル作成をNo.03884
yamasan さん 03/09/30 14:59
 
山紫水明さん、こんにちは。

ご丁寧にありがとうございます。いいものをお教え頂き、嬉しいです。
大変助かりました。今後とも、どうぞ、よろしくお願いします。m(_ _)m

[ ]
RE:03881 置換後に、新規ファイル作成をNo.03888
yamasan さん 03/10/04 15:28
 
山紫水明さん、こんにちは。yamasanです。
いつも、お教えありがとうございます。

> これで多分,桁数や折り返しに関わりなくできると思います。

一昨日、昨日と、150ほどのHTMLファイルを作成しましたが、
3桁の数字に、2文字を付け加えましたが、
見事に、間違いなく、ファイルが出来上がっていました。
優れものです。大事に、使わせて頂きます。

ありがとうございました。


[ ]