VB.NET2008で文字列の分解・格納を行う方法

このQ&Aのポイント
  • VB.NET2008でコマンドライン引数を使用して文字列を取得し、指定された値を変数に格納する方法を教えてください。
  • コマンドライン引数から取得した文字列を解析し、指定されたパラメータの値を変数に格納する方法についてお知らせください。
  • VB.NET2008の環境で、コマンドライン引数から指定された値を変数に代入する方法について教えてください。
回答を見る
  • ベストアンサー

文字列の分解・格納

お世話になります。 文字列の分解についてお聞きします。 環境はVB.NET2008です。 Private Sub Main(ByVal CmdArgs() As String) Dim cmds() As String cmds = System.Environment.GetCommandLineArgs() End Sub コマンドライン引数で以下のように文字列を取得しています。 ("起動exe", "/KEY=○○○/ テーブル名=△△△") この文字列を元に、 変数Aに○○○を変数Bに△△△を代入したいのですが、どうやるのでしょうか? ご教示願います。

質問者が選んだベストアンサー

  • ベストアンサー
  • jcctaira
  • ベストアンサー率58% (119/204)
回答No.2

momonga1119さん 正規表現を使った方が良いかと思います。   Dim cmds() As String   cmds = System.Environment.GetCommandLineArgs()   Dim strKEY As String   Dim strテーブル名 As String   Dim mc As System.Text.RegularExpressions.MatchCollection   mc = System.Text.RegularExpressions.Regex.Matches(cmds(2), _         "KEY=(.*?)($|\)|/) ")   If mc.Count >= 1 Then strKEY = mc(0).Groups(1).Value   mc = System.Text.RegularExpressions.Regex.Matches(cmds(2), _         "テーブル名=(.*?)($|\)|/)")   If mc.Count >= 1 Then strテーブル名 = mc(0).Groups(1).Value 注)KEY=○○○/ KEYは英大文字での対応です。   もし小文字の対応もしたければ、以下のように変更して下さい。   mc = System.Text.RegularExpressions.Regex.Matches(cmds(2), _      "KEY=(.*?)($|\)|/) ", _      System.Text.RegularExpressions.RegexOptions.IgnoreCase) お試し下さい。    

その他の回答 (1)

回答No.1

"/" でSplit()する。 Splitしたものそれぞれを、さらに"="でSplit()する。

関連するQ&A

  • 整数→文字列の置換

    VB6の質問です。 ↓例で、REC変数を文字列の扱い(整数→文字列)にする方法はございますか? 宣言時の変数タイプは、変更したくありません。 宜しくお願いいたします。 Dim REC As Integer Private Sub test() As Integer  ・  ・  ・  ・ REC = '←処理結果をRECに入れる。RECには、文字列が挿入されます。 End Sub

  • 列の数を求めるには

    よろしくお願いします いつもgooの皆さんに大変お世話になっております Private Sub Worksheet_Change(ByVal Target As Range)内のマクロで Dim RightEnd as String RightEnd="T" と変数宣言しています シートの右端はTだということです それでは、値が変化した列の隣の列からRightEndまでの列の数を求めるには どうしたらいいでしょうか? 列の数が求められれば .Offset(, 1).Resize(, 列の数).ClearContentsに代入したいと思います うまく説明できていませんが、よろしくお願いします

  • [VB6]文字列でオブジェクトを指定する方法

    VB6でiniファイルからリードしたフォーム名を元に そのフォームをロードしたいのですが、出来ますでしょうか? 以下のソースで★ところのコメントがしたいのです。 '--------------- Type HogeType testform as Form caption as String End Type Dim FormTest(2) as HogeType Private Sub SetFormData() Set FormTest(0).testform = Form1 '★←ここを"Form1"とか文字列が格納された変数としたい。 FormTest(0).caption = "test1" End Sub Private Sub Main() FormTest(0).Show End Sub 以上、宜しくお願い致します。

  • VBA プロシージャで値を渡す方法

    エクセルVBAのプロシージャで値を渡す方法はどうしたらいいのでしょうか。 たとえば、下記のようなプログラムを書いたとします。 --------------------------------------------- Private Sub test_main() Dim drink As String Dim alcohol As String Call test(cola, beer) End Sub Public Sub test_module(ByVal drink As String, ByVal alcohol As String) Cells(1, 1).Value = drink Cells(2, 2).Value = alcohol End Sub --------------------------------------------- このプログラムはもちろん不完全です。試してみたら動きませんでした。 やりたいことは、メインのプロシージャ(test_main)から、test_moduleを 呼び出し、同時に「cola」と「beer」の値を渡します。呼び出された先で、 エクセルのワークシートのセルに値を入力します。 重複しますが、それぞれの値「cola」と「beer」は変数「drink」と「alcohol」に代入されます。 この変数をcell(1,1)とcell(2,2)に入力します。 ワークシート上のcell(1,1)には「cola」、cell(2,2)には「beer」 と入力されます。 変数は数値ではなく、文字列です。 ポイントは、変数「drink」と「alcohol」をどのプロシージャに宣言するのか また、変数に値「cola」と「beer」をのどプロシージャでどういうふうに代入するのか。 そして代入した変数をどうやって呼び出したいプロシージャに渡すのかです。 このようなことをするには、上記プログラムをどう書き換えたらよいのでしょうか。

  • VB.NETで値や参照について ByRefなど

    VB.NETで値や参照について、まだ初学ですがよろしくお願いします。 VBは2008です。 以下のようなs文字列を参照引数にしたSetDataメソッドがあります。 ByRef s As Stringという引数は、SetData内でsを書き換えると、 呼び出したSetDataメソッド外でも中身が変わるので 私のByRefの認識ではポインタと解釈しています。間違っているでしょうか? SetData(1,1, buf)とすれば、DataGridViewの中は、「初期値」という文字が表示されます。 別のメソッド(KaKikae)でbufを"あ"という文字に変えた場合、SetDataメソッドを使わなくても 書き換わっていると思っていたのですが、実際実行してみると書き換わりません。 値や参照について理解が足りないからだと思いますがわかりません。 どのようにすれば、それが実現できるのでしょうか? Public Class HogeClass Private buf As String = "初期値" Private Sub SetData(ByVal x As Integer, ByVal y As Integer, ByRef s As String) As Boolean Dim dg As DataGridView dg = DataGridView1 dg.Item(x, y).value = s End Sub Private Sub KaKikae() buf = "あ" End Sub End Class

  • VBA・VB6.0・VB.NETの文字列型

     失礼します。  Excel97/2000のVBAの文字列型変数は、アスキーコード129-159/224-252のデータを保持できないみたいですが、これはVB6.0/VB.NETなどでもそうなのですか?  つまり、VBAでは、 Sub main()  Dim s as String  s = Chr$(130)  Sheet1.Cells(1, 1) = Asc(s) End Sub  とすると、シートのA1に「0」が表示されてしまうということです。  というのも、私はVB6.0/VB.NETを持っていないのですが、ちょっとVB2.0時代のコードを使う必要が生じたので、VBAで実行してみたところ、以上のような仕様の違いに気付いたのです。  これがVBAだけの特性なのか、最近のVBはこういう仕様になってしまったのかが知りたいのです。

  • VB.NETにて文字列で指定した関数の実行

    Visual Basic 2005におきまして 変数に文字列で指定したコード(関数)を実行する方法を探しております。 たとえば、下記のコードで、変数funcStringで指定した関数を実行して戻り値を得たいと思っております。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim funcString As String = "testFunc(3,5)" 'ここで上記funcStringで指定した関数を実行して戻り値を得たい。 End Sub 'テスト用の関数 Private Function testFunc(ByVal a As Integer, ByVal b As Integer) As Integer testFunc = a + b End Function Microsoft.JScript.Eval.JScriptEvaluateを利用して文字列をコードとして評価する方法を試しましたが、VBで定義してある関数を呼び出すことはできませんでした。 PHPやJavascriptでいうところのeval関数 PHPのcall_user_func関数 と同じようなことを実現したいと思っております。 いろいろ探してみたのですが、解決策が見つからず、 文字列を解析してSELECT CASEによる分岐で実行する関数を1つずつ振り分けるしか方法はないのかもと思っているのですが、今の開発仕様では100近くの関数に関してこの処理をSELECTで分岐することになりそうなのです。 なにとぞ、よき解決方法がありましたら、お力添えよろしくお願いいたします。

  • 文字列の保存に関して

    質問です。 保存と共有方法についてお聞きしします。私はいつもフォーム内では、 プログラム内で生成した文字列(例:テストhogehoge)を Dim hoge as string ------------------------------ Private Sub CheckBox4_Click(sender As Object, e As EventArgs) Handles CheckBox4.Click Dim Random As .... ←で生成した「テストhogehoge」 hoge = random end sub ------------------------------ と宣言しておいて、 生成された時に hoge = randam(生成した宣言) と保存して、 ソフトが起動中に、いつでも「テストhogehoge」をhogeという場所に 保存しているのですが、起動時にform1.vbで「テストhogehoge」を生成した時に 別フォーム(例: form2.vb)に dim hoge as string に文字列を 保存したいのですが、どうすればいいでしょうか? form2.hoge = random とやっても Null扱いになってしまい、困ってます。 またソフトウェア上での上記みたいな全てのフォームで 共有出来る方法があったら教えて下さい。

  • VB2010 TextBoxの文字列に正しく入力されないのは何故ですか

    VB2010 TextBoxの文字列に正しく入力されないのは何故ですか? string型の変数に文字列を入れ、TextBox.Textに代入すると文字列の後ろが切れてしまう。 Dim st As String st="s01114DG000555<0?e09" TextBox.Text = st この場合、TextBox.Textには"s01114DG000555<0"となり、後ろの4文字が切れてしまっている。 ちなみに、 TextBox.Text = "s01114DG000555<0?e09" とすると、正常に全文字数が入る。 半角文字列の塊なのに、どうしてこのようなことが起きるのでしょうか? また、これの対応策は何ですか? 以上、よろしくお願いします。

  • 重複した文字列をカウントして取り出したい

    初めて質問させていただきます。 VB初心者です。 ソートされた文字列の書き込まれたファイルを読み、 (文字列は、 ”000” ”001” ”001” ”001” ”002” ”002” ”003” といったように書き込まれています。) そこから、3つ連続して並んでいる文字列を探し出して、 その文字列と、3つ連続していた文字列がいくつあったのか表示するプログラムを作りたいのですが、 どうにも処理速度が遅く、さらに行数が1万を超えると、応答なしになってしまいます。 どなたか、上手い処理の方法があれば、ぜひともご教授の程をお願いします。 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click OpenFileDialog1.FileName = "" OpenFileDialog1.InitialDirectory = "c:\" If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then TextBox1.Text = My.Computer.FileSystem.ReadAllText _ (OpenFileDialog1.FileName, System.Text.Encoding.Default) End If End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim x As Integer Dim xyz As Integer '行数を調べる。 Dim i As Integer = TextBox1.Lines.Length TextBox2.Text = (i - 1 & "行") MessageBox.Show("一時停止") For ix = 0 To i - 2 '1行目と2行目を比較 If TextBox1.Lines(x) = TextBox1.Lines(x + 1) Then '2行目と3行目を比較 If TextBox1.Lines(x + 1) = TextBox1.Lines(x + 2) Then '3つある番号を記入。 TextBox2.Text = TextBox2.Text + vbCrLf + TextBox1.Lines(x + 2) '3回重複したことをカウント。 'MessageBox.Show("3発見") xyz = xyz + 1 Else End If Else End If '調べる行を+1 x = x + 1 Next TextBox2.Text = TextBox2.Text + vbCrLf + ("3つ以上は、" & xyz & "個") End Sub Private Sub OpenFileDialog1_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles OpenFileDialog1.FileOk End Sub Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged End Sub End Class

専門家に質問してみよう