【最大10000ポイント】当たる!!質問投稿キャンペーン!

仕事でデータ入力をする機会ができたのですが、

1月5日電気代
1月5日水道代
1月5日ガス代

↑上記の文章を発見した場合

1月6日電気代
1月6日水道代
1月6日ガス代

と自動で置換したいのですが
どうもうまくいきません

仮にメモ帳でやるとしたらどういったスクリプトになるのか
どなたかご教授願います

A 回答 (2件)

解答提示は、やめておきます。



> どうもうまくいきません
試したスクリプトを提示することが望ましいです。

> 上記の文章を発見した場合
pos()関数

> 自動で置換
chgmoj()関数

※pos()関数は省いて、chgmoj()関数だけでもできると思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます
解答を参考に試行錯誤してみたのですが、全くだめでした
以下プログラムになります

For i = 0 to 50
  id = GETID("新規テキスト")
  if id > 0 then break
  Sleep(0.1)
Next

idd = CHGMOJ(id,"1月5日電気代","1月6日電気代")
ic=getstr(idd)
  Sleep(0.1)
SendStr(id,ic)
//終了

これでiddに変換された戻り値がくるかと思ったのですが
結果は原文が一度やるごとに倍になっていきます
もしお時間空きましたら、ヒントでもいいので教えていただけたらうれしいです

お礼日時:2008/03/13 20:39

// CHGMOJ()関数の第一引数が違います。

UWSCのヘルプ(UWSC.CHM)をご自身で確認なさってください。

/////
TEXTBLOCK 変換前の文章
1月5日電気代
1月5日水道代
1月5日ガス代
ENDTEXTBLOCK
変換後の文章=CHGMOJ(変換前の文章, "1月5日", "1月6日")
MSGBOX(変換前の文章+"<#CR><#CR>"+変換後の文章)

参考URL:http://sourceforge.jp/forum/forum.php?forum_id=1 …
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます
ご指摘を参考に改良しましたら、なんとできました!
本当にありがとうございます
以下、私なりのスクリプトになります

For i = 0 to 100
  id = GETID("新規テキスト")
  if id > 0 then break
  Sleep(0.1)
Next
idd = GETSTR(id)
ic=CHGMOJ(idd, "1月5日", "1月6日")
SCKEY(id, VK_CTRL, A)
  Sleep(0.1)
KBD(VK_BACK,CLICK,40)
  Sleep(0.1)
SendStr(id,ic)

どうも置換がうまくできなかったので
一度消して値を送信してみました
ここから、教えていただいたURLを参考に
実務に使える形に変えていこうと思います
貴重なお時間割いていただきありがとうございました。

お礼日時:2008/03/14 20:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QUWSCでテキストファイルを開いて表示したい

UWSCでテキストファイルやExcelファイルを開きたいのですが、
FOPEN関数を使っても、たとえばテキストファイルを開こうと思っても開けません。

これはなぜでしょうか?
すべてのパソコンでダメでした。
OSはXPSP3、7SP1、です。
UWSCのバージョンは最新のバージョン(4.8e1)です。

UWSC.EXEのあるフォルダに、「test01.txt」を作成し、
fid=FOPEN("test01.txt",F_READ or F_WRITE)

と書いても、絶対パスで、

fid=FOPEN("C:\Users\user01\Desktop\uwsc\test01.txt",F_READ or F_WRITE)

と書いても、ダメでした。

その一行しか書いてないのがダメな原因なのでしょうか?

「C:\Users\user01\Desktop\uwsc\test01.txt」は
コマンドプロンプトやファイルを指定して実行、からは開けます。

アンチウィルスソフトは一時的にOFFにしてもだめでした。

OS(XPSP3)を再インストールして、ネットにつながず、
セキュリティソフトなしでやってみてもダメでした。

多分、自分が何か勘違いをしているのだと思いますが、
FOPEN関数は、ファイルを開いて表示するものだと思っていましたが
違うのでしょうか?

Webで検索すると、他のみなさんは開いているようなのですが・・・

ファイルのIDを取得するだけではだめで、ほかの記述も必要ということなのでしょうか?

ゆくゆくはExcelのファイルを普通に開きたいのです。
COMで開くような事例もあったので、それは試してみましたが、
Office2003のセキュリティの「中」設定が無視されて
開いてしまい、Auto_Openマクロも無視されたりで、
使いたくありません。
「中」設定のまま、「マクロを実行させるダイアログ」を
表示してExcelファイルを開きたいのです。

でもその前にということで、テキストファイルを試しにと思ったのですが
テキストファイルすら開けません。


何度かWeb検索しても一向に手がかりがつかめません。

大変すみませんが、どなたがご存知の方がいらっしゃったら、
よろしくご指導くださいませ。

UWSCでテキストファイルやExcelファイルを開きたいのですが、
FOPEN関数を使っても、たとえばテキストファイルを開こうと思っても開けません。

これはなぜでしょうか?
すべてのパソコンでダメでした。
OSはXPSP3、7SP1、です。
UWSCのバージョンは最新のバージョン(4.8e1)です。

UWSC.EXEのあるフォルダに、「test01.txt」を作成し、
fid=FOPEN("test01.txt",F_READ or F_WRITE)

と書いても、絶対パスで、

fid=FOPEN("C:\Users\user01\Desktop\uwsc\test01.txt",F_READ or F_WRITE)

と書いても、ダメでし...続きを読む

Aベストアンサー

fopenはuwscでファイルを開くための命令です。

> fid=FOPEN("test01.txt",F_READ or F_WRITE)

エラー値が返ってないのなら、

fline=FGET(fid, 1)

とかでflineに1行目が取得できるので、

print fline

なんかで表示できるはず。

--
> UWSCでテキストファイルやExcelファイルを開きたいのですが、

メモ帳(notepad.exe)やExcelでファイルを開くためには、例えば、

exec("C:\Windows\notepad.exe test01.txt")

などとして、メモ帳をアプリとして起動し、同時に引数を指定します。

QUWSCの基本的な文字列操作

該当命令が、見つからず困っております。
9桁の文字列を先頭から、3桁ずつに分割したいのですが
お解かりになる方教えていただけませんでしょうか?

例、
DATA="123456789"
処理後
A="123"
b="456"
c="789"

Aベストアンサー

ヘルプより引用

----------
// 文字列コピー
戻値 = COPY( 文字列, 開始位置, コピー文字数 )
引数
  文字列: コピー元の文字列
  開始位置: コピーすべき文字列の開始位置 (1から)
  コピー文字数: コピーすべき文字数
戻値
  結果の文字列
----------

Q(UWSC)エクセルのセルの値を読み込むには?

UWSCで、エクセルのセルの値を読みこむ方法について
悩んでおります。

Excel = GETACTIVEOLEOBJ("Excel.Application");
val1 = Excel.ActiveSheet.range("A1").value;
を使えば、開いているエクセルのA1セルにある値を
「val1」に読み込むことができました。

今、A1~A100にある100個のリストを順々に読み込むことを
考えています。おそらくfor文を使って、以下のようにするのかな?
と思っております。
for i=1 to 100
val=○○
next
A1~A100の値を順々に読み込むにはどのようにすればいいのでしょうか?

Aベストアンサー

Pro版だったらループなんてしなくても、XLGETDATA関数を使えば一発で配列変数に取り込めます。(UWSCのヘルプにサンプルコードがあります)

Pro版ではない通常UWSCだと、以下の処理で一個ずつ値を引っ張ってくるしかないでしょう。

1)F2キーを押す
2)Shift+Homeを押す
3)Ctrl+Cを押す
4)クリップボードから値を変数に読み込む(GETSTR関数を使用)
5)Enterを押す

という一連の処理を100回繰り返すわけです。

QUWSCに詳しい方簡単なテキスト入力方法を教えてください

文字列を打ち込むときに

KBD(VK_O,CLICK,40)
KBD(VK_S,CLICK,40)
KBD(VK_A,CLICK,40)

とかキーボードマクロで書き込む方法しか分かりません
文章・文字列とかを入力する場合はどのようにしたら出来るのでしょうか?

またランダムに入力したいと思う機会多くあるのですが
// ランダムな文字列を生成する
// 提供は うっちー さん です。

// 2007/03/20 新規作成



Ret = CreatePassword(8)
msgbox(Ret)

// パスワードに使用する文字を作成
Function CreatePassword(PasswordLength)
dim Password
dim chrset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
for i = 1 to PasswordLength
Password = Password + copy(chrset, random(length(chrset)) + 1,1)
next
Result = password
Fend

などのようなメッセージボックスじゃなくて直接メモ帳などの「カーソルが表示されている部分な」テキストボックスに書き込むにはどうしたらいいのでしょうか?

文字列を打ち込むときに

KBD(VK_O,CLICK,40)
KBD(VK_S,CLICK,40)
KBD(VK_A,CLICK,40)

とかキーボードマクロで書き込む方法しか分かりません
文章・文字列とかを入力する場合はどのようにしたら出来るのでしょうか?

またランダムに入力したいと思う機会多くあるのですが
// ランダムな文字列を生成する
// 提供は うっちー さん です。

// 2007/03/20 新規作成



Ret = CreatePassword(8)
msgbox(Ret)

// パスワードに使用する文字を作成
Function CreatePassword(PasswordLength)
di...続きを読む

Aベストアンサー

SendStrを使えば出来るかな。
6/15の記事が参考になると思います。
http://blog.livedoor.jp/uwsc/archives/cat_50021326.html

http://blogs.yahoo.co.jp/nackmaz/55814134.html

Quwsc webページ内のテキストボックス

みなさんこんばんわ。

uwscを使ってwebページ内の検索などのテキストボックスにカーソルを置きたいのです。
KBDで文字を打ち込めるようにテキストボックスを編集状態にするにはどうすれば教えてください。

具体的には、
私の会社の日報システム(html)で日報を入れる日付テキストボックスがあるのですが、日付のテキストボックスだけvalueで値を入力しても元に戻ってしまうのです。html解析スクリプトで調べると、outerhtmlと書いてあり、何か動的に書き変わるしかけがあるようなのですがよくわかりません。しかたがないのでKBDで日付を入力しています。domというのでしょうか、ie.doc.elements(i).value="yyyy/mm/dd"のようにテキストボックスを指定して直接値を入力できればベストなのですが…

よろしくお願いします。

Aベストアンサー

たびたび大変失礼をしました。
エレメント名を調査する方法が間違いでした。
前に紹介したスクリプトはオブジェクトへのアクセス方法でした。

以下の方法が原始的ですが、フォーム内のエレメント名を調べる方法を推奨します。

そもそも、テキストボックスはフォームの中に存在する訳なので、フォームを指定してあげて、その中のテキストボックスを全て表示すれば良い。

IEのウインドウ内のフォーム総数はIE.document.forms.lengthで求められます。

フォームの中のエレメント総数はIE.document.forms[番号].elements.lengthで求められます。

以下のスクリプトならIEで[番号]に指定されたフォーム番号のエレメント名が全て表示されます。
故に、フォーム番号を0から片っ端から入力して調査すれば、下のスクリプトでいずれ貴殿の探しているテキストボックスのエレメント名が解る筈です。
エラーで止まっても、UWSCに付属している小さなウインドウでエレメント名が出てくるので、これを使えばokです。
先ほど、佐川急便のフォームで試しました。エラーで止まりましたが、ウインドウのなかにエレメント名がばっちり残ってました。
但し、システム上でUWSCのアクセスを弾くなど、エレメント名を隠す加工がなされていれば、無理なのでごめんなさい。
ウインドウ名の入力は、前の答えのウインドウ名を調査するアプリを使って下さい。

//フォーム番号を0~いっぱい順序で入れて数回に分けて片っ端から調査して下さい。
UL1 = input("開いているウィンド名を入力")

IE = GETACTIVEOLEOBJ("InternetExplorer.Application",UL1)//指定したウィンド名のIEを制御
IE.visible=TRUE

REPEAT
SLEEP(0.1)
UNTIL !IE.BUSY AND IE.READYSTATE = 4

FBANGOU = input("要素数を調査したいフォーム番号を入力")

番号 = VAL(FBANGOU)
KOSUU = IE.document.forms[番号].elements.length
MSGBOX(KOSUU)

FOR x = 1 to VAL(KOSUU)
Ifb x > VAL(KOSUU) then
MSGBOX("終了")

EXITEXIT
endif

NAIYOU = IE.document.forms[番号].elements[x].name

print NAIYOU

next



追記:フォーム総数は、以下で求められます。
UL1 = input("開いているウィンド名を入力")
IE = GETACTIVEOLEOBJ("InternetExplorer.Application",UL1)
IE.visible=TRUE
REPEAT
SLEEP(0.1)
UNTIL !IE.BUSY AND IE.READYSTATE = 4
KOSUU = IE.document.forms.length
MSGBOX(KOSUU)


総括:わかりにくかったと思うので、私が実際に行った方法を最後に記します。
(1)調査したいIEのwebアプリの画面を開く。
(2)開いたIEのwebアプリの画面のフォーム総数をスクリプトを使って調べる。
(3)開いたIEのwebアプリの画面内に存在するフォームの数だけ、エレメント名の調査を行う。(例:フォーム数5と出たら5回。念のために0を含めた0から5を入力)
(4)エラーで出ても、めげずにprint関数を使ったUWSCのウインドウでエレメント名を拾う。
(5)エレメント名から法則性を推測する。
(6)法則性を理解したら、ID番号+エレメント名など入力するデータをエクセルで作成する。
(7)IESETDATA関数を使って、直接入力する。
終了です。

たびたび大変失礼をしました。
エレメント名を調査する方法が間違いでした。
前に紹介したスクリプトはオブジェクトへのアクセス方法でした。

以下の方法が原始的ですが、フォーム内のエレメント名を調べる方法を推奨します。

そもそも、テキストボックスはフォームの中に存在する訳なので、フォームを指定してあげて、その中のテキストボックスを全て表示すれば良い。

IEのウインドウ内のフォーム総数はIE.document.forms.lengthで求められます。

フォームの中のエレメント総数はIE.document.forms[番号].ele...続きを読む

Q変数内に入った文字列の結合 UWSC

UWSCでの質問ですが、一般的なプログラミングでの質問っぽいので
こちらで質問させていただきます。

例えば下記のような変数があったとします。
a = "test"
b = "TEST"

これらのa、bの変数内の文字列を結合して"testTEST"といった文字列にしたい場合
どのようにしたらよいのでしょうか。

よろしくお願いします。

Aベストアンサー

<受け取る変数>= a + b

<受け取る変数>は適宜置き換えてください。

a = a + b とやったら、実行後は

a = "testTEST"
b = "TEST"

です。

QUWSCの待機コマンドについて

現在UWSCでソフトのインストール作業を自動化する必要があります。

問題になっているのが、インストールが終了するまで待機する、というコマンドがあるのかないのかが分かりません。

何秒間待機というのは分かるのですが、例えば画面が完全に開くまで待機、とかインストールが完了した時に作業を続行する、などのコマンドが必要です。

どなたかお力をお貸し下さい。ある作業が終了するまで待機するというコマンドです。以上、よろしくお願いいたします。

Aベストアンサー

そういったコマンドは無いです。

が、キチンとウィンドウを識別させていけば同様の処理は可能です。

例1.インストール完了時のウィンドウを取得する
GETID()の第3引数に-1を指定すると、指定したタイトルのウィンドウが見つかるまで待ち状態になります。

// インストールが完了するまで待つ
hogeID = GETID("インストールを完了しました。",,-1)

// 完了のウィンドウで終了のボタンを押す
CLKITEM(hogeID,"終了",CLK_BTN)
以下略


例2.ウインドウのタイトルに変化が無いので、ボタンの文字列から完了を察知し動作させる
事前にウィンドウIDを取得しておくこと。
CLKITEMは処理できなかった場合(下記ケースではボタンが押せなかったり見つからなかった場合)戻り値にFALSE
が返ってきます。

bFlg = 0
// bFlgが1になるまでループ
WHILE bFlg = 1
bFlg = CLKITEM(hogeID,"終了",CLK_BTN)
WEND



簡単な例を2つほど挙げて見ましたが、おそらくこれで解決できるでしょう。

そういったコマンドは無いです。

が、キチンとウィンドウを識別させていけば同様の処理は可能です。

例1.インストール完了時のウィンドウを取得する
GETID()の第3引数に-1を指定すると、指定したタイトルのウィンドウが見つかるまで待ち状態になります。

// インストールが完了するまで待つ
hogeID = GETID("インストールを完了しました。",,-1)

// 完了のウィンドウで終了のボタンを押す
CLKITEM(hogeID,"終了",CLK_BTN)
以下略


例2.ウインドウのタイトルに変化が無いので、ボタンの文字列から完了を察...続きを読む

QUWSC 指定ファイルを指定のプログラムで開く

タイトル通りです。

・例えばUWSファイルをメモ帳で開く。
・.txtをワードで開く。

みたいな感じです。
よろしくお願いします。

Aベストアンサー

他にも方法があるかもしれませんが私は
EXEC("プログラムファイル名 開くファイル名") もしくは
DOSCMD("関連付けされてるファイル名", TRUE)   で開いています
当たり前ですがパスなどが効いてないならフルパスで設定してください

QCOMコンポーネントって何?

よく、COMコンポーネントって聞くんですが、何のことかわかりません。VBやVBAのような言語名ではないことは、なんとなく分かるのですが・・・。できるだけわかりやすく教えてください。

Aベストアンサー

失礼ですが、クラスをご存知ないのであればCOMは多分
全く理解できないでしょうねぇ

クラスについても、ご自分で勉強が必要だとは思いますが
簡単に説明しておきます。
構造体(属性)に、関数(操作)を加え、カプセル化したものです。
従来のプログラミングでは、変数をばらばらに扱わず、
構造体と呼ばれる型に関係ある変数をまとめて、
プログラム中のデータ構造が明確になるようにしておきました。
そこで、この構造体に専属の関数を加えてしまえば、
その構造体は単独で自分の面倒をみることが出来るようになります。
それがクラスです。
その結果、プログラム中のデータや処理が、クラス単位で整理され、
それぞれ部品のように組み替えが可能になりました。

このように、クラス単位にプログラムを分割することで
巨大なプログラムを明瞭にする言語をオブジェクト指向言語といいます。

また、クラスには親と子があり、「継承」という考えを用いて
どんどんバージョンアップや特化を行うことが容易です。

VBで説明すると、
Dim value as A
として変数を宣言した場合、クラスは「A」です。
valueはオブジェクトや、インスタンスと呼ばれます。
valueを使って、Aに含まれる関数を呼び出して、valueを
操作することが出来ます。
value.Init()
等。

ざっくり説明するとこんな感じです。
詳細については、各言語の書籍を参照してください。

このようにして作ったクラスを、
・他の言語から使いたい
・ネットワーク経由で使いたい
などと言った機能を実現する、Microsoft提供の方法の一つが、
COMやDCOMと呼ばれるものです。
COMは、他のプログラムからの使いまわしに強いので、
一度作っておけば、VB、Delphiは勿論、VBScript、JavaScrips、WSHなどから
呼び出しが可能です。
また、COM自体のバージョンが上がっても、それを呼び出してる
プログラム自体には変更の必要がありません。

失礼ですが、クラスをご存知ないのであればCOMは多分
全く理解できないでしょうねぇ

クラスについても、ご自分で勉強が必要だとは思いますが
簡単に説明しておきます。
構造体(属性)に、関数(操作)を加え、カプセル化したものです。
従来のプログラミングでは、変数をばらばらに扱わず、
構造体と呼ばれる型に関係ある変数をまとめて、
プログラム中のデータ構造が明確になるようにしておきました。
そこで、この構造体に専属の関数を加えてしまえば、
その構造体は単独で自分の面倒をみることが出...続きを読む

QUWSCを使用して、ドロップダウンリストを操作

お世話になります。

UWSCにてマクロを作成していますが、ドロップダウンリストを選択して操作する事ができずに、
止まってしまっています。

現在は、画像認識で選択し、マクロ上のKBの操作で選択する形を取ってますが、毎回マウスポインターが移動してしまい、マクロを動かしていると他の事ができません。

UWSCのマクロで、指定したリスト上の値を選択する事可能でしょうか

例)マクロ上で自動でリストから「いいい」を選択して、決定ボタン押下するなど。

===
対象ページの記述は下記の様な形です
2つリストがあり、それぞれに決定ボタンがあります。

<td class="b2"align="center">

<select name=mode>
<option value="aaa">あああ
<option value="bbb">いいい
<option value="ccc">ううう
<option value="ddd">えええ
<option value="eee">おおお
</select>
</td>
<td class="b2"align="center"><input type="submit"style="background-color:#9370DB;color:#FFFFFF;border:2 solid BFEFFF" value="決定"></td>

<select name=mode>
<option value="aaa">かかか
<option value="bbb">ききき
<option value="ccc">くく
<option value="ddd">けけ
<option value="eee">こここ
</select>
</td>
<td class="b2"align="center"><input type="submit"style="background-color:#9370DB;color:#FFFFFF;border:2 solid BFEFFF" value="決定"></td>

お世話になります。

UWSCにてマクロを作成していますが、ドロップダウンリストを選択して操作する事ができずに、
止まってしまっています。

現在は、画像認識で選択し、マクロ上のKBの操作で選択する形を取ってますが、毎回マウスポインターが移動してしまい、マクロを動かしていると他の事ができません。

UWSCのマクロで、指定したリスト上の値を選択する事可能でしょうか

例)マクロ上で自動でリストから「いいい」を選択して、決定ボタン押下するなど。

===
対象ページの記述は下記の様な形です
2つリス...続きを読む

Aベストアンサー

IESetDataを使うと良いかもしれません。

IESetData(IE,"bbb","mode")
IESETDATA(IE, True, "決定")

とかすれば、いけるかも。

http://e-dcz.com/~uwsc/iesetdata.htm
http://www.uwsc.info/sample.html#n33

有料版使えばIE用記録ツールがあるので便利。
http://www.uwsc.info/download.html


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング