CyberChaos(さいばかおす)

プログラミング言語、トランスパイラ、RPA、ChatGPT、データマイニング、リバースエンジニアリングのための忘備録

VBAで簡易CADチャットボットを作った

2023-05-13 20:12:31 | VBA

https://blog.goo.ne.jp/nichikon2/e/bc53b832fb46b2466196b41cc1cdf2ff

の記事で作ったプログラムをちょっと改造してみた。

ユーザーが入力した文字の中に「円」または「直線」が含まれているかどうか判定し、

もし含まれていた場合のみ直線または円を描くプログラムを実行するようにした。

ちなみにbardでは何回も修正するように依頼したのだが、

全く直らないどころか同じ返答を繰り返すばかりだったので、

ChatGPTに頼んでみたら、一発で直った。

それが次のコードである。

Sub CAD()
Dim userInput As String
Dim hasLine As Boolean
Dim hasCircle As Boolean
userInput = InputBox("何をしましょうか?")
hasLine = InStr(userInput, "直線") > 0
hasCircle = InStr(userInput, "円") > 0

If hasLine Then
    MsgBox "始点と終点の座標を指定してください。"
    
    Dim StartX As Integer
    Dim StartY As Integer
    Dim EndX As Integer
    Dim EndY As Integer
    
    StartX = InputBox("始点のX座標を入力してください。")
    StartY = InputBox("始点のY座標を入力してください。")
    EndX = InputBox("終点のX座標を入力してください。")
    EndY = InputBox("終点のY座標を入力してください。")
    
    With ActiveSheet.Shapes.AddLine(StartX, StartY, EndX, EndY)
        .Line.Weight = 2 ' Set the line thickness to 2 points
    End With
ElseIf hasCircle Then
    MsgBox "中心の座標と半径を入力してください。"
    
    Dim centerX As Variant
    Dim centerY As Variant
    Dim radius As Variant
    Dim drawingSheet As Worksheet
    Dim newCircle As Shape
    
    Set drawingSheet = ActiveSheet
    centerX = Application.InputBox("Enter the x-coordinate of the center of the circle", "Center X", Type:=1)
    centerY = Application.InputBox("Enter the y-coordinate of the center of the circle", "Center Y", Type:=1)
    radius = Application.InputBox("Enter the radius of the circle", "Radius", Type:=1)
    Set newCircle = drawingSheet.Shapes.AddShape(msoShapeOval, _
     -radius, centerY - radius, radius * 2, radius * 2)
    
    With newCircle.Line
        .Weight = 2 ' Set the line thickness to 2 points
        .DashStyle = msoLineSolid ' Set the line style to solid
        .ForeColor.RGB = RGB(255, 0, 0) ' Set the line color to red
    End With
    newCircle.Fill.Visible = msoFalse ' Set the fill to transparent
Else
    MsgBox "そのような操作はできません。"
End If
End Sub

てなわけで今回はChatGPTの勝ち。


autolispでpythonを呼び出して自動でautocadでモデリング

2023-05-13 12:36:45 | Autocad
autolispでpythonを呼び出して自動でautocadでモデリングをしたい

はい、Autolispを使用してPythonを呼び出してAutoCADで自動モデリングを行うことができます。AutolispはAutoCADで使用できるプログラミング言語であり、Pythonは強力で用途の広いプログラミング言語です。 Autolispを使用してPythonを呼び出すと、AutoCADで複雑なモデリングタスクを自動化できます。

Autolispを使用してPythonを呼び出すには、Autolisp関数acedEval()を使用する必要があります。acedEval()関数は、Pythonコード文字列を実行するために使用されます。たとえば、次のAutolispコードは、Pythonコード文字列print("Hello, world!")を実行します。

(acedEval "print('Hello, world!')")

詳細
Autolispを使用してPython関数を呼び出すこともできます。たとえば、次のAutolispコードは、Python関数math.sqrt()を呼び出して2の平方根を計算します。

(acedEval "(math.sqrt 2)")

詳細
Autolispを使用してPythonライブラリをロードすることもできます。たとえば、次のAutolispコードは、Pythonライブラリnumpyをロードします。

(acedEval "import numpy")

詳細
Autolispを使用してPythonオブジェクトを作成することもできます。たとえば、次のAutolispコードは、Pythonオブジェクトnumpy.array([1, 2, 3])を作成します。

(acedEval "arr = numpy.array([1, 2, 3])")

詳細
Autolispを使用してPythonオブジェクトを操作することもできます。たとえば、次のAutolispコードは、Pythonオブジェクトarrの要素の合計を計算します。

(acedEval "print(arr.sum())")

詳細
Autolispを使用してPythonオブジェクトを保存することもできます。たとえば、次のAutolispコードは、Pythonオブジェクトarrをファイルoutput.csvに保存します。

(acedEval "arr.tofile('output.csv')")

詳細
Autolispを使用してPythonオブジェクトを読み込むこともできます。たとえば、次のAutolispコードは、ファイルinput.csvからPythonオブジェクトarrを読み込みます。

(acedEval "arr = numpy.loadtxt('input.csv', delimiter=',')")

詳細
Autolispを使用してPythonオブジェクトを表示することもできます。たとえば、次のAutolispコードは、Pythonオブジェクトarrを図面に表示します。

(acedEval "arr.plot()")

詳細
これらは、Autolispを使用してPythonを呼び出してAutoCADで自動モデリングを行う方法のほんの一例です。Autolispを使用してPythonを呼び出す方法は他にもたくさんあります。Autolispを使用してPythonを呼び出す具体的な方法は、実行しようとしている特定のタスクによって異なります。

…だとよ。マジか?
これが本当だったらChatGPT死亡確定だぞwww
めちゃくちゃ応答が早いし。


CATIAのマクロまたはVBA、VBSでPythonを呼び出す方法は?

2023-05-13 12:28:48 | CATIA
CATIAのマクロまたはVBA、VBSでPythonを呼び出す方法は?

CATIAのマクロまたはVBA、VBSでPythonを呼び出すには、次の手順に従います。

Pythonをインストールします。
Pythonインタープリターのパスを環境変数に追加します。
CATIAマクロまたはVBA、VBSコードで、次のコマンドを使用してPythonインタープリターを起動します。

CreateObject("WScript.Shell").Run "python.exe"
コードは慎重に使用してください。詳細
Pythonインタープリターが起動したら、次のコマンドを使用してPythonコードを実行できます。

python your_python_code.py

詳細
たとえば、次のコードは「hello_world.py」という名前のPythonファイルを作成し、そのファイルを実行します。

CreateObject("WScript.Shell").Run "python.exe" "hello_world.py"

詳細
「hello_world.py」ファイルの内容は次のとおりです。

print("Hello, world!")

詳細
これにより、次の出力が表示されます。

Hello, world!

詳細
ここにメッセージを入力してください
Bard で生成される情報は不正確または不適切な場合がありますが、Google の見解を述べるものではありません。


MQL4でPythonを呼び出す方法

2023-05-13 12:23:31 | FX

MQL4でPythonを呼び出す方法

MQL4 から Python を呼び出す方法はいくつかあります。1 つの方法は、Python プログラムをコンパイルして DLL ファイルにしてから、MQL4 から DLL ファイルをロードすることです。もう 1 つの方法は、Python スクリプトを実行するサーバーを使用して、MQL4 から Python スクリプトを呼び出すことです。

DLL ファイルを使用して MQL4 から Python を呼び出すには、次の手順に従います。

Python プログラムをコンパイルして DLL ファイルにします。
DLL ファイルを MQL4 のインストールディレクトリにコピーします。
MQL4 のソースファイルで、次の行を使用して DLL ファイルをロードします。


#include

HMODULE hModule = LoadLibrary("python.dll");

if (hModule == NULL) {
// エラー処理
}


DLL 内の関数を呼び出すには、次の構文を使用します。

FARPROC pFunc = GetProcAddress(hModule, "FunctionName");

if (pFunc == NULL) {
// エラー処理
}

int result = (int)pFunc();

サーバーを使用して MQL4 から Python スクリプトを呼び出すには、次の手順に従います。

Python スクリプトを実行するサーバーをセットアップします。
MQL4 のソースファイルで、次の行を使用してサーバーに接続します。


#include
#include

using namespace std;

int main() {
// サーバーに接続
string host = "localhost";
int port = 5000;

Socket socket(host, port);

if (!socket.isConnected()) {
// エラー処理
}

// Python スクリプトを実行する
string command = "python myscript.py";

socket.write(command.c_str());

// 応答を待つ
char buffer[1024];

int bytesReceived = socket.read(buffer, 1024);

if (bytesReceived == -1) {
// エラー処理
}

// 応答を出力する
cout <

// サーバーを切断する
socket.close();

return 0;
}


VBAからPythonを呼び出す方法をbardに訊いてみた

2023-05-13 10:44:31 | VBA
VBAのソースコード内でPython言語を呼び出す方法は?

VBA は Microsoft Office アプリケーション用に開発されたマクロ言語です。 Python は、データ分析、機械学習、Web 開発など、さまざまなタスクに使用できる汎用プログラミング言語です。 VBA から Python を呼び出すには、xlwings ライブラリを使用できます。 xlwings は、VBA から Python コードを簡単に実行できるようにする COM アドインです。

xlwings を使用するには、まずライブラリをインストールする必要があります。 Windows の場合は、Microsoft Visual Studio からインストールできます。 macOS の場合は、Homebrew からインストールできます。

ライブラリをインストールしたら、VBA プロジェクトで参照する必要があります。これを行うには、プロジェクトの参照設定ウィンドウを開き、xlwings.xlam ライブラリを選択します。

ライブラリを参照したら、VBA コードで Python コードを呼び出すことができます。これを行うには、RunPython 関数を使用します。RunPython 関数には、呼び出す Python コードの文字列を引数として渡します。

たとえば、次の VBA コードは、Python の組み込みの print() 関数を呼び出します。

Sub CallPython()

Dim result As String
result = RunPython("print('Hello, world!')")

MsgBox result

End Sub

このコードを実行すると、次のメッセージボックスが表示されます。

Hello, world!

xlwings は、VBA から Python を呼び出すための強力なツールです。データ分析、機械学習、Web 開発など、さまざまなタスクに使用できます。

なるほど。んじゃやってみるわ。