• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VB2005 ランダムにテキスト出力)

VB2005 ランダムにテキスト出力

このQ&Aのポイント
  • VB2005 EXPRESS Editionを使用し、テキストボックスに入力した単語を含むランダムな文を出力するプログラムを作成したいです。
  • また、複数の単語をテキストボックスに入力した場合は、それらの単語をランダムに組み合わせて文を作成する機能も追加したいです。
  • どのようにしてテキストボックスに入力した単語や文を格納し、ランダムに選ぶことができるのか教えていただけると助かります。

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

  • ベストアンサー
  • Do_little
  • ベストアンサー率100% (3/3)
回答No.3

参考になれば幸いです。 ・動詞.txtの内容(ファイルの置き場所はソースコードに記述) 食べたい 好きだ 腐っている ・接続詞.txtの内容(ファイルの置き場所はソースコードに記述) と か に を は も ・Form1.vbに配置したコントロール textbox1 textbox2 Button1 ・Form1.vbファイルに記述した内容 Imports System.IO Imports System.Text Public Class Form1   '動詞が書いてあるファイル名   Private Const PC_Dousi_FileName As String = "C:\動詞.txt"   '接続詞が書いてあるファイル名   Private Const PC_Setuzokusi_FileName As String = "C:\接続詞.txt"   '動詞を格納するコレクション   Private PM_Dousi_Collection As List(Of String) = New List(Of String)   '接続詞を格納するコレクション   Private PM_Setuzokusi_Collection As List(Of String) = New List(Of String)   '**************************************************   ' フォームロード   '**************************************************   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load     '動詞をコレクションに格納     If Not PF_CollectSet(PC_Dousi_FileName, PM_Dousi_Collection) Then       Button1.Enabled = False       Return     End If     '接続詞をコレクションに格納     If Not PF_CollectSet(PC_Setuzokusi_FileName, PM_Setuzokusi_Collection) Then       Button1.Enabled = False       Return     End If   End Sub   '**************************************************   ' コレクションを設定する   '**************************************************   Private Function PF_CollectSet(ByVal A_Filename As String, ByVal A_Collection As List(Of String)) As Boolean     Dim LineStr As String = ""     'ファイルが無い場合、終了     If Not File.Exists(A_Filename) Then       Return False     End If     '動詞をコレクションに格納     Using sr As StreamReader = New StreamReader(A_Filename, Encoding.GetEncoding("Shift-JIS"))       Do         LineStr = sr.ReadLine()         If LineStr Is Nothing Then           Exit Do         End If         A_Collection.Add(LineStr)       Loop Until LineStr Is Nothing       sr.Close()     End Using     Return True   End Function   '**************************************************   ' ボタン押下時   '**************************************************   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click     Dim Fruits As String()     Dim Fruit As String     Dim OutPut As String = ""     Dim rnd As Random = New Random()     If TextBox1.Text.Trim = "" Then       Return     End If     Fruits = TextBox1.Text.Split(",")     For Each Fruit In Fruits       If Fruit.Trim <> "" Then         OutPut += Fruit         OutPut += PM_Setuzokusi_Collection(rnd.Next(0, PM_Setuzokusi_Collection.Count))       End If     Next     OutPut += PM_Dousi_Collection(rnd.Next(0, PM_Dousi_Collection.Count))     TextBox2.Text = OutPut.ToString   End Sub End Class

metal3100c
質問者

お礼

お礼のほう遅れて大変申し訳ございません!! ご提示いただいたソースを応用し、やりたいことができました!! 感激です♪ ありがとうございました!!

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

(1)みかんグループで1つ、りんごグループで1つテキストファイルをメモ帳で作る。 プログラムの中にこの値を持たせるには200個は多すぎるでしょうから、ファイル化する。 内容はみかん(りんご)に続く文言のデータを約100行分打ち込む。1文章1行。カンマ区切りの100個を連ねるより判りやすいか と思って。 ーー プログラム開始時に、(1)のファイルを読み込み、全レコードを配列M(i)に格納する。 りんごのファイルも読み込みR(i)に格納する。(初期化) 100レコードx2らしいので、配列に格納するのも良い(差し障り無い)かなと思って。 ーー Button1をクリックされた都度、1からレコード数(配列要素数。Ubound()は2005ではないかもしれないが、そんなイメージ)までの乱数を1つ取得(x)。 ーー TextBox1.Text&M(x)を出力する。 ーー 助詞・接続詞は数が少なければ、プログラムの中に、配列の初期化で 値を持つ。そしてこれも乱数(x)をだし、j(x)、S(x)で決める。

metal3100c
質問者

補足

ご回答ありがとうございます!! ご提示いただいた内容を応用することで、当方が行いたいことができると思います。 よろしければ、ご提示いただいた内容の例的なコードをご記入願えませんでしょうか? 申し訳ございません。 宜しくお願いいたします。

回答No.1

お世話になります。 > 「りんご」以下の文を格納する方法はどのようにしたらよいのでしょうか? 大きなデータでなく、かつ固定であれば 下記ソースのように List(Of T) (ジェネリックなどのコレクション)でよいと思います。 http://www.atmarkit.co.jp/fdotnet/special/generics01/generics01_01.html ランダムの部分は、System.Random クラスを使います。 http://msdn2.microsoft.com/ja-jp/library/system.random(VS.80).aspx Public Class Form8   Private m_collection As List(Of String) = New List(Of String)   Private Sub Form8_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load     With Me.m_collection       .Add("が食べたい")       .Add("が好きだ")       .Add("は腐っている")     End With   End Sub   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click     Dim fruit As String = Me.TextBox1.Text     If fruit.Trim = String.Empty Then Return     If fruit.Contains(","c) Then       Dim tmpArr As String() = fruit.Split(","c)       fruit = String.Empty       For index As Integer = 0 To tmpArr.Length - 1         If Not index = 0 Then fruit += "か"         fruit += tmpArr(index)       Next     End If     Dim rnd As Random = New Random()     Dim ret As Integer = rnd.Next(0, Me.m_collection.Count)     Me.TextBox2.Text = fruit + Me.m_collection(ret)   End Sub End Class

metal3100c
質問者

補足

コードまで提示していただき、ありがとうございます!! リンク先も大変勉強になりました。 コード中に(","c)とありますが、「c」はどういった働きをしているのでしょうか? 当方が質問させていただいた内容やご提示いただいたコードでは、カンマはひとつの場合でしたが、カンマがふたつになった場合はElseIfを追加し、("," & ","c)と記入すればよろしいのでしょうか? さらに質問するかたちになり申し訳ございません。 宜しくお願いいたします。

関連するQ&A