Miyamiyaの『★MMエディタ』掲示板1 2003年04/11     戻る

RE:2つのファイルの重複データを保存するマクロ 投稿者:Miyamiya
2003年4月11日(金)17時52分

satoruさんへ。
以下は、2つのファイルの重複データを保存するマクロです。
うまく処理できなかったデータの件も直しています。
実行前に「このデータが削除されますよ」というデータ一覧表示を出すのは無理です。
削除されたデータをバックアップとして保存を残すことは可能です。
ファイル名の最後に ".log"を付加して残すことにします。
結果を保存するファイルが abc.txt なら abc.txt.log になります。

------------------------------------------------------------------
#include <comdlg.h>
main()
{
int ans, fstat, cm;
char sfile[300], tfile[300], wfile[300], gfile[300];
char s[500], sbuf[10000], tbuf[10000];
FILE *sfp, *tfp, *wfp, *gfp;

strcpy(sfile, "");
strcpy(tfile, "");
if(OpenFileName(sfile, "*.txt") == -1 || strlen(sfile) < 1)
return;
if(OpenFileName(tfile, "*.txt") == -1 || strlen(sfile) < 1)
return;
getrfilename(wfile);
if(strlen(wfile) < 1)
return;

if((sfp = fopen(sfile, "rb")) == NULL)
{ // 存在しないファイル
strcpy(s, sfile);
strcat(s, "\nこのファイルは存在しません。終了します。");
Message(s);
return;
}
fclose(sfp);
if((tfp = fopen(tfile, "rb")) == NULL)
{ // 存在しないファイル
strcpy(s, tfile);
strcat(s, "\nこのファイルは存在しません。終了します。");
Message(s);
return;
}
if((wfp = fopen(wfile, "wb")) == NULL) // 書き込むファイルを開く
{
fclose(tfp);
return;
}
strcpy(gfile, wfile);
strcat(gfile, ".log");
if((gfp = fopen(gfile, "wb")) == NULL) // 書き込むファイルを開く
{
fclose(tfp);
fclose(wfp);
return;
}
fstat = GetFind();
SetFind(0x0);
cm = Margin();
SetMargin(3200);
Open(sfile); // ファイルを開く
DispOff2();
while(fgets(tbuf, 10000, tfp) != NULL)
{
Top();
Getline(sbuf);
strcat(sbuf, "\r\n");
if(strcmp(tbuf, sbuf) == 0) // 先頭行をチェック
fputs(tbuf, gfp);
else
{
SetFindS(tbuf);
while((ans = Find()) == 0 && Col() != 1)
;
if(ans != 0)
fputs(tbuf, wfp);
else
fputs(tbuf, gfp);
}
}
SetMargin(cm);
DispOn();
fclose(tfp);
fclose(wfp);
fclose(gfp);
Close();
SetFind(fstat);
Open(wfile); // 結果のファイルを開く
}

// 連結先のファイル名を得る
void getrfilename(char* fname)
{
static char mfile[520], f[300], sdir[300];
static char *fltstr[] = {"TXTファイル (*.txt)", "*.txt", "すべてのファイル (*.*)", "*.*", ""};
static OPENFILENAME ofn;
int i, len;
FILE *fp;

strcpy(mfile, "*.txt");
// OPENFILENAME構造体を初期化
for(len = i = 0; fltstr[i][0] != '\0'; i++)
{
strcpy(&f[len], fltstr[i]);
len += strlen(fltstr[i]) + 1;
}
f[len] = '\0';
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = Handle();
ofn.hInstance = GetInstance();
ofn.lpstrFilter = f;
ofn.nFilterIndex = 0;
ofn.lpstrFile = mfile;
ofn.nMaxFile = sizeof(mfile);
GetCurDirectory(sdir);
ofn.lpstrInitialDir = sdir;
ofn.lpstrTitle = "保存するファイル名を指定して下さい";
ofn.Flags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST;
ofn.lpstrDefExt = "txt";
// ダイアログでファイルを選択
if(GetSaveFileName(&ofn))
strcpy(fname, mfile);
else
strcpy(fname, "");
}
------------------------------------------------------------------


重複ファイルについて 投稿者:satoru
2003年4月10日(木)14時21分

宮崎様、お世話様でございます。

@2つのファイルの重複データ A重複行削除マクロ
どちらも、滞りなく動作いたしましたことをお伝えいたします。
ただ、@のほうなのですが、たまたまどちらのファイルにもあった1つの重複データが何故か削除されずに、最先頭行に存在しているのが分かりました。何度試行しても先頭に残っているのです。
その2つのデータを宮崎様のメール宛てにお送りしますので、ご確認していただけますでしょうか。

それと、この2つのマクロですが、「このデータが削除されますよ」というデータ一覧表示と、削除されたデータをバックアップとして保存(ログというのでしょうか?)を残すことは可能でしょうか?

何度もわがままばかり述べてしまいまして、大変申し訳ありません。
何卒、宜しくお願いいたします。

RE:重複行削除マクロ 投稿者:Miyamiya
2003年4月9日(水)16時21分

satoruさんへ。
以下のマクロは、1つのファイル内においての「重複行削除マクロ」です。
50万行まで、処理できます。
起動すると、ファイルを選択するダイアログが出ますので、処理するファイル名を
指定してください。そのファイル内の重複行を削除します。
その処理するファイルを開いている場合は、閉じてから実行してください。
うまく実行できれば、最後に、そのファイルを開きます。

------------------------------------------------------------------
#define MAXLINE 500000 // 処理できるMAX行
main()
{
char **pl; // 各行のデータエリア
char s[500], sfile[300], sbuf[10000];
FILE *sfp;
int i, j, cnt;

strcpy(sfile, "");
if(OpenFileName(sfile, "*.txt") == -1 || strlen(sfile) < 1)
return;
if((pl = (char**)malloc(MAXLINE * sizeof(char*))) == NULL)
return;
if((sfp = fopen(sfile, "rb")) == NULL)
{ // 存在しないファイル
strcpy(s, sfile);
strcat(s, "\nこのファイルは存在しません。終了します。");
Message(s);
return;
}
for(cnt = 0; fgets(sbuf, 10000, sfp) != NULL; cnt++)
{
if(cnt > MAXLINE || (pl[cnt] = (char*)malloc(strlen(sbuf) + 1)) == NULL)
{ // メモリが確保できないなら
for(i = cnt - 1; i >= 0; i--)
free(pl[i]);
free(pl);
fclose(sfp);
return;
}
strcpy(pl[cnt], sbuf);
}
fclose(sfp);

if((sfp = fopen(sfile, "wb")) == NULL) // 書き込むファイルを開く
return;
for(i = 0; i < cnt; i++)
{
if(pl[i][0] == '\0')
continue;
for(j = 0; j < cnt; j++)
{
if(i != j && strcmp(pl[i], pl[j]) == 0)
pl[j][0] = '\0';
}
}
for(i = 0; i < cnt; i++)
{
if(pl[i][0] != '\0')
fputs(pl[i], sfp);
}
for(i = cnt - 1; i >= 0; i--) // 作業エリアのメモリ解放
free(pl[i]);
free(pl);
fclose(sfp);
Open(sfile); // 結果のファイルを開く
}
------------------------------------------------------------------


RE:2つのファイルの重複データについて 投稿者:Miyamiya
2003年4月9日(水)16時14分

satoruさんへ。
大きなファイルを処理するなら、アプローチを変える必要があります。
以下のマクロを使ってみて下さい。

------------------------------------------------------------------
#include <comdlg.h>
main()
{
char s[500];
int fstat;
char sfile[300], tfile[300], wfile[300], sbuf[10000], tbuf[10000], fbuf[10000];
FILE *sfp, *tfp, *wfp;

strcpy(sfile, "");
strcpy(tfile, "");
if(OpenFileName(sfile, "*.txt") == -1 || strlen(sfile) < 1)
return;
if(OpenFileName(tfile, "*.txt") == -1 || strlen(sfile) < 1)
return;
getrfilename(wfile);
if(strlen(wfile) < 1)
return;

if((sfp = fopen(sfile, "rb")) == NULL)
{ // 存在しないファイル
strcpy(s, sfile);
strcat(s, "\nこのファイルは存在しません。終了します。");
Message(s);
return;
}
fclose(sfp);
if((tfp = fopen(tfile, "rb")) == NULL)
{ // 存在しないファイル
strcpy(s, tfile);
strcat(s, "\nこのファイルは存在しません。終了します。");
Message(s);
return;
}
if((wfp = fopen(wfile, "wb")) == NULL) // 書き込むファイルを開く
{
fclose(tfp);
return;
}
int fstat = GetFind();
SetFind(0x8); // 正規表現検索
Open(sfile); // ファイルを開く
DispOff2();
while(fgets(tbuf, 10000, tfp) != NULL)
{
Top();
Getline(sbuf);
strcat(sbuf, "\r\n");
if(strcmp(tbuf, sbuf) == 0) // まず、先頭行をチェック
continue;
strcpy(fbuf, "^");
strcat(fbuf, tbuf);
SetFindS(fbuf);
if(Find() != 0)
fputs(tbuf, wfp);
}
DispOn();
fclose(tfp);
fclose(wfp);
Close();
SetFind(fstat);
Open(wfile); // 結果のファイルを開く
}

// 連結先のファイル名を得る
void getrfilename(char* fname)
{
static char mfile[520], f[300], sdir[300];
static char *fltstr[] = {"TXTファイル (*.txt)", "*.txt", "すべてのファイル (*.*)", "*.*", ""};
static OPENFILENAME ofn;
int i, len;
FILE *fp;

strcpy(mfile, "*.txt");
// OPENFILENAME構造体を初期化
for(len = i = 0; fltstr[i][0] != '\0'; i++)
{
strcpy(&f[len], fltstr[i]);
len += strlen(fltstr[i]) + 1;
}
f[len] = '\0';
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = Handle();
ofn.hInstance = GetInstance();
ofn.lpstrFilter = f;
ofn.nFilterIndex = 0;
ofn.lpstrFile = mfile;
ofn.nMaxFile = sizeof(mfile);
GetCurDirectory(sdir);
ofn.lpstrInitialDir = sdir;
ofn.lpstrTitle = "保存するファイル名を指定して下さい";
ofn.Flags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST;
ofn.lpstrDefExt = "txt";
// ダイアログでファイルを選択
if(GetSaveFileName(&ofn))
strcpy(fname, mfile);
else
strcpy(fname, "");
}
------------------------------------------------------------------


2つのファイルの重複データについて  投稿者:satoru
2003年4月8日(火)22時01分

宮崎様 お世話様でございます。

御指示の通り、差し替えてみたところ、見事ちゃんと動作いたしました。
ただ、1, 000行ほどまでは滞りなく動作するのですが、2, 000行ほどで動作が鈍くなり、3, 000行ほどになると、MM本体が反応しなくなる現象が起きてきてしまいました。
一応、PCには512Mのメモリを入れているのですが、行数が多くなると難しい処理になってくるものなのでしょうか? 素人の意見、希望で真に申し訳なく思っております。
現場では、10万行くらいの処理まで、もしも滞りなく動作してくれると助かるのですが…。1行そのものは、10文字程度なのです。

それと、上記のマクロに関連することなのですが、1つのファイル内においての「重複行削除マクロ」というものも、もし可能であると、非常に印刷業界においてのテキストデータ管理作業に役立つもので、ぜひこの場を借りまして、お伺いさせていただきます。(こちらも、10万行ほどの作業能力があると非常に嬉しいのですが)

それでは何卒、宜しくお願いいたします。

RE:2つのファイルの重複データについて 投稿者:Miyamiya
2003年4月7日(月)15時25分

satoruさんへ。
1行目の
------------------------------------------------------------------
#include
------------------------------------------------------------------

------------------------------------------------------------------
#include <comdlg.h>
------------------------------------------------------------------
に差し替えてください。
そして、マクロキットの中に入っている comdlg.h ファイルを
マクロフォルダまたは、MMエディタのあるフォルダへ置いて下さい。
それで動くはずです。

2つのファイルの重複データについて  投稿者:satoru
2003年4月7日(月)01時45分

宮崎様、お世話様でございます。
お忙しいなか、希望したマクロをありがとうございます。
早速、動作確認をしてみましたところ、

「マクロ構文エラーが2行目で発生しました。」

というダイアログが出てしまいまして、残念ながら動作しませんでした。
下記に記されたマクロ構文を、慎重に何度かコピーして試したのですが、動きませんでした。
ちなみに、OSはWinXP Homeのデスクトップと、XP Proのノートの両方で試してみました。

何卒、ご教示願いますよう、宜しくお願いいたします。

RE:2つのファイルの重複データについて 投稿者:Miyamiya
2003年4月5日(土)16時34分

satoruさんへ。
以下のマクロを使ってみて下さい。
まず、ファイルを選択するダイアログが出ますので、「元データ(1)」の
ファイル名を指定してください。
続いて、ファイルを選択するダイアログが出ますので、「調査データ(2)」の
ファイル名を指定してください。
その後に、結果を保存するファイルを選択するダイアログが出ますので、
保存するファイル名を指定してください。
うまく実行できれば、最後に、結果を保存したファイルを開きます。

------------------------------------------------------------------
#include
main()
{
char s[500];
int match;
char sfile[300], tfile[300], wfile[300], sbuf[10000], tbuf[10000];
FILE *sfp, *tfp, *wfp;

strcpy(sfile, "");
strcpy(tfile, "");
if(OpenFileName(sfile, "*.txt") == -1 || strlen(sfile) < 1)
return;
if(OpenFileName(tfile, "*.txt") == -1 || strlen(sfile) < 1)
return;
getrfilename(wfile);
if(strlen(wfile) < 1)
return;

if((sfp = fopen(sfile, "rb")) == NULL)
{ // 存在しないファイル
strcpy(s, sfile);
strcat(s, "\nこのファイルは存在しません。終了します。");
Message(s);
return;
}
if((tfp = fopen(tfile, "rb")) == NULL)
{ // 存在しないファイル
strcpy(s, tfile);
strcat(s, "\nこのファイルは存在しません。終了します。");
Message(s);
fclose(sfp);
return;
}
if((wfp = fopen(wfile, "wb")) == NULL) // 書き込むファイルを開く
{
fclose(sfp);
fclose(tfp);
return;
}
while(fgets(tbuf, 10000, tfp) != NULL)
{
if(strcmp(tbuf, "\r\n") == 0) // 空行
continue;
match = 0;
fseek(sfp, 0, 0); // ファイルポインタを先頭へ
while(fgets(sbuf, 10000, sfp) != NULL)
{
if(strcmp(tbuf, sbuf) == 0)
{
match = 1;
break;
}
}
if(match == 0)
fputs(tbuf, wfp);
}
fclose(wfp);
Open(wfile); // 結果のファイルを開く
}

// 連結先のファイル名を得る
void getrfilename(char* fname)
{
static char mfile[520], f[300], sdir[300];
static char *fltstr[] = {"TXTファイル (*.txt)", "*.txt", "すべてのファイル (*.*)", "*.*", ""};
static OPENFILENAME ofn;
int i, len;
FILE *fp;

strcpy(mfile, "*.txt");
// OPENFILENAME構造体を初期化
for(len = i = 0; fltstr[i][0] != '\0'; i++)
{
strcpy(&f[len], fltstr[i]);
len += strlen(fltstr[i]) + 1;
}
f[len] = '\0';
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = Handle();
ofn.hInstance = GetInstance();
ofn.lpstrFilter = f;
ofn.nFilterIndex = 0;
ofn.lpstrFile = mfile;
ofn.nMaxFile = sizeof(mfile);
GetCurDirectory(sdir);
ofn.lpstrInitialDir = sdir;
ofn.lpstrTitle = "保存するファイル名を指定して下さい";
ofn.Flags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST;
ofn.lpstrDefExt = "txt";
// ダイアログでファイルを選択
if(GetSaveFileName(&ofn))
strcpy(fname, mfile);
else
strcpy(fname, "");
}
------------------------------------------------------------------


2つのファイルの重複データについて 投稿者:satoru
2003年4月4日(金)14時45分

お世話様でございます。
いつもMMエディタを重宝させていただいております。
ひとつ質問なのですが、2つのテキストファイル「元データ(1)」と「調査データ(2)」を比較させ、重複しているデータがあった場合、(2)から重複しているデータのみを省いて保存できるような機能というのは、果たして可能なのでしょうか?
例として







という元データがあったとして







という調査ファイルがあったとしたら




というデータだけ残るというものなのですが……。
お忙しいところ、ご教示くださいますよう、よろしくお願いいたします。

RE:縦書き書式の登録について 投稿者:Miyamiya
2003年3月29日(土)10時38分

papyrusさんへ。
メニュー「その他」の縦書き、横書きの変更て、横書きから縦書きに変更した
場合は、単に縦書きになるだけで、登録してある縦書きの書式の内容に変わる
わけではありません。横書き用に使われている MMSTD.ds1に登録されている内容
のままです。

横書と縦書きの書式をテキストにより使い分けるには、
縦書きのテキストは、拡張子を決めておき、
環境設定の 関連付け で 拡張子に表示書式ファイルを関連付ける をチェックして、
横書きと縦書きの書式の二種類を登録しておけば、
起動時に、テキストの拡張子によって、横書きと縦書きに個別にそれぞれの書式の
内容で起動します。

縦書き書式の登録について 投稿者:papyrus
2003年3月28日(金)15時38分

お世話になります。
妙な具合で直った?ようですが、
>チェックした場合に、次回の起動が縦書きで起動するか横書きで起動するかは
>その表示書式ファイルを最後に保存したときの状態(縦書きか横書きか)と同じに
>なります。
そうですね。それで一度「表示設定の変更で、書式ファイルを更新」に
チェックを入れて起動させた場合はどうか、と思いやってみたのです。
そうしたら間違いなく、前回閉じた状態と同じ寸法で閉じました。
ただ、始終縦書きを使っているわけではないので、圧倒的に横書きが多いので、
これでは困るので、こんどは「表示設定の変更で、書式ファイルを更新」の
チェックを外しました。そうしたら次回から、横書きから書式ファイルを縦書きに変更しても、最後に登録したと同じ状態で、再現されました。
その状態のまま、現在も使えております。
縦書きで、文字数が違う書式もあるのですが、それも全く良い状態で、
使えております。
現在では、MMSTD.ds1と縦書きの書式の二種類を登録してあります。
他の文字数の物も問題なく出るので、この登録は関係が無いのかも知れませんが。
この場合、エディター本体のメニューで「その他」の所の縦書き、横書きの変更の所では横書きから、縦書きに変更した場合、登録してある縦書きの書式で出て
言い訳ですね。たぶんそうだと思うのですが。
現状ではとにかく問題なさそうなので、このままにしておきます。
ただ、私のパソコンは古くPC9821なもので、ソフト的にも、すこし
無理が来ているのかなとも思っています。
有難うございました。



RE:縦書き書式の登録について 投稿者:Miyamiya
2003年3月27日(木)11時05分

papyrusさんへ。
もう一つそちらの状態が掴めないのですが、問題なければその状態で使って
ください。
ちなみに、環境設定の 関連付け で 拡張子に表示書式ファイルを関連付ける を
チェックした場合に、次回の起動が縦書きで起動するか横書きで起動するかは
その表示書式ファイルを最後に保存したときの状態(縦書きか横書きか)と同じに
なります。

縦書き書式の登録について  投稿者:papyrus
2003年3月26日(水)12時07分

いろいろと御迷惑をかけます。
実はMMエディターを起動ご一度「表示設定の変更で書式ファイルを更新」に
チェックを入れてみました。
再度起動した時には、これまでは横書きで表示されていましたが、
縦書きで表示されるようになり、登録した状態を維持していました。
そこで、今度は「表示設定の変更で書式ファイルを更新」のチェックを外しました。
そして「その他」の所の「縦・横書きモードの変更」を行ったところ、
以前使っていた横書きの設定の状態で出ました。さらに今度縦書き20字の書式を呼び出したところ、登録したときに状態のまま、表示されました。
直った? のかな、と言う気持ちです。
何だか、よく分からないのですが、他の文字数の縦書きも大丈夫のようです。
このままで、多分大丈夫なのでは? という感じです。
いろいろと御迷惑をかけました。もし使用中にまた何か現象がおきましたら、
また、相談にのってください。
いろいろと有難うございました。

RE:縦書き書式の登録について 投稿者:Miyamiya
2003年3月26日(水)11時02分

papyrusさんへ。
ちょっとこちらでは再現しません。
標準書式ファイル Mmstd.ds1 を読み込んで、縦書き、原稿用紙風 にしても
同じようになるでしょうか。
また、環境設定の 関連付け で 拡張子に表示書式ファイルを関連付ける を
チェックしての場合はどうでしょうか。

縦書き書式の登録について 投稿者:papyrus
2003年3月25日(火)15時49分

いつもお世話になります。
>最後の設定値が3ドットで、次回起動したときの設定欄の文字間隔も3ドット
>しかし、文字間隔が以前とちがっていて6ドットにするとちょうどいいという
>ことは、フォントの大きさが変わっているということしか考えられませんが、
>そういうことでしょうか。
そうではありません。
現在、原稿用紙風というモードで使っていますが、
文字フォントも「表示設定」で見ると同じ11ポイントです。
そして送りのポイントも変っていません。
ただ、画面表示で3ポイントで登録し、呼び出した場合には画面上は短く、
罫線は扁平に表示されています。
6ポイントで登録した時は画面上は長くはみ出してしまっています。
この場合には罫線が縦長に間延びしています。
なんだかよく分からないのですが、ご検討よろしくお願いします。

RE:縦書き書式の登録について 投稿者:Miyamiya
2003年3月25日(火)11時10分

papyrusさんへ。
最後の設定値が3ドットで、次回起動したときの設定欄の文字間隔も3ドット
しかし、文字間隔が以前とちがっていて6ドットにするとちょうどいいという
ことは、フォントの大きさが変わっているということしか考えられませんが、
そういうことでしょうか。

縦書き書式の登録について 投稿者:papyrus
2003年3月24日(月)14時29分

例えばといっても同じことを書くしかないのですが、
3ドットで丁度よくなって登録します。
ですが、次回起動した時には短く縦幅が短くなってしまっているのです。
そこで、丁度良くなるように調整すると、6ドットになるのです。
また、登録して再び起動するとこんどは画面から数文字ぶんはみだして
しまっています。
丁度良く納るまで、調整し直し、起動しなおすと、縦幅が短くなりすぎています。
なんど繰り返しても同じことなのです。
こういった現象は他の方には起きていないのでしょうか。

RE:縦書き書式の登録について 投稿者:Miyamiya
2003年3月24日(月)11時22分

papyrusさんへ。
書かれている意味がよくわからないのですが。
次回起動したときの文字間隔は最後に設定したときの間隔になるはずです。
最後の設定値が3ドットなら3ドット、6ドットなら6ドットになります。
実際にそうなっているかは、次回起動したときに設定欄の文字間隔を確認
すればいいです。
画面に表示された時、丁度良くなるのが3ドットか6ドットかどちらかは、
実際にその値を設定したときに画面が更新されますから、設定時にわかります。

縦書き書式の登録について 投稿者:papyrus
2003年3月23日(日)11時35分

いつもお世話になります。
実はよく縦書きで入力をするのですが、縦の文字数は20字で、
文字サイズは11ポ、最初の設定で文字間が3ドットになっています。
画面下にかなりあきができるので、文字間6ドットにして登録します。
すると次回起動して縦20字の書式を呼び出しますと、
何文字ぶんか画面の下に隠れて表示されてしまいます。
今度はそのままの状態で縦のドットをもとの3ドットにもどすと、
画面の下ほどよいあきで、表示されます。そこで再度終了して
また改めて起動して、縦20字の書式を呼び出しますと、また今度は一番最初と
同じで下にかなりの空きができてしまいます。
画面に表示された時、丁度良くなるのが3ドットか6ドットかどちらか
分からないのですが、画面上丁度良い状態にして、登録した時に、
次に起動してその設定を呼び込んだ時に、同じ状態にならないものなのでしょうか。
いつも伸ばしたり、縮めたり繰り返しているのです。
どこかの設定で、出来るのならば、申し訳ないのですが、
教えて頂けないでしょうか。
よろしくお願いします。

Meでインストール失敗 投稿者:ぱとくん
2003年3月21日(金)20時53分

二重投稿すみませんでした。
さきほど3度目のダウンロードをいたしましたら、
成功いたしました。
お騒がせして申し訳ありませんでした。

Meでインストール失敗 投稿者:ぱとくん
2003年3月21日(金)17時22分

初歩的な質問ですみません。
Meのパソコンを手に入れたのですが、
解凍しようとすると
「インストール」に失敗しましたと出てしまいます。
どうしたらいいんでしょう?
ひょっとしてMeでは使えないのでしょうか?
すみませんが、どなたかご教授ください。
よろしくお願いいたします。

桁位置の改行削除の件 投稿者:papyrus
2003年3月17日(月)15時26分

桁位置の改行削除のマクロは
無事動作しました。
いつもいつも助かります。
ありがとうございました。
連絡が遅くなって申し訳有りませんでした。



RE:桁位置の改行削除の件 投稿者:Miyamiya
2003年3月17日(月)11時22分

papyrusさんへ。
Filecat.mamの件は、うまく動いたようですね

指定桁位置での改行削除のマクロは、以下を使ってみてください。
ウインドウがでますので、そこに改行位置の数値を入力してください。
桁位置は3種類まで、指定できます。
複数の場合は
17 19 21
のように、半角スペースで区切って入力してください。
範囲を選択してから実行してください。

----------------------------------------------------------
main()
{
int colm[3] = {0, 0, 0};
int i, co, nn, stln, endln;
char s[300], *p;

if(Block() != 1 && Block() != 2)
{
Beep();
Message("範囲を選択して下さい。");
return; // 範囲が選択されていないなら NG
}
if(GetStr("削除する改行の桁位置を指定してください", s) < 0)
return; // 文字列の入力がなければ NG
for(i = 0, p = strtok(s, " "); i < 3 && p != NULL; i++, p = strtok(NULL, " "))
colm[i] = Atoi(p);

stln = SelLn(); // 開始行
endln = Line(); // 最終行
Select(0);
LEdge();
for(nn = 0; Line() > stln; )
{
if(KbHit() == 0x1b) // [ESC]が押されたら中断する
break;
Up();
REdge();
co = Col();
if(co == colm[0] || co == colm[1] || co == colm[2])
{
if(nn == 0)
nn = 1;
else
Del();
}
else
nn = 0;
}
}
----------------------------------------------------------


RE:XPにしたのはいいのですが・・・・ 投稿者:Miyamiya
2003年3月17日(月)11時19分

ojarumaruさんへ。
XPにしたところユーザ登録IDかユーザ名が間違っているという
エラーで登録できません。
と言うことでしたら、入力が間違っています。
半角、全角、大文字、小文字に注意して入力してください。
どうしても登録できないなら、こちら(miyamiya@po.saganet.ne.jp)まで
メールにて直接お問い合わせ下さい。

桁位置の改行削除の件 投稿者:papyrus
2003年3月15日(土)20時33分

申し訳有りません、
マクロの部分を掲示板から複写してテキストファイルにした時点で、
改行が全てなくなり、全部が繋がってしまいました。
わかりにくいので、トップの桁位置の指定箇所のみ改行を入れて
マクロファイルに下のですが、それではロックしてしまったのですが、
ためしに一行ずつ掲示板から複写を取り、
改行を入れていって実行したら、動作しました。
すみませんでした。
ただ、先程書き込みましたように、
毎回位置が変るもので、
出来ましたら、ウインドーがでて、そこに改行位置の数値を
入力できるようにして頂けると有り難いのですが。
よろしくお願いします。

Filecat.mamでファイル名が見えない 投稿者:papyrus
2003年3月15日(土)20時17分

Filecat.mam の件は無事に使えるようになりました。
ありがとうございました。
それと早速作っていただいたマクロなのですが、
実は、下の17、19、21の位置に改行位置の数字を入れていくのだと思いますが、
数字を入れて範囲指定してマクロを起動させると画面がロックされて、
CTR+ALT+DELで終了させないとMMエディターを終了させることが
出来なくなってしまいます。数字を入れる場所が違うのでしょうか。
それて、もう一点は、最初に言っておけば良かったのかも知れないのですが、
使用するたび毎回改行位置が変るために、出来れば
ウインドウがでで、数値を入力して実行させるようになると
大変たすかるのですが、如何でしょうか。

   ここの数字を書き変えるのでしょうか。
         ↓
>#define COLUM1 17 // ここで桁位置を指定します。
>#define COLUM2 19 // 3個まで指定できます。
>#define COLUM3 21 //

矢印の位置が変ってしまうと行けないのですが、
数字の17の真上に載っています。

カーソルの影の件は、さしたる問題ではないので、
結構です。気になさらないでください。
それではよろしくお願いします。

XPにしたのはいいのですが・・・・ 投稿者:ojarumaru
2003年3月15日(土)19時48分

ベクターレジサービスを利用してMMエディタを7.03の時に
購入したのですが、OSをXPにしたところユーザ登録IDか
ユーザ名が間違っているというエラーで登録できません。
何度も確認してやってみたのですが・・・・・。
対処方法を教えていただけますでしょうか?

RE:Filecat.mamでファイル名が見えない 投稿者:Miyyamiya
2003年3月15日(土)11時00分

papyrusさんへ。
ATOKの件は、症状はわかりましたが、再現できませんので、原因はちょっと
わかりません。
Filecat.mamの件は、以前はよかったということなら、設定ファイルが壊れて
いるかもしれません。54行目の
----------------------------------------------------------
Strcat(grdic, "\\Mm.ini"); // 設定 INIファイル
----------------------------------------------------------

----------------------------------------------------------
Strcat(grdic, "\\Mm01.ini"); // 設定 INIファイル
----------------------------------------------------------
に、変更してみてください。
それで、うまく動くかもしれません。

指定桁位置での改行削除のマクロは、以下を使ってみてください。
範囲を選択してから実行してください。
削除する桁位置は3種類まで、指定できます。(先頭の 17,19,21 と
なっている部分です)

----------------------------------------------------------
#define COLUM1 17 // ここで桁位置を指定します。
#define COLUM2 19 // 3個まで指定できます。
#define COLUM3 21 //
main()
{
int co, nn, stln, endln;

if(Block() != 1 && Block() != 2)
{
Beep();
Message("範囲を選択して下さい。");
return; // 範囲が選択されていないなら
}
stln = SelLn(); // 開始行
endln = Line(); // 最終行
Select(0);
LEdge();
for(nn = 0; Line() > stln; )
{
if(KbHit() == 0x1b) // [ESC]が押されたら中断する
break;
Up();
REdge();
co = Col();
if(co == COLUM1 || co == COLUM2 || co == COLUM3)
{
if(nn == 0)
nn = 1;
else
Del();
}
else
nn = 0;
}
}
----------------------------------------------------------


 ↓ ずれてしまいました。 投稿者:papyrus
2003年3月14日(金)15時25分

すみません、ずれてしまいました。下の欄の矢印↓位置は

それぞれ■の上下につきます。

よろしくお願いします。

Filecat.mamでファイル名が見えない 投稿者:papyrus
2003年3月14日(金)15時23分

いつもありがとうございます。

>Filecat.mamでファイル名が見えない
>の件は、riemamaさんへ書いたコメントをご覧ください。

私は通常macroというホルダーにマクロファイルをいれて使用しておりますが、
そのなかにはもちろんFilecat.mamaとMmDialog.hも入っています。
この二つをMMエデイターの実行ファイルのフォルダーにいれても状態は変りません。
スクロールバーだけは見えてファイル数に応じて(?)短くなっていくのが、
見えています。ですが、ファイルは全く見えていません。
それと、呼び込んだファイルの境に点線をいれる指定のボックスがありますが、
正常な時には点線が見えていたのですが、これも見えません。

>ATOKの件は、ちょっと再現できませんが、背景色が関係しているかもしれません。
>再現できるなら、詳しい手順を教えてください。
>最新の ATOK16 でもなりますか。

これに関しては、いま試しにやってみたのですが、現象は再現できていません。
文字の量にも関係するのかも知れませんが、ただ、いつも文字を入力して確定した後、
数文字分戻って挿入しようとした時に最後に確定した処にカーソルの影が残っているのです。もとろんカーソルは左へと移動しているのですが…
背景色は使用していません。白で黒の文字で使っています。

                        影として残っているカーソル
                        ↓
○○○○○○○○○○○○○○○○○■○○○○○○■←
                 ↑
           挿入しようとして移動したカーソル
こんな具合です。
ただ、現在ATOK16は使用していないので一寸わかりません。

マクロの件ですが
文章中の決った位置にある改行を削除したい時に使用したいのですが、



1○○○○○○○○○○○○○○○○○○○○○○←
2○○○○○○○←
3○○○○○○○←
4○○○○○○○←
5○○○○○○○○○○○○○○○○○○○○○○

矢印は改行です。この場合、2〜4行の処の改行のみを取って連続させたい
という時に使いたいのです。ワープロなどで作成した物をテキストファイルに
変換した時によくあるのですが、全行に改行が入っている場合などもあります。
2〜4行の上の例で言えば8文字で16桁(数字も含む)として17桁目の改行を
削除したいときに使いたいのです。
もし可能ならば、禁則処理などで改行位置が1〜2文字ずれてしまっている場合も
あるのですが、可能ならば、その削除する桁が2〜3種類同時に削除できるような
機能があると助かるのですが。(2種類でも大変助かります)

よろしくお願いします。

Filecat.mamでファイル名が見えない 投稿者:papyrus
2003年3月14日(金)15時18分

いつもありがとうございます。

>Filecat.mamでファイル名が見えない
>の件は、riemamaさんへ書いたコメントをご覧ください。

私は通常macroというホルダーにマクロファイルをいれて使用しておりますが、
そのなかにはもちろんFilecat.mamaとMmDialog.hも入っています。
この二つをMMエデイターの実行ファイルのフォルダーにいれても状態は変りません。
スクロールバーだけは見えてファイル数に応じて(?)短くなっていくのが、
見えています。ですが、ファイルは全く見えていません。
それと、呼び込んだファイルの境に点線をいれる指定のボックスがありますが、
正常な時には点線が見えていたのですが、これも見えません。

>ATOKの件は、ちょっと再現できませんが、背景色が関係しているかもしれません。
>再現できるなら、詳しい手順を教えてください。
>最新の ATOK16 でもなりますか。

これに関しては、いま試しにやってみたのですが、現象は再現できていません。
文字の量にも関係するのかも知れませんが、ただ、いつも文字を入力して確定した後、
数文字分戻って挿入しようとした時に最後に確定した処にカーソルの影が残っているのです。もとろんカーソルは左へと移動しているのですが…
背景色は使用していません。白で黒の文字で使っています。

                        影として残っているカーソル
                        ↓
○○○○○○○○○○○○○○○○○■○○○○○○■←
                 ↑
           挿入しようとして移動したカーソル
こんな具合です。
ただ、現在ATOK16は使用していないので一寸わかりません。

マクロの件ですが
文章中の決った位置にある改行を削除したい時に使用したいのですが、



1○○○○○○○○○○○○○○○○○○○○○○←
2○○○○○○○←
3○○○○○○○←
4○○○○○○○←
5○○○○○○○○○○○○○○○○○○○○○○

矢印は改行です。この場合、2〜4行の処の改行のみを取って連続させたい
という時に使いたいのです。ワープロなどで作成した物をテキストファイルに
変換した時によくあるのですが、全行に改行が入っている場合などもあります。
2〜4行の上の例で言えば8文字で16桁(数字も含む)として17桁目の改行を
削除したいときに使いたいのです。
もし可能ならば、禁則処理などで改行位置が1〜2文字ずれてしまっている場合も
あるのですが、可能ならば、その削除する桁が2〜3種類同時に削除できるような
機能があると助かるのですが。(2種類でも大変助かります)

よろしくお願いします。

RE:Filecat.mamでファイル名が見えない 投稿者:Miyamiya
2003年3月14日(金)11時02分

papyrusさんへ。
Filecat.mamでファイル名が見えない
の件は、riemamaさんへ書いたコメントをご覧ください。

ATOKの件は、ちょっと再現できませんが、背景色が関係しているかもしれません。
再現できるなら、詳しい手順を教えてください。
最新の ATOK16 でもなりますか。

指定桁位置での改行削除のマクロとは、どういうものでしょうか。
簡単な例文を書いてもらえませんか。

RE:Filecat.mamでファイル名が見えない 投稿者:Miyamiya
2003年3月14日(金)11時01分

riemamaさんへ。
マクロキットの中に、Filecat.mam で使用している MmDialog.h と言うファイルが
ありますが、このファイルを、MMエディタのあるフォルダではなくて、
Filecat.mam と同じファルダヘ置いてみてください。
それで、うまく動くようになるかもしれません。

Filecat.mamでファイル名が見えない 投稿者:papyrus
2003年3月13日(木)18時38分

私にも同じ現象が起きています。
大分以前にもこの問題が起きてこの掲示板でやりとりがあったのですが、
その時も既に私の方ではこの現象が起きておりました。
マシンが古いせいかとも思っていたのですが…。
環境はwindows98se
MMエディターはver7.15です。
私の場合は最初は使えていました。
何の設定も変えていないのに、ある日突然使えなくなったのです。
何か原因があると思うのですが…。

それと、実はATOK14を使っていますが、
入力中にカーソルを前に戻したりすると
もとカーソルがあった位置に影が残るのです。常にではないのですが、
この現象はよく起ります。大分以前のバージョンからです。
別に実害があるわけではないので、次いでの時でよいのですが。

最後に申し訳ないのですが、マクロの依頼です。
マクロのコーナーを拝見したのですが、どもう無いようなので…。
指定桁位置での改行削除のマクロを是非お願いしたいのです。
本当はこれをお願いするつもりで掲示板を見たのですが、
私と同じ現象が起きている方がいるようなので…

よろしくお願いします。

Re: マクロをご教授願います 投稿者:藤井 深
2003年3月13日(木)18時33分

宮崎さん、こんばんは。藤井です。いつもお世話になります。

> SetRep(0x444); // 一括置換 正規表現モード
> SetFindS("\\\\verb/\\\(.+\\\)/");
> SetRepS("\\1");
> Replace();
> SetFind(fstat);
> SetRep(rstat);

有り難うございました。書物も読んでみたのですが、なかなかでし
た。

2003年3月13日(木)午後6時31分
藤井深≪fukashi@mbc.nifty.com≫

Filecat.mamでファイル名が見えない 投稿者:riemama
2003年3月13日(木)12時54分

いつもお世話になっております。

愛用のFilecat.mamに異変が起きました。
「登録したマクロの実行」から、Filecat.mamを起動すると
フォルダ設定ダイアログでフォルダを指定してもテキストファイルの一覧が取得できなくなりました。

スクロールバーは上下するのですが
ファイル名が見えません。
見えないだけかと思いCtrl+Aで選択して「追加」し、「実行」しても「連結するファイルを2個以上選択してください」となります。

MMエディタバージョン:7.15
Filecat.mam:2002/05/20公開分
マクロキット:7.13
OS:WindowsXP

同じ環境のサブマシンのほうでは正常に動きます。

どうしたらよいでしょう?(T-T)

RE:マクロをご教授願います 投稿者:Miyamiya
2003年3月13日(木)11時22分

藤井 深さんへ。
これはスラッシュの中の文字だけを残したいということですね。
そうすると、正規表現のタグ付き置換になります。

----------------------------------------------------------
main()
{
int fstat = GetFind();
int rstat = GetRep();
SetRep(0x444); // 一括置換 正規表現モード
SetFindS("\\\\verb/\\\(.+\\\)/");
SetRepS("\\1");
Replace();
SetFind(fstat);
SetRep(rstat);
}
----------------------------------------------------------


Re: マクロをご教授願います 投稿者:藤井 深
2003年3月12日(水)18時17分

宮崎さん、こんばんは。藤井です。いつもお世話になります。

> SetFind(0x0); // 正規表現は使わない
> SetFindS("\\verb//");
> SetRepS("");
> Replace();

駄目だったです。以下のようにしたいのです。私の希望をご理解し
て頂けていないのだと思います。

\verb/○/



スラッシュの扱いは正規表現でも難しいから、なんらかの形でエス
ケイプするようですが、私にはやり方が分かりません。宜しくお願
い致します。

2003年3月12日(水)午後6時16分
藤井深≪fukashi@mbc.nifty.com≫

Re: マクロをご教授願います 投稿者:Miyamiya
2003年3月12日(水)11時09分

藤井 深さんへ。
「\verb//」だけを削除したいのなら
----------------------------------------
SetFind(0x0); // 正規表現は使わない
SetFindS("\\verb//");
SetRepS("");
Replace();
----------------------------------------
で、可能です。
この置換では、正規表現は必要ないでしょう。

RE:問題の順番を変えるマクロ 投稿者:Miyamiya
2003年3月12日(水)10時59分

まささんへ。
以下のマクロを使ってみて下さい。
ソートする範囲を選択してから実行してください。

----------------------------------------------------------
char **pl; // 各行のデータエリア
int *npl;
main()
{
int i, j, stln, endln, lnnum;
char line[3300];

if(Block() != 1 && Block() != 2)
{
Beep();
Message("行ソートする範囲を選択して下さい。");
return; // 範囲が選択されていないなら
}
stln = SelLn(); // ソート開始行
endln = Line(); // ソート最終行+1
lnnum = endln - stln;
Select(0);
if((pl = (char**)malloc(lnnum * sizeof(char*))) == NULL)
return;
GoLine(stln);
LEdge();
for(i = 0; i < lnnum && Tcode() > 0; i++)
{
if(KbHit() == 0x1b) // [ESC]が押されたら中断する
break;
if((pl[i] = (char*)malloc(Linelen() + 1)) == NULL)
{ // メモリが確保できないなら
for(j = i - 1; j >= 0; j--)
free(pl[j]);
free(pl);
return;
}
Forward();
Getline(line);
strcpy(pl[i], &line[Col()-1]);
DelAfter();
LEdge();
Down();
}
if((npl = (int*)malloc(lnnum * sizeof(int))) == NULL)
{ // メモリが確保できないなら
for(j = i - 1; j >= 0; j--)
free(pl[j]);
free(pl);
return;
}
sort(lnnum);
GoLine(stln);
LEdge();
for(i = 0; i < lnnum; i++)
{
if(KbHit() == 0x1b) // [ESC]が押されたら中断する
break;
Forward();
PutStr(pl[npl[i]]);
LEdge();
Down();
}
free(npl);
for(i = lnnum - 1; i >= 0; i--) // 作業エリアのメモリ解放
free(pl[i]);
free(pl);
}

// 配列 npl[0..inum-1] をランダムに並べ替える
void sort(int lnum)
{
int i, j, jj, k, min;

for(i = 0; i < lnum; i++)
npl[i] = -1;
for(min = i = 0; i < lnum; i++)
{
k = rand() % lnum;
for(j = 0; j < lnum; j++)
{
if(npl[j] == k)
break;
}
if(j == lnum)
npl[i] = k;
else
{
for(j = min; j < lnum; j++)
{
for(jj = 0; jj < lnum; jj++)
{
if(npl[jj] == j)
break;
}
if(jj == lnum)
break;
}
npl[i] = j;
min = j + 1;
}
}
}
----------------------------------------------------------


Re: マクロをご教授願います 投稿者:藤井 深
2003年3月11日(火)16時56分

宮崎さん、こんにちは。藤井です。いつもお世話になります。

> SetFind(0x0); // 正規表現は使わない
> SetFindS("\\verb/\\/");
> SetRepS("\\");
> Replace();

有り難うございました。それで、問題を蒸し返すようで申し訳ない
のですが、この\verbというコマンドは「\」以外にもよく使うので
す。「{」とか、「<」とか。ですから、やはり正規表現で、「\ver
b//」だけを削除したいのですが。済みませんがお願い致します。

2003年3月11日(火)午後4時55分
藤井深≪fukashi@mbc.nifty.com≫

RE:問題の順番を変えるマクロ 投稿者:Miyamiya
2003年3月11日(火)12時11分

まささんへ。
行の内容だけをランダムにソートするということですね。
そうすると、その部分だけを切り出して、ランダムにソートすると
いうことになります。
作ってみますので、少し待ってください。

RE:マクロをご教授願います 投稿者:Miyamiya
2003年3月11日(火)12時09分

藤井 深さんへ。
正規表現は使わない普通の置換ということです。

SetFind(0x0); // 正規表現は使わない
SetFindS("\\verb/\\/");
SetRepS("\\");
Replace();

問題の順番を変えるマクロ  投稿者:まさ
2003年3月11日(火)00時01分

宮崎さん、こんにちは。いつもお世話になります。

ご紹介いただいたマクロはソート用ですよね。
僕はランダムに変化させたいのです。

できれば、

1ああああ
2いいいい
3うううううう
4えええ

などの数字部分は変化させずにです。

Re: マクロをご教授願います 投稿者:藤井 深
2003年3月10日(月)15時47分

宮崎さん、こんにちは。藤井です。いつもお世話になります。

> これはマクロというより、普通の置換でできます。
> 検索文字列 \verb/\/
> 置換文字列 \

これは、以下のようにする、という意味でしょうか?

SetFindS("\verb/\/");
SetRepS("\");
Replace();

このマクロを、正規表現のマクロと一緒に記述しますと、マクロが
動作しないんです。私は、一緒に、一度に置換してしまいたいので
すが。助言をお願いします。

2003年3月10日(月)午後3時46分
藤井深≪fukashi@mbc.nifty.com≫

問題の順番を変えるマクロ 投稿者:Miyamiya
2003年3月10日(月)11時43分

まささんへ。
その様なことをするマクロ MM:行ソートマクロ(Lnsort.mam) と言うのが
ここのマクロのライブラリ
http://hp.vector.co.jp/authors/VA003699/mmmacro.html
に、すでにありますので、そのマクロを使ってみてください。

RE:マクロをご教授願います 投稿者:Miyamiya
2003年3月10日(月)11時33分

藤井 深さんへ。
これはマクロというより、普通の置換でできます。
検索文字列 \verb/\/
置換文字列 \

問題の順番を変えるマクロ 投稿者:まさ
2003年3月9日(日)22時11分

自分では知識不足で作れませんでした。

問1、ああああああああ
問2、いいいいいいいいい
問3、ううううううううう
問4、えええええ
問5、おおおおおお

上記の様な問題の内容をランダムに入れ替える
マクロって難しいですか?

マクロをご教授願います 投稿者:藤井 深
2003年3月9日(日)20時44分

宮崎さん、こんばんは。藤井です。いつもお世話になります。

今回は、以下のコマンドを削除したいので、ご教授願います。自分
でやってみたのですが、うまくいきませんでした。

\verb/\/

\

2003年3月9日(日)午後8時42分
藤井深≪fukashi@mbc.nifty.com≫

Re: 空白削除マクロ 投稿者:藤井 深
2003年3月7日(金)19時17分

宮崎さん、こんばんは。藤井です。いつもお世話になります。

> この原詩の部分の空白を削除したいのです、分かって頂けましたで
> しょうか?

少し自分で考えまして、実現しました。

SetRep(0x444);
SetFindS("[  ]+$");
SetRepS("");
Replace();
SetFind(fstat);
SetRep(rstat);

お騒がせ致しました。懲りずにまた宜しくご指導お願い致します。

2003年3月7日(金)午後7時16分
藤井深≪fukashi@mbc.nifty.com≫

Re: 空白削除マクロ 投稿者:藤井 深
2003年3月7日(金)17時34分

宮崎さん、こんにちは。藤井です。いつもお世話になります。

> 書かれている意味がよくわからないのですが。

まだまだ説明不足のようです。

原詩 訳詩↓

go home 帰って来いよ↓

*********** ○○○○○○○↓

***************** ○○○○○○○○○↓

この場合、訳詩の部分を切り取って、原詩の部分の下に持っていき
たい訳ですよね。で、矩形切り取りと貼り付けを施してやりますと、
以下にようになります。

原詩 ↓

go home ↓

*********** ↓

***************** ↓

訳詩↓
帰って来いよ↓
○○○○○○○↓
○○○○○○○○○↓

この原詩の部分の空白を削除したいのです、分かって頂けましたで
しょうか?

2003年3月7日(金)午後5時32分
藤井深≪fukashi@mbc.nifty.com≫

Re: 空白削除マクロ 投稿者:Miyamiya
2003年3月7日(金)11時07分

藤井 深さんへ。
書かれている意味がよくわからないのですが。
とにかく、切り取りを行なう場合は、範囲選択された部分しか
切り取りされませんので、切り取りたい部分をすべて選択しないと
だめです。
そして、貼り付けなりをするときに、余分な部分があれば、その
部分を取り除くようにすればいいです。

Re: 空白削除マクロ 投稿者:藤井 深
2003年3月6日(木)15時18分

宮崎さん、こんにちは。藤井です。いつもお世話になります。

> 原詩 訳詩↓
> の 訳詩の前の半角スペースの上から選択を開始して、切り取り、
> 別のところに貼り付けた時に、その先頭の半角スペースを取り除けばいい
> のではないでしょうか。

まだまだ説明不足のようです。

原詩 訳詩

go home 帰って来いよ

*********** ○○○○○○○

***************** ○○○○○○○○○

これが実際の文章でした。宜しくお願い致します。

2003年3月6日(木)午後3時17分
藤井深≪fukashi@mbc.nifty.com≫

RE:マクロ作成のお願い 投稿者:根本
2003年3月6日(木)12時25分

お返事ありがとうございます。
常駐のメニューの件については了解しました。
マクロのほうも無事動きました。

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

Re: 空白削除マクロ 投稿者:Miyamiya
2003年3月6日(木)11時23分

藤井 深さんへ。
書かれている例文の場合ですと、
原詩 訳詩↓
の 訳詩の前の半角スペースの上から選択を開始して、切り取り、
別のところに貼り付けた時に、その先頭の半角スペースを取り除けばいい
のではないでしょうか。

RE:マクロ作成のお願い 投稿者:Miyamiya
2003年3月6日(木)11時22分

根本さんへ。
常駐のメニューがタスクバーにかかってしまうという件については、
Win95が無いので、ちょっと調べられませんが、
Win95との相性が悪いのかもしれません。
Win98,Win2000,WinXPでは、問題ありませんので。

マクロは以下を使ってみて下さい。

----------------------------------------------------------
#define MAXMENU 6 // メニューの項目数を指定して下さい
main()
{
int ans, isone = 0;
char *s[MAXMENU];

s[0] = "S-JIS(&1)";
s[1] = "JIS(&2)";
s[2] = "EUC(&3)";
s[3] = "UNICODE(&4)";
s[4] = "UTF-8(&5)";
s[5] = "終 了(&E)";
ans = Menu(s, MAXMENU); // メニューの表示
if(ans >= 0 && ans < MAXMENU)
{
if(OpenFileNum() == 1) // テキストが1枚ならば
{
isone = 1;
PutChr(0<<8);
NextWindow();
}
ReOpenFile(ans > 0 ? ans + 2: ans);
if(isone)
{
NextWindow();
Close();
}
}
}
----------------------------------------------------------


Re: 空白削除マクロ 投稿者:藤井 深
2003年3月5日(水)16時29分

宮崎さん、こんにちは。藤井です。いつもお世話になります。

> 書かれている例文の場合ですと。の次の半角スペースの上から選
> 択を開始されれば、スペースが残ることはないです。

いえいえ、まだ誤解があります。

たとえば、以下の文章の場合を考えて下さい。

原詩 訳詩↓

go home 帰って来いよ↓

この場合、訳詩の部分を矩形切り取りをして、原詩の下の部分に訳
詩を持っていきたいわけですよね。そうすると、以下のようになり
ます。

原詩 ↓

go home ↓

訳詩↓

帰って来いよ↓

このようになりまして、原詩のほうに空白が生じます。分かって頂
けたでしょうか?

2003年3月5日(水)午後4時28分
藤井深≪fukashi@mbc.nifty.com≫

RE:マクロ作成のお願い 投稿者:根本
2003年3月5日(水)13時25分

マクロのほうありがとうございました。
ただ一定の場合うまく動いてくれません。
結論からいうと開いているファイルが複数かどうかで
動くかどうかが変わってしまいます。
以下詳しく説明します。

まずMMを起動します。
私は起動時に新規ファイルを開くようにしているので
この段階では新規ファイル「無題1」が開かれています。
そして新たにたとえば「Readme.txt」を開いたとします。
そしてこの「Readme.txt」に対していただいたマクロを実行すると
選択された文字コードに問題なく変更されます。
これは最初に開かれているのが「無題1」ではなく
他のたとえば「mam.txt」でも同じでとにかく
複数のファイルが開かれていればいいです。

これに対して起動した後「無題1」を閉じて
その後に「Readme.txt」を開きます。
そしてこの「Readme.txt」に対して実行すると
うまく変更されません。
つまりこの場合は「Readme.txt」しか開かれていないというわけです。

原因としては一番上のファイル名が表示されるところを
見ていると分かるのですが、ファイルが1つしか開かれていないときには
新たに新規ファイルを作って、その新規ファイルに対して
文字コードの変更をしているみたいなのです。
先ほどの例でいえば「Readme.txt」に対してマクロを実行すると
「無題2」というファイルを開きそれに対して文字コードを変更しているのです。
(ただこの動作は速いのでうまく見えません。
 私の場合もうまく動かないのは自分の設定がまずいのかと思い
 レジストリを削除し、あえて使用期間の状態にして気づいたのです。)
うまくいかないからと何回もマクロを実行すると
そのたびに「無題3」「無題4」・・・となっていきます。
ただこの新規ファイルはファイル名が表示されるところに現れるだけで
実際には作られないみたいですけど。

私としては1つのファイルしか開かれていない場合でも動いてほしいのです。
そちらでも再現するかどうか、検証よろしくお願いします。
ただReOpenFile();の仕様がこのようなものであれば仕方ないですが、
その場合にはぜひ仕様変更をお願いいたします。

あと以前の常駐のメニューがタスクバーにかかってしまうという件ですが、
他のエディタで試してみました(秀丸エディタ、EmEditor、QXエディタ)。
すると前の2つはタスクバーにはかからずにちょうどよくメニューは表示されました。
QXエディタはやはり下と左でタスクバーにかかりますが、
メニューは右クリックでしか表示されないので支障はありませんでした。
そうするとやはりMMエディタとの相性だけが悪いということになるのでしょうか。
以上報告差し上げます。

RE:マクロ作成のお願い 投稿者:Miyamiya
2003年3月5日(水)11時28分

根本さんへ。
以下のマクロを使ってみて下さい。

----------------------------------------------------------
#define MAXMENU 6 // メニューの項目数を指定して下さい
main()
{
int ans;
char *s[MAXMENU];

s[0] = "S-JIS(&1)";
s[1] = "JIS(&2)";
s[2] = "EUC(&3)";
s[3] = "UNICODE(&4)";
s[4] = "UTF-8(&5)";
s[5] = "終 了(&E)";
ans = Menu(s, MAXMENU); // メニューの表示
if(ans >= 0 && ans < MAXMENU)
ReOpenFile(ans > 0 ? ans + 2: ans);
}
----------------------------------------------------------

RE:空白削除マクロ 投稿者:Miyamiya
2003年3月5日(水)11時26分

藤井 深さんへ。
半角スペースが残るというのは、半角スペースを選択されていないからです。
書かれている例文の場合ですと
。の次の半角スペースの上から選択を開始されれば、スペースが残ることは
ないです。

マクロ作成のお願い 投稿者:根本
2003年3月4日(火)20時16分

こんばんは。この前はお世話になりました。
さて今日はマクロの作成のお願いです。

文字コードを手動で切り替えるというものなのですが、

-------------
S-JIS
-------------
JIS
-------------
EUC
-------------
UNICODE
-------------
UTF-8
-------------

のようなメニューを表示させて、現在開いているファイルを
選択した文字コードに切り替えるというものです。
ヘルプを読んでReOpenFile();とMenu();あたりを使えば
できるのかなとは思いますが、何せ私はプログラムのことは
さっぱり分かりません。

よろしくお願いします。

Re: 空白削除マクロ 投稿者:藤井 深
2003年3月4日(火)12時25分

宮崎さん、こんにちは。藤井です。いつもお世話になります。

> 書かれている意味がよくわからないのですが。
> 例えば、(↓は改行位置)
> ----------------------------------------------------------
> いつもお世話になります↓
> ----------------------------------------------------------

説明が足りなくて済みませんでした。実は、宮崎さんの例によりま
すと、以下のようになります。

------------------------------------------------------------
いつもお世話になります。 藤井です。↓
------------------------------------------------------------

この場合、藤井です。の部分を矩形切り取りをしますと、

------------------------------------------------------------
いつもお世話になります。 ↓
------------------------------------------------------------

となり、空白が生じます。この空白を削除したいのです。先日は、
何行にもこれが渡ったので、大変でした。

宜しくお願い致します。

2003年3月4日(火)午後0時24分
藤井深

RE:空白削除マクロ 投稿者:Miyamiya
2003年3月4日(火)11時31分

藤井 深さんへ。
前回の書き込みの、

という文章の、お の上へカーソルを置いて、Blokcut.mam を実行します。

は、

という文章の、お から改行の手前までを選択して、Blokcut.mam を実行します。

の間違いです。訂正します。

RE:空白削除マクロ 投稿者:Miyamiya
2003年3月4日(火)11時11分

藤井 深さんへ。
書かれている意味がよくわからないのですが。
例えば、(↓は改行位置)
----------------------------------------------------------
いつもお世話になります↓
----------------------------------------------------------
という文章の、お の上へカーソルを置いて、Blokcut.mam を実行します。
そうすると
----------------------------------------------------------
いつも↓
----------------------------------------------------------
となります。
カットされなかった文章と改行との間に空白が生じることは、ないと思いますが、
どうでしょうか。

Re: 改善依頼 投稿者:Miyamiya
2003年3月4日(火)11時09分

藤井 深さんへ。
入力欄ではなくて、一行目の、フルパスで表示されているファイルの
表示の事ですね。
これは右に長く表示するようにしておきます。

空白削除マクロ 投稿者:藤井 深
2003年3月3日(月)17時52分

宮崎さん、こんにちは。藤井です。いつもお世話になります。

昨日、宮崎さん作成の、BLOCKCUT.MAMとBLOCKINS.MAMとを使ってみ
て思ったのですが、BLOCKCUT.MAMを使った場合、改行が先頭に残り
ますよね。で、カットされなかった文章と改行との間に空白が生じ
ます。これって、マクロで削除出来ますでしょうか?以前、文章の
先頭のマクロを作って頂きました。だから、出来るのかなって思い
まして、出来ましたらお願い致します。例えばこんな感じです。

○○○ 改行
○○○ 改行

これを、

○○○改行
○○○改行

とするわけです。出来ましたらお願い致します。

2003年3月3日(月)午後5時50分
藤井深

Re: 質問あるいは要望 投稿者:藤井 深
2003年3月3日(月)17時16分

宮崎さん、こんにちは。藤井です。いつもお世話になります。

> 別の括弧を使うしかないです。

この点は了解致しました。無理を言いまして済みませんでした。

2003年3月3日(月)午後5時15分
藤井深

Re: 改善依頼 投稿者:藤井 深
2003年3月3日(月)17時14分

宮崎さん、こんにちは。藤井です。いつもお世話になります。

> 入力欄は多少は大きくできますが、
> 現在の大きさで、全角10文字位は表示できませんか。
> こちらでは、全角17文字まで、表示できます。
> 解像度の関係でしょうか。

入力欄ではなくて、一行目の、ファイルの表示の事です。フルパス
で表示されていますが、ファイル名が長い場合は、次の行に記述さ
れますが、これが欠けて表示されるのです。ですから、これは、ダ
イアログを少し大きくするか、右に長くするかで解決するんじゃな
いかと思った次第です。

2003年3月3日(月)午後5時14分
藤井深

RE:質問あるいは要望 投稿者:Miyamiya
2003年3月3日(月)11時26分

藤井 深さんへ。
それはちょっと無理です。
なぜなら、この掲示板は HTML の仕様によって表示されますので
HTMLの文法(規則)により三角括弧で囲まれた部分は、HTMLのタグ
命令として処理され表示されません。
別の括弧を使うしかないです。

RE:改善依頼 投稿者:Miyamiya
2003年3月3日(月)11時23分

藤井 深さんへ。
入力欄は多少は大きくできますが、
現在の大きさで、全角10文字位は表示できませんか。
こちらでは、全角17文字まで、表示できます。
解像度の関係でしょうか。

質問あるいは要望 投稿者:藤井 深
2003年3月1日(土)19時56分

宮崎さん、こんばんは。藤井です。いつもお世話になります。

質問あるいは要望になると思いますが、この度、メイラーから投稿
する事が出来るようになりました。で、メイルを投稿する気分で、
文章の最後の所に、署名をするんですよね。ところが、この掲示板
の仕様が原因だと思うのですが、タグで囲まれた部分が表示されず、
また、私のメイラーで受信する際にも欠落したままです。で、掲示
板のソースを見てみますと、タグで囲まれた私のメイルアドレスは
送信されているのです。で、解決策としては、メイルアドレスをタ
グで囲む事はしないで、それとは違った括弧で囲む、というのが正
しいとは思うのですが、なかなか気に入った括弧がございません
(笑)。で、一つここは、この掲示板の作者である宮崎さんに、少
し考えて頂けないかと思った次第です。でも、駄目なら即刻諦めま
すので、あまり深く考えないで下さいませ。

2003年3月1日(土)午後7時54分
藤井深

改善依頼 投稿者:藤井 深
2003年3月1日(土)15時14分

宮崎さん、こんにちは、いつもお世話になります。

使っていて気が付いた事ですが、ファイルのタグを右クリックして、
名前の変更を選択しますと、ダイアログが出てきますよね。で、先
日もこの部分に文字が欠けている箇所がありましたので、訂正して
頂いたんですが、今回は、ファイル名そのものが欠ける場合がある
んですよね。これは、ファイル名が長い場合に起こる現象でして、
それを想定していないから、当然起こる現象なんです。できました
ら、全角10文字位のファイル名にも対応出来るよう、少し、ダイア
ログを大きくして頂くと幸いです。

2003年3月1日(土)午後3時13分
藤井深

RE:MMの壁紙 投稿者:わで
2003年2月28日(金)20時42分

いつもお世話になっております。
さっそくお返事いただき、有難うございました。

同じビットマップにも、壁紙にできるフォーマットと、
そうでないものがあるんですね。
すみません、不勉強でした。

今後ともよろしくお願い致します。

RE:MMエディタの常駐&カーソル固定 投稿者:根本
2003年2月28日(金)20時06分

お返事ありがとうございます。

まずタスクバーにかぶさるという件ですが、了解しました。
こちらでいろいろいじってみます。何か分かりましたら
報告差し上げます。

次にカーソル固定の件ですが、検討していただけるとのことで
ありがとうございます。
もし固定できるようになるのであれば、表示設定あたりで
固定するかしないかチェックを入れたりはずしたりで
選択できるようになるといいですね。
今までの方がいいという人もいるでしょうから。
期待しています。

最後にデスクトップアイコンのダブルクリックの件ですが、
そのようによろしくお願いします。

いろいろおねだりしましたが、これからもよろしくお願いします。
ありがとうございました。

RE:マクロのご教授をお願い致します 投稿者:藤井 深
2003年2月28日(金)16時03分

宮崎さん、こんにちは、藤井です。

有り難うございました。動きました。今後とも宜しくお願い致します。

RE:MMエディタの常駐&カーソル固定 投稿者:Miyamiya
2003年2月28日(金)12時28分

根本さんへ。
タスクバーにかぶさるという点については、タスクバーの存在位置が
認識できないのです。認識できない場合は、カーソルのある位置に
表示していますので、たまたま左と上の場合は、うまく表示されるが、
右と下の場合は、タスクバーにかぶさるということです。
しかし、タスクバーの構造は Win95 でも同じだと思えますので、
それプラス何か他のそちらの環境での原因があるのかもしれません。
もし、他のパソコンで使用できる環境があれば、試されてみてください。

カーソル固定の件ですが、
確かにメモ帳では、カーソルの固定は、表示位置ではなくて
カーソルが指すポイントになっていて、カーソル位置も画面外に出て
しまいますね。
そういうことなら、仕様変更したほうがいいかもしれません。
これは、変更するように検討してみます。

2つ目の件ですが、常駐時のデスクトップのアイコンのダブルクリック
の場合は、こちらでも何も開きません。
これは「起動時は新規ファイルを開く」になっていれば、新規ファイルを
開くようにしておきます。

RE:MMの壁紙 投稿者:Miyamiya
2003年2月28日(金)12時22分

わでさんへ。
>問題のあるファイル名は、画像の左半分に
>無色(白)の部分があったのですが、
>そこを黒くペイントすると、壁紙に使える画像になっちゃいました。
と言うことでしたら、そのファイルが壁紙に使えるビットマップファイル
のファーマットではなかったのではないでしょうか。
黒くペイントして保存したことにより、普通のビットマップファイルに
なったのではないでしょうか。
ファイル名自体は関係ないです。問題はファイルのファーマット形式です。

RE:マクロのご教授をお願い致します 投稿者:Miyamiya
2003年2月28日(金)12時20分

藤井 深さんへ。
これは、
PutChr(229 << 8);
の前の
MacroExec("doublesave.mam");
で、別のマクロを呼び出しているためにうまく終了できないのでしょう。
---------------------------------------------------------
MacroExec("doublesave.mam");
---------------------------------------------------------

---------------------------------------------------------
MacroExec2("doublesave.mam");
---------------------------------------------------------
に、変更してみてください。それでうまくいくかもしれません。
もしだめなら、このマクロ(doublesave.mam)を関数にして、関数
として呼ぶようにするしかないでしょう。

RE:MMエディタの常駐&カーソル固定 投稿者:根本
2003年2月27日(木)22時42分

お返事ありがとうございます。

・「2003年2月27日(木)11時35分」に対して
  タスクバーにかぶさるという点については、そうなら仕方ないですね。
  あと参考程度かと思いますが、どのように表示されるかの画像を
  メールでお送りしました。何かのお役に立てば幸いです。

  次にカーソル固定の件ですが、不可能ですか。
  でも、秀丸エディタ、EmEditor、TeraPad、そしてWindows付属の
  メモ帳までカーソルの固定は可能です。
  特に後ろの3つは初期状態で固定されています。
  つまりカーソル位置は画面外に出てしまいます。
  私としてはこの機能がなければ絶対困るということはないのですが
  あれば便利なので、将来可能ならで構いませんので
  固定できるという機能追加をご検討ください。

・「2003年2月27日(木)11時37分」に対して
  1つ目の件は、了解しました。

  2つ目の件ですが、私が言っているのは常駐アイコンではなくて
  デスクトップのアイコンのダブルクリックです。
  でもこれもWin95のせいかもしれませんね。

  3つ目の件ですが、やはり難しいですか。
  では、もし可能ならで構いませんのでご検討ください。

・「2003年2月27日(木)11時52分」に対して
  了解しました。

というわけで、デスクトップのアイコンのダブルクリックの件についてのみ
確認お願いします。

RE:MMの壁紙 投稿者:わで
2003年2月27日(木)21時28分

いつもお世話になっております。
さっそくお返事いただき、ありがとうございます。

なぜか、問題解決しました。
さっぱり理由はわからないのですが(^^;)

問題のあるファイル名は、画像の左半分に
無色(白)の部分があったのですが、
そこを黒くペイントすると、壁紙に使える画像になっちゃいました。
なんでだろう??

ちなみに、お返事いただいたことについてですが、
こちらも、付属のビットマップは全て問題なく表示できました。
ファイル名は、私もそれが原因かなと思って
いろいろ変更したのですが、状況は変わりませんでした。

何はともあれ、お手数をおかけし、申し訳ありませんでした。
もし上記の結果について、原因とおぼしきものの
心当たりがございましたら、教えていただければ幸いです。
今後ともよろしくお願い致します。

マクロのご教授をお願い致します 投稿者:藤井 深
2003年2月27日(木)18時45分

宮崎さん、こんにちは、いつもお世話になります。

先日教えて頂いたマクロに追加して以下のようなマクロを作りました。で、問題は、
一番最後の行なんです。機能しないんですよね。私の希望はこのマクロにて、
「保存して終了」を行って、MmEditorを閉じたいわけです。ご助言をお願い致します。

main()
{
int fstat = GetFind();
int rstat = GetRep();
SetFind(0x8); // 正規表現検索
SetFindS("^(日経、");
Top();
Select(1);
Find();
SetFind(fstat);
ClipCopy();
MacroExec("doublesave.mam");
PutChr(229 << 8);
}

RE:MMエディタの常駐&カーソル固定 投稿者:Miyamiya
2003年2月27日(木)11時52分

根本さんへ。
>私が考えるスクロールというのは
>1.縦スクロールバーの下矢印(↓)ボックスをクリックしてスクロールアップした場合
>2.縦スクロールバーをマウスでドラッグして下に移動させる場合
>3.マウスのホイールを回す場合(しかし私のマウスは2ボタンなので
>  この動作は試せません)
>の3種類です。
>このうち1.の場合はうまく機能していました。
>しかし2.の場合はやはり機能しません。
1の場合はうまく機能したということですね。
1と3は内部的には、まったく同じ動作ですから、
「スクロールアップ、ダウンでカーソル行を固定する」機能は問題なく動作していると
いうことになります。
>2.縦スクロールバーをマウスでドラッグして下に移動させる場合
に、ついては、これはスクロールではなくて、移動ですから常に表示位置は固定されます。
前回も書きましたか、カーソルは表示画面内にないとまずいので、この場合のカーソルの
表示位置は、固定するしかないです。

●私へのメール:miyamiya@po.saganet.ne.jp
戻る