質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

3004閲覧

PythonのコードをC#かVBに変換したい

situmondaro1234

総合スコア2

VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2021/08/08 05:36

編集2021/08/10 05:47

PythonのコードをVBかC#に変換したいです。
目的は学習です。
Pythonコードは正常に動作している物で
VBコードは現在動作していない物です。
元のPythonコードと、私が書いたVBコードを載せます。
例外エラーなどは出ず処理は一応実行できますが、動作しない状況です。
私が書いたVBコードはどこが間違えているのかご教示願いたいです。

Python

1import requests 2import json 3# csvファイル取得 4def get_csv(groupcodes, commandbytes): 5 url = 'http://192.168.14.100:7001/testapi/sendbroadcastcommand?groupcodes={}&commandbytes={}'. format(json.dumps(groupcodes), json.dumps(commandbytes)) 6 print(url) 7 headers = { 8 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8' 9 } 10 try: 11 response = requests.post(url=url, headers=headers) 12 except Exception as e: 13 print("POST 例外発生!") 14 print(e) 15 return -1 16 if response.status_code != 200: 17 print("POST 応答エラー") 18 return -2 19if __name__ == '__main__': 20 grcd1 = ['A','B'] 21 cmdbyte1 = [4, 17, 0, 234] 22 try: 23 get_csv(grcd1, cmdbyte1) 24 except Exception as e01: 25 print("get_scv()の中に例外発生!") 26 print(e01)

VB

1Imports Newtonsoft.Json 2Public Class Form1 3 Public Class testjson 4 Public Property groupcodes As String 5 Public Property commandbytes As String 6 'Public Property sikaku As String() 7 End Class 8 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 9 Dim ret As Int32 10 'Dim postData As String 11 Dim postDataBytes As Byte() 12 Dim req As System.Net.WebRequest 13 Dim reqStream As System.IO.Stream = Nothing 14 Dim res As System.Net.WebResponse = Nothing 15 Dim resStream As System.IO.Stream = Nothing 16 Dim sr As System.IO.StreamReader = Nothing 17 Try 18 Dim syain1 As testjson = New testjson() 19 syain1.groupcodes = "['A','B']" 20 syain1.commandbytes = "[4, 17, 0, 234]" 21 Dim Json As String = JsonConvert.SerializeObject(syain1) 22 'バイト型配列に変換 23 postDataBytes = System.Text.Encoding.UTF8.GetBytes(Json) 24 'WebRequestの作成 25 req = System.Net.WebRequest.Create("http://192.168.14.100:7001/testapi/sendbroadcastcommand") 26 'メソッドにPOSTを指定 27 req.Method = "POST" 28 'ContentTypeを"application/json"にする 29 req.ContentType = "application/json" 30 ''POST送信するデータの長さを指定 31 req.ContentLength = postDataBytes.Length 32 req.Proxy = Nothing 33 'データをPOST送信するためのStreamを取得 34 reqStream = req.GetRequestStream() 35 '送信するデータを書き込む 36 reqStream.Write(postDataBytes, 0, postDataBytes.Length) 37 ret = 0 38 Catch ex As Exception 39 'エラーコードの設定 40 ret = 100 41 Finally 42 If IsNothing(reqStream) = False Then 43 reqStream.Close() 44 End If 45 If IsNothing(sr) = False Then 46 sr.Close() 47 End If 48 End Try 49 End Sub 50End Class

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gentaro

2021/08/08 05:44

質問投稿前に表示される日本語の確認事項すら理解できないのであれば、たぶん小学生ぐらいからお勉強をやりなおさないと無理じゃないですかね。
BeatStar

2021/08/08 05:59

プログラミングは『こう書けばよい』ではないです。 今回のは質問ではなく、依頼または『命令』です。 「俺様は努力したくないからアンタらがやれ。は? アンタ、カネ取んの? うぜぇ…」と言っているのと大差ありません。 回答者はカネを貰ってやっているのではなく、善意からやっています。 それなのに『自分は努力せずに』、『他人がやるのが当たり前』なのでしょうか。 あまりにも他人を舐めすぎ。
BeatStar

2021/08/08 06:42

質問の修正を確認しました。 それでも『自分でやりましょう』です。 そもそもプログラミングは『書いて終わり』…ではありません。 デバッグやテストまで含みます。 少なくともデバッグまでは当たり前の技術です。(プログラミングをやるからには) まずは自分でデバッグしましょう。 仮に自分でデバッグしたができない…というのなら『質問方法を工夫しましょう』です。 回答者は当事者じゃ無いので提示された情報からしか読み取れません。 なので、『試したこととその結果』とかを載せましょう。 そうしないと、回答者も質問者さんがやったこともすべて試さないといけないので時間の無駄です。 質問者さんが試したこととその結果とかを出せば、その部分は考慮しなくても済むので時間短縮ができます。 まずは自分でデバッグすることと質問方法を工夫することをやってください。
gentaro

2021/08/08 09:37

「処理は一応実行できますが、動作しない」って書いて伝わると本気で思ってるの? 丸投げじゃないなら、期待する動作と実際の結果がどのようになるのか、ぐらい詳細に説明するべきだし、自分でどのあたりの処理がおかしいと思い、何を調べたかぐらい書こうや。 こうやって1から10まで指示されないと質問文すら満足に書けないなら、プログラミングなんてできるわけがない。
退会済みユーザー

退会済みユーザー

2021/08/09 00:51

何を作っているか書いてください。Windows Forms? WPF? ASP.NET Web Forms? その他? 開発環境を書いてください。OS, Visual Studio のバージョン、.NET Framework or Core のどっちかとそのバージョンなど。 読んで質問内容を見直しましょう→ https://teratail.com/help/question-tips 特に「2. 質問をする前に自分で何がわからないのかを把握しましょう」のあたり。今は何もわかってなくて、何が分かれば解決できるのかを文書化できないのでは? Python のコードを見ると、Web API に対して URL にクエリ文字列を情報として追加し POST 要求をかければ、CSV 形式のデータが応答として返ってくるということのようですが、VB のコードはそうなっていないようです。分かって書いてないのでは?
Zuishin

2021/08/09 00:58

> 目的は学習です。 大変効率が悪そうです。 入門書を読むところから始めた方がいいでしょう。
maisumakun

2021/08/09 01:00

> 目的は学習です。 「何の」学習でしょうか?
Zuishin

2021/08/09 01:03 編集

それと、VB.NET は開発終了したので、今後の .NET のバージョンアップから取り残されることがアナウンスされています。 .NET 6 以降は VB.NET をサポートしません(無理やり使える部分がなくはありませんが保証はされません)。 今から学習しても仕事は減る一方でしょう。
退会済みユーザー

退会済みユーザー

2021/08/09 05:44

> 回答得られない為、本質問は取りやめます。 回答が得られない最大の原因は自分の質問の仕方の問題だと認識できない人なのだろうね。ゆとり教育の成果かなぁ・・・
Zuishin

2021/08/09 05:50

返事も何もしないで回答が得られないってそりゃ当然だろとしか。
BeatStar

2021/08/09 05:56

> 回答得られない為、本質問は取りやめます。 その言い分だと、『俺様は悪くない! 回答者が悪いんだ!』としか読めませんよ? そこまで暴言を吐く態度なら、全て自分でやるべきでは。 回答者は善意でやっており、回答する義務はありません。
guest

回答2

0

まずはあなたなりにコードを書いてみましょう。

コード作成依頼はここでは受け付けていません

投稿2021/08/08 05:38

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

situmondaro1234

2021/08/08 06:03

私が作成したコードを追記しました。よろしくお願いします
退会済みユーザー

退会済みユーザー

2021/08/09 00:54

回答でないことを回答欄に書くのは止めましょう。そんなに点数が欲しい? もし回答を書く気があるなら、質問者さんはあなたの求めに応じてコードを追記したのだから、回答(少なくとも何らかのフィードバック)を書いてはいかが?
guest

0

ベストアンサー

質問内容が消えていますが、運営が戻すはずなので回答しておきましょうか。
もちろんsitumondaro1234さんご本人が戻してもいいですよ。

C#で(VBは全然わかりません)、できるだけ元コードと同じ動作になるように移しました。
確認に httpbin.org を使用させていただきました。

変更点: 宛先変更・レスポンス表示

Python

1import requests 2import json 3 4 5def get_csv(groupcodes, commandbytes): 6 #url = 'http://192.168.14.100:7001/testapi/sendbroadcastcommand?groupcodes={}&commandbytes={}'. format(json.dumps(groupcodes), json.dumps(commandbytes)) 7 url = 'https://httpbin.org/post?groupcodes={}&commandbytes={}'. format(json.dumps(groupcodes), json.dumps(commandbytes)) 8 print(url) 9 10 headers = { 11 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8' 12 } 13 try: 14 response = requests.post(url=url, headers=headers) 15 16 except Exception as e: 17 print("POST 例外発生!") 18 print(e) 19 return -1 20 21 if response.status_code != 200: 22 print("POST 応答エラー") 23 return -2 24 25 print(json.dumps(dict(response.headers), indent=2)) 26 print(json.dumps(response.json(), indent=2)) 27 28 29if __name__ == '__main__': 30 grcd1 = ['A','B'] 31 cmdbyte1 = [4, 17, 0, 234] 32 33 try: 34 get_csv(grcd1, cmdbyte1) 35 except Exception as e: 36 print("get_scv()の中に例外発生!") 37 print(e)

出力: 一部伏せました(「***」部分)

json

1https://httpbin.org/post?groupcodes=["A", "B"]&commandbytes=[4, 17, 0, 234] 2{ 3 "Date": "Mon, 09 Aug 2021 08:36:50 GMT", 4 "Content-Type": "application/json", 5 "Content-Length": "603", 6 "Connection": "keep-alive", 7 "Server": "gunicorn/19.9.0", 8 "Access-Control-Allow-Origin": "*", 9 "Access-Control-Allow-Credentials": "true" 10} 11{ 12 "args": { 13 "commandbytes": "[4, 17, 0, 234]", 14 "groupcodes": "[\"A\", \"B\"]" 15 }, 16 "data": "", 17 "files": {}, 18 "form": {}, 19 "headers": { 20 "Accept": "*/*", 21 "Accept-Encoding": "gzip, deflate", 22 "Content-Length": "0", 23 "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8", 24 "Host": "httpbin.org", 25 "User-Agent": "python-requests/2.26.0", 26 "X-Amzn-Trace-Id": *** 27 }, 28 "json": null, 29 "origin": ***, 30 "url": "https://httpbin.org/post?groupcodes=[\"A\", \"B\"]&commandbytes=[4, 17, 0, 234]" 31}

cs

1using System; 2using System.Linq; 3using System.Net; 4using System.Net.Http; 5using System.Text.Json; 6using System.Threading.Tasks; 7 8 9async Task<int> GetCsvAsync(string[] groupCodes, byte[] commandBytes) 10{ 11 var gc = JsonSerializer.Serialize(groupCodes); // "[\"A\",\"B\"]" 12 //var cb = JsonSerializer.Serialize(commandBytes); // "\"BBEA6g==\"" 13 var cb = JsonSerializer.Serialize(commandBytes.Select(x => (int)x).ToArray()); // "[4,17,0,234]" int[]ならOK なんで?w 14 15 //var url = $"http://192.168.14.100:7001/testapi/sendbroadcastcommand?groupcodes={gc}&commandbytes={cb}"; 16 var url = $"https://httpbin.org/post?groupcodes={gc}&commandbytes={cb}"; 17 Console.WriteLine(url); 18 19 var handler = new HttpClientHandler 20 { 21 AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate, 22 }; 23 var client = new HttpClient(handler); 24 var request = new HttpRequestMessage(HttpMethod.Post, url); 25 request.Headers.Add("Accept", "*/*"); 26 request.Headers.Add("ContentType", "application/x-www-form-urlencoded;charset=UTF-8"); 27 request.Headers.Add("User-Agent", ".NET 5.0 HttpClient"); 28 29 HttpResponseMessage response; 30 try 31 { 32 response = await client.SendAsync(request); 33 } 34 catch (Exception e) 35 { 36 Console.WriteLine("POST 例外発生!"); 37 Console.WriteLine(e); 38 return -1; 39 } 40 41 if (response.StatusCode != (HttpStatusCode)200) // HttpStatusCode.OK 42 { 43 Console.WriteLine("POST 応答エラー"); 44 return -2; 45 } 46 47 Console.WriteLine(response.Headers); 48 Console.WriteLine(response.Content.Headers); 49 50 var content = await response.Content.ReadAsStringAsync(); 51 Console.WriteLine(content); 52 53 return 0; 54} 55 56 57string[] grcd1 = { "A", "B" }; 58byte[] cmdbyte1 = { 4, 17, 0, 234 }; 59 60try 61{ 62 await GetCsvAsync(grcd1, cmdbyte1); 63} 64catch (Exception e) 65{ 66 Console.WriteLine("GetCsvAsync()の中に例外発生!"); 67 Console.WriteLine(e); 68}

出力: 一部伏せました(「***」部分)

json

1https://httpbin.org/post?groupcodes=["A","B"]&commandbytes=[4,17,0,234] 2Date: Mon, 09 Aug 2021 08:38:11 GMT 3Connection: keep-alive 4Server: gunicorn/19.9.0 5Access-Control-Allow-Origin: * 6Access-Control-Allow-Credentials: true 7 8Content-Type: application/json 9Content-Length: 591 10 11{ 12 "args": { 13 "commandbytes": "[4,17,0,234]", 14 "groupcodes": "[\"A\",\"B\"]" 15 }, 16 "data": "", 17 "files": {}, 18 "form": {}, 19 "headers": { 20 "Accept": "*/*", 21 "Accept-Encoding": "gzip, deflate", 22 "Content-Length": "0", 23 "Contenttype": "application/x-www-form-urlencoded;charset=UTF-8", 24 "Host": "httpbin.org", 25 "User-Agent": ".NET 5.0 HttpClient", 26 "X-Amzn-Trace-Id": *** 27 }, 28 "json": null, 29 "origin": ***, 30 "url": "https://httpbin.org/post?groupcodes=[\"A\",\"B\"]&commandbytes=[4,17,0,234]" 31}

Top-level statementsを使用したので、.NET 5(C# 9.0)が必要です(使用できない場合はクラスとMainを書いてください)
最上位レベルのステートメント - Main メソッドを使用しないプログラム | Microsoft Docs
トップ レベル ステートメント - C# によるプログラミング入門 | ++C++; // 未確認飛行 C

投稿2021/08/09 08:56

編集2023/07/28 16:07
TN8001

総合スコア9862

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問