115280
UWSC 仮 掲示板
投稿時に「証明書が不正です」と出る場合には、JavaScriptをオン
動作不具合での質問の場合には環境を表記(OS,バージョン等)
タイトルは内容を表し、内容はネットゲーム関係禁止
自身でコードを書く気の無いナマケモノは特に質問禁止
失敗作でもコードを投稿すること(具体性の無い質問は無視される可能性大)

UWSC掲示板 が復活することを祈り、それまでの繋ぎとして。
環境設定[s7777777]

連想配列を値でソートしたい / YMK
HASHTBL DAT
DAT[Aさん] = 70
DAT[Bさん] = 55
DAT[Cさん] = 90


とした時、値順にソートして

For i in DAT
 print (i +"特典は" +dat[i])
next

の様に出力したいです。

No.1050 2020/12/11(Fri) 14:33:29

Re: 連想配列を値でソートしたい / satocha
UWSCの連想配列は、宣言時にhash_sortを指定すると、キーでソートしてくれます。
実際には値のほうでソートしたいわけですから、キーと値が逆順の連想配列を作ってコピーしてあげればうまく行きます。

その際、キーと値が必ずしも一対一対応するわけではないので、値が衝突したときのことを考えておく必要があります。

HASHTBL DAT
HASHTBL Reverse=Hash_sort
DAT["鈴木さん"] = 70
DAT["佐藤さん"] = 55
DAT["中村さん"] = 90
DAT["田中さん"] = 65
DAT["高橋さん"] = 55
DAT["木村さん"] = 65

for i=0 to length(dat)-1
  name=dat[i,hash_key]
  point=dat[i,hash_val]
  if Reverse[point]<>""
    Reverse[point]=Reverse[point]+","+name
  else
    Reverse[point]=name
  endif
next

for i=0 to length(Reverse)-1
  names=Reverse[i,hash_val]
  point=Reverse[i,hash_key]
  for name in split(names,",")
    print name+"は"+point
  next
next
sleep(13)

No.1051 2020/12/11(Fri) 15:58:11

Re: 連想配列を値でソートしたい / satocha
追加です

連想配列のキーは文字列ですので、先に挙げたスクリプトは1ケタ得点の人がいたり100点満点がいると調子悪いかもしれません。
どうしたらいいか考えてみてください。



※ヒント:ゼロ埋め

No.1052 2020/12/11(Fri) 16:21:08

Re: 連想配列を値でソートしたい / YMK
有難うございます、無事出来ました。

連想配列の上限を知る場合は「RESIZE」ではなく、
「length」を使うのも参考にさせて頂きました。

No.1053 2020/12/12(Sat) 12:37:19
COM_Errorについて / IKU
しろまさ様

このようなサイトがあったんですね初めて知りました。
すごく嬉しいです。ありがとうございました!!

無事解決しました、本当にどうもありがとうございました。

No.1048 2020/12/02(Wed) 15:51:20

Re: COM_Errorについて / しろまさ
解決できて何よりです。

返信は各記事の右上にある Res を押してから書き込むと記事が下に続きます。
関連の話題は新規投稿ではなく、返信(Res)でお願い致します。

No.1049 2020/12/03(Thu) 08:55:01
COM_Errorについて / IKU
返答ありがとうございます。

”対象となるWorkbookを開いていないからです。”

を試しました、そのやり方だと通常通り動くのですが、やりたいことは既存のエクセルファイルに入力したいのです。
その場合だとCOM_Errorになります。

それとuwscの高レベル記録設定をして
マクロ記録で Excelウィンドウを動かすと挙動がおかしいです、エクセルも再インストールしたのですがやっぱりおかしいです。
他のパソコンでも試しましたが同じような感じです。

uwscに何か原因があるのでしょうか?それとも Windows 10になってから何か変わったのでしょうか?

No.1046 2020/12/02(Wed) 14:37:28

Re: COM_Errorについて / しろまさ
>> 既存のエクセルファイルに入力したい
?@ 既存XLファイルを起動してから処理
?A 起動済XLファイルを処理
のパターンが考えられます。

http://siromasa.html.xdomain.jp/uwsc/u_term/ExcelApplication.html
の中で、
?@は「オブジェクト作成    CreateOLEObj    ?A」
?Aは「オブジェクト取得    GetActiveOleObj   ?@」
を参考にしてください。

No.1047 2020/12/02(Wed) 15:22:59
IKU / COM_Errorについて
返信ありがとうございます。
EXCEL.RANGE("A1").Valueで試しても
EXCEL = CREATEOLEOBJ("Excel.Application")の行でエラーになります。

管理者権限の話ありがとうございました参考にさせてもらいます。

No.1045 2020/12/02(Wed) 14:29:08
COM_Errorについて / IKU
起動中のエクセル操作でCOM_Errorになります。

---------------------------------------------------------------------
EXCEL = CREATEOLEOBJ("Excel.Application") // COMオブジェクトの作成
EXCEL.RANGE("A1")="123"
---------------------------------------------------------------------

です。 WIN10とEXCEL2019です。

原因は管理者権限と書いている掲示板を見つけましたが、UWSCは管理者権限なっておりません。UWSCは管理者権限ありでも試しました。

バージョンはuwscpro5302・uwscpro_4_6b.exeを試しました。

親切な方教えてもらえませんか。

No.1042 2020/12/01(Tue) 19:22:36

Re: COM_Errorについて / stuncloud
EXCEL.RANGE("A1").Value ="123"
でどうでしょうか
Valueは省略可能だったと記憶してますが、省略した場合の動作がうまく行ってないという可能性がある…のかも?

ちなみに管理者権限云々についてですが、これは闇雲にやっても意味のないものです
他所だとおまじないレベルでとりあえず言い出す人が結構いるんですよね…正直やめてほしい…

UWSCを管理者として実行する必要があるのは
・操作対象のアプリケーションが管理者として実行されている
・管理者特権を必要とするファイルやレジストリ、システム設定などの操作する
といった場合くらいです

Excelが管理者として実行されてるということはそうそうないはずですし、Excelをわざわざ管理者として実行する必然性もないので、UWSCも通常実行で問題ないです

No.1043 2020/12/02(Wed) 01:08:05

Re: COM_Errorについて / yanyan
対象となるWorkbookを開いていないからです。

EXCEL = CREATEOLEOBJ("Excel.Application") // COMオブジェクトの作成
Excel.Visible = True
Excel.Workbooks.Add
EXCEL.RANGE("A1")="123"

No.1044 2020/12/02(Wed) 06:56:49
IEで印刷時にカスタム倍率欄に数値を入力する方法 / naru
お世話になります。

IEでホームページの印刷を行いたいのですが、うまく1枚に収めるために
印刷プレビューからカスタムを選択し「75」といったコード入力をしたいです。

~~~~~~~~~~~~
CLKITEM(XXX, "印刷プレビュー", CLK_LEFTCLK)
で印刷プレビューを表示後、カスタムをうまく触る方法が分かりません。
ご教授いただけないでしょうか。

No.1039 2020/11/27(Fri) 16:49:29

Re: IEで印刷時にカスタム倍率欄に数値を入力する方法 / Rayna
>>1039 naru さん

 // Win10 IE11

 // UIを操作する上でショートカットキーが設定されている場合は使うと楽です
 // 設定されている場合、大体マウスオーバーで表示されます

 // 操作しようとしてるドロップダウンリストは [Alt] + [S] で選択できるので
 // 選択した後 [PageDown] 等で一番下までスクロールできます
 // 更に倍率指定のエディットボックスも [Alt] + [T] で選択できるので
 // 選択した後 倍率を SendStr してあげましょう
 // 最後に [TAB] でフォーカスを移すことで倍率を確定させます

 Dim idWnd = GetId("印刷プレビュー")
 ScKey(idWnd, VK_ALT, VK_S)
 ScKey(idWnd, VK_NEXT)
 ScKey(idWnd, VK_ALT, VK_T)
 SendStr(idWnd, "75")
 ScKey(idWnd, VK_TAB)

No.1040 2020/11/27(Fri) 22:34:16

Re: IEで印刷時にカスタム倍率欄に数値を入力する方法 / naru

Rayna様

返信ありがとうございます。
早速試させていただき無事動作いたしました。

内容もイメージしやすいものですから忘れずに覚えておこうと思います。
感謝です。

No.1041 2020/11/30(Mon) 12:33:24
下に出すには / スージーさん
お世話になります。
BALLOONやSLCTBOXやCREATEFORMなど、FOM_TOPMOSTなどで、全面に固定とかはできるようですが、デスクトップ上のファイルアイコンやショートカットの下に表示することはできないでしょうか。

No.1034 2020/11/26(Thu) 07:35:42

Re: 下に出すには / stuncloud
僕の知る限りではできないです
操作できなくても良いのであれば、壁紙としてむりやり表示させるという手はありそうですが…

No.1035 2020/11/26(Thu) 09:39:24

Re: 下に出すには / stuncloud
よもやと思い検索してみたら出てきましたね…
https://stackoverflow.com/questions/17512685/put-a-window-behind-desktop-icons

そこからリンクされてたもの
https://stackoverflow.com/questions/34952967/drawing-to-the-desktop-via-injection
なにか描画することは可能といえば可能っぽいですね?

詳しくはこっちみたいですね
https://www.codeproject.com/Articles/856020/Draw-Behind-Desktop-Icons-in-Windows-plus
WorkerWというウィンドウを挟み込んでそこに子ウィンドウを追加してますね
(あっでもボタン操作とかそのままだとできないのか…これはUWSCになんとかできるやつなのか…?)

というわけで、結論はやる気と根気次第?ですね!

No.1036 2020/11/26(Thu) 09:58:20

Re: 下に出すには / stuncloud
やってみました

https://gist.github.com/stuncloud/432e8267f08e738c71fafd011b8ea36f

僕の環境ではあらゆるウィンドウの下には行くものの、アイコンの下には潜り込ませられませんでした
なにかやり方が間違ってるのかもしれません…

No.1037 2020/11/26(Thu) 18:31:59

Re: 下に出すには / スージーさん
>訳 デスクトップアイコンの背後に描画、
>訳 家の窓に車の絵を描くことと、実際に居間に車を駐車することの違い、、
う〜ん、stuncloudさんでも、できなかったですか、
ワタシの環境では、ウィンドウの上のままでした、ありがとうございました。

No.1038 2020/11/26(Thu) 18:47:56
元文が、残ってしまう / seen
お世話になります。
どうしても解決できそうにないので、お願いします。
全文○は、xにかえられるのですが、同時に元文が残ってしまいます、どこか間違っているのでしょうか。

fid = FOPEN("testtxt",F_READ or F_WRITE) 
   atai = FGET(fid, F_ALLTEXT)   
    atai = REPLACE(atai, "○", "x")  
  FPUT(fid, atai)         
FCLOSE(fid)     

No.1031 2020/11/24(Tue) 07:27:07

Re: 元文が、残ってしまう / しろまさ
FPUT のデフォルト動作が「追記」だからです。
第三引数に F_ALLTEXT を入れてください(uwsc.chm参照)

No.1032 2020/11/24(Tue) 11:16:55

Re: 元文が、残ってしまう / seen
見逃していました、素早いアドバイスありがとうございました。
No.1033 2020/11/24(Tue) 20:04:39
ファイルの大きさ / アカザ
こんばんは、よろしくお願いします。
デスクトップにあるファイルとショートカットの大きさを知る方法は、ございますか。
プロパティを起動させれば、サイズは、わかるのですが、上下左右の高さ横幅を知るには、どうすればよろしいでしょうか。

No.1029 2020/11/17(Tue) 20:26:36

Re: ファイルの大きさ / アカザ
お騒がせしました、自己解決しました。
No.1030 2020/11/18(Wed) 06:19:40
文字を分解 / sarauma
お世話になります。
以下の文字を分解、取得するには、どのようにすればよろしいでしょうか。
2.21.2-1.4135.523.3-38.3
決まりごととして、少数点を目標として、バーを消して、posかtokenでできるのかと思うのですが、お知恵をお貸しいただけないでしょうか、
cnt = "2.21.2-1.4135.523.3-38.3"
for i = 1 to 6
  print Token(". ", cnt, True)
  Sleep(1)
next
うまく取り出すことができません。
2.2
1.2
1.4
135.5
23.3
38.3

No.1018 2020/11/09(Mon) 07:13:58

Re: 文字を分解 / stuncloud
> 2.2
> 1.2
> 1.4
> 135.5
> 23.3
> 38.3


これを見るに要件は小数点第一位までを切りだす、ということと判断してやってみました
posで小数点の位置を割り出し、そこから+1したところまでcopyして小数点第一位までを得る
ということをやっています
分割したものはSafeArrayに入れて返しています


cnt = "2.21.2-1.4135.523.3-38.3"
decimals = SplitToDecimalNumber(cnt)

for d in decimals
 print d
next

// 結果

// 2.2
// 1.2
// 1.4
// 135.5
// 23.3
// 38.3


function SplitToDecimalNumber(str)
 result = safearray(0, -1)
 i = -1
 for a in split(str, "-")
  p = 1
  s = 1
  pos = pos(".", a, p)
  while pos > 0
   i = resize(result, i + 1)
   result[i] = copy(a, s, pos - s + 2)
   p = p + 1
   s = s + length(result[i])
   pos = pos(".", a, p)
  wend
 next
fend

No.1019 2020/11/09(Mon) 11:31:23

Re: 文字を分解 / しろまさ
// 同じく、小数点第一位までを切りだす。-も残す。の正規表現版です。

cnt = "2.21.2-1.4135.523.3-38.3"
#tx = rRep(cnt, "(\.\d)", "$1<#cr>") // 正規表現 置換
#sa = Split(#tx, "<#cr>")
for i = 0 to length(#sa) -1
print #sa[i]
next
Function rRep(a_text, a_ptn, a_after) ; Dim reg = CreateOLEObj("VBScript.Regexp"); reg.Global = TRUE; reg.Multiline = TRUE; reg.pattern = a_ptn; Result = reg.Replace(a_text, a_after) ; FEnd

No.1020 2020/11/09(Mon) 12:10:52

Re: 文字を分解 / Rayna
>>1018 sarauma さん

 // 組み込み関数で実装するなら条件分岐して自力で分解するしかないです(stuncloudさんの手法)
 // 動作をフローチャートに書き起こしてみるとわかりやすいかもしれません

 // 全部一気にやろうとすると正規表現が便利です (しろまささんや私の手法)
 // 敷居が高そうに見えますが覚えたら割と複雑な条件も簡単に指定することができます

 // 正規表現の Execute で
 // "2.21.2-1..4135.523.3-38.3" や
 // "2.21.2-1.4.1.35.523.3-38.3" 等の 不正入力にも対応させてみました

 Dim cnt = "2.21.2-1.4135.523.3-38.3"
 Dim i, oRe, oMatches
 oRe = CreateOleObj("VBScript.RegExp")
 With oRe
  .Pattern = "\d{1,}\.\d" // 「\d(数字)の1個以上の連続」+「\.(.)」+「\d(数字)」
 //.Pattern = "-{0,1}" + .Pattern // 符号も入れる場合: 「- が0個から1個」+「1行前に定義したパターン」
  .Global = TRUE

  oMatches = .Execute(cnt) // パターンにマッチした要素を返してくれる
  For i = 0 To oMatches.Count-1
   Print oMatches.Item[i].Value
  Next
 EndWith

No.1021 2020/11/09(Mon) 15:04:02

Re: 文字を分解 / sarauma
ありがとうございます、なんか、上級生に、いじめられてる気がします(笑い)。

唯一、Rayna先輩の//動作をフローチャートに書き起こしてみる//が、お優しいお言葉に見えました。

safearrayって、見たことないぞ!、と思ったら、ヘルプにしっかりと在るし。
a_ptnって、何処から出てきたんだ!、、正規表現にあるのでしょうが、敷居が高いというより、大きな壁が立ちはだかりました。

こちらの勉強不足を痛感し、精進させていただきます。

No.1022 2020/11/09(Mon) 22:06:48

Re: 文字を分解 / Rayna
>>1022 sarauma さん

 a_ptn は rRep という ユーザー定義関数 の 引数 です
 マルチステートメントで見にくくなっていますが使わずに整形すると以下になります

  Function rRep(a_text, a_ptn, a_after)
   Dim reg = CreateOLEObj("VBScript.Regexp")
   reg.Global = TRUE
   reg.Multiline = TRUE
   reg.pattern = a_ptn
   Result = reg.Replace(a_text, a_after)
  FEnd

 この関数は 正規表現のReplace の動作をユーザーが関数化したものです
 関数化することで違う引数の組み合わせに対して同じ動作をさせる事ができます
  しろまささんの rRep関数で例をあげるなら
   // .(すべての文字)
   Print rRep("hogefugapiyohogerahogehoge", "h.g.", "[REPLACED]") // [REPLACED]fugapiyo[REPLACED]ra[REPLACED][REPLACED]
   Print rRep("hogefugapiyohogerahogehoge", "g.", "[置換済]") // ho[置換済]fu[置換済]piyoho[置換済]raho[置換済]ho[置換済]
  みたいなことができます

 詳しくはヘルプの「スクリプト」->「関数の定義」以下の説明に書かれています

 関数rRepはおそらくここの正規表現から
 その他の組込関数、構文の動作についても詳しく書かれているので
 勉強するのであればわかりやすいかと。
 http://siromasa.html.xdomain.jp/uwsc/indexRecord.html

No.1023 2020/11/10(Tue) 18:13:13

Re: 文字を分解 / satocha
powershell関数を使えば1行です

print powershell("'2.21.2-1.4135.523.3-38.3' -split '-'|%{[regex]::matches($_,'\d+\.\d')}|%{$_.value}")

これだけだと「いじめられた」になりそうなので、少しばかり考え方のヒントみたいなものを。

質問は、

2.21.2-1.4135.523.3-38.3



2.2
1.2
1.4
135.5
23.3
38.3

にすること、

ですよね。いきなりでは大変なので、
最初に、ハイフン(「-」)で区切ることを考えます

2.21.2
1.4135.523.3
38.3

という形にすることを考えます。
文字列を特定の文字(今の場合はハイフン)で区切って部分列の配列にする
splitという組み込み関数がUWSCにはあります。
同様にpowershellには「-split」演算子があり、
javascriptの文字列には「.split()」というメソッドがあります、

プログラム処理で皆が必要とする機能は大体一緒で、「split(裂く、分ける)」とかいう名前がついてたりします。


次に一番大変そうな
1.4135.523.3

1.4
135.5
23.3
にすることを考えます。これができれば、ほかの二つは簡単ですからね。


変換後の形(例:「135.5」)を見ると、
数字(1ケタ以上)+小数点+数字1ケタ
となっています。
これを正規表現では「\d+\,\d」と表します(「+」と「{1,}」は同じ意味です)。


UWSCのsplit関数、正規表現の"\d{1,}\.\d"を調べるときは、今のことを踏まえて考えてみてください

No.1024 2020/11/10(Tue) 21:50:19

Re: 文字を分解 / sarauma
みなさん、ありがとうございます、感激一杯です。
教えていただいて、失礼な言い方になり、申し訳ございませんでした。
決して、本当にいじめられてると感じたわけではないのでご容赦ください。
レベルが違い過ぎる、という感覚でしたが、これもこの掲示板ならではです。
正規表現も含めて、今後の目標にしていきます、詳しく解説もいただき、本当にありがとうござす。

No.1025 2020/11/11(Wed) 07:51:27

Re: 文字を分解 / しろまさ
Raynaさん、解説・紹介、ありがとうございます。

saraumaさん、壁が在るのは自分の心の中だけですよ。
正規表現など、関数3 プロパティ数個 記号十数個 覚えるだけですから。
(かくいう私も、師匠にメールで手取り足取り教わった口ですが)

実は私がこの掲示板で執拗に正規表現のReplaceを押す理由は、
初動が速い、大量データの処理が速いからです。
UWSCで文字列をループ処理する場合、処理行が多いと結構時間が掛かります。
なるべくループを省いて文字列処理を考えると正規表現Replaceが最適なのです。

初心者だから難しい(ように見える)ものを後回しにするのではなく、
初心者のうちからこれを吸収しておけば、今後テキスト処理で悩むことが少なくなる。。と信じています^^

No.1026 2020/11/11(Wed) 10:16:51

Re: 文字を分解 / stuncloud
単純な処理なら正規表現が楽でいいですね
ただしなんでもかんでも正規表現でやろうとするとしんどい場合もあります
複雑な正規表現だと

・デバッグがしづらい
  結果が思わしくない場合に不正箇所の特定が難しくなる
  一部分だけ抜き出して試す、というのが困難な場合がある
・かえって遅くなることがある
  繰り返し処理が多いような正規表現だとその分時間がかかる
  下手をするとフリーズしたかな?と勘違いするような状況になることも!

ので、組み込み関数でかんたんに行けそうならそれで
組み込み関数の組み合わせでもできるけど正規表現なら一発、という状況なら正規表現
正規表現が複雑になりすぎたら一部を組み込み関数で処理して、残りを正規表現

みたいな感じで使い分けできると良いですね

No.1027 2020/11/11(Wed) 11:53:41

Re: 文字を分解 / sarauma
stuncloudさん、ありがとうございます。
safearrayは、アハ体験でした、UWSCでスマートにできる方法が教われて、凄く感動しています、上級生と比喩してしまい、とても反省しております。
最速上位の柱、UWSCの真の後継者と尊敬しております、鬼滅の刃であれば、冨岡義勇のイメージで、カッコ良すぎです。
どうやって、基本応用をマスターできるのか、本当に教えて欲しいです。

しろまささん、ありがとうございます。
掲示板環境も含め、高速のパワーをあっさりと発揮される、勝手に、鱗滝左近次のイメージで恐れ多しで感謝です。

satochaさんと、Raynaさんは、もう、感謝しかない、強く優しい、煉獄杏寿郎さんのイメージです、考え方の手順、ヒントが、勉強になります。
みなさんの足元にまだまだ、近づけなさそうですが、split等で、泥臭くからでも地道に、スタートしてみます。

No.1028 2020/11/11(Wed) 19:26:02

以下のフォームに記事No.と投稿時のパスワードを入力すれば
投稿後に記事の編集や削除が行えます。
200/200件 [ ページ : << 1 ... 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 >> ]

- HOME - お知らせ(3/8) - 記事検索 - 携帯用URL - フィード - ヘルプ - メール - 環境設定 -

- Skin: Modern v2.0 - Author: ロケットBBS -

Rocket Board Type-X (Free) Rocket BBS