- ベストアンサー
VB2005 ランダムにテキスト出力
- VB2005 EXPRESS Editionを使用し、テキストボックスに入力した単語を含むランダムな文を出力するプログラムを作成したいです。
- また、複数の単語をテキストボックスに入力した場合は、それらの単語をランダムに組み合わせて文を作成する機能も追加したいです。
- どのようにしてテキストボックスに入力した単語や文を格納し、ランダムに選ぶことができるのか教えていただけると助かります。
- みんなの回答 (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
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
(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)で決める。
補足
ご回答ありがとうございます!! ご提示いただいた内容を応用することで、当方が行いたいことができると思います。 よろしければ、ご提示いただいた内容の例的なコードをご記入願えませんでしょうか? 申し訳ございません。 宜しくお願いいたします。
- naganaga_001
- ベストアンサー率71% (172/242)
お世話になります。 > 「りんご」以下の文を格納する方法はどのようにしたらよいのでしょうか? 大きなデータでなく、かつ固定であれば 下記ソースのように 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
補足
コードまで提示していただき、ありがとうございます!! リンク先も大変勉強になりました。 コード中に(","c)とありますが、「c」はどういった働きをしているのでしょうか? 当方が質問させていただいた内容やご提示いただいたコードでは、カンマはひとつの場合でしたが、カンマがふたつになった場合はElseIfを追加し、("," & ","c)と記入すればよろしいのでしょうか? さらに質問するかたちになり申し訳ございません。 宜しくお願いいたします。
お礼
お礼のほう遅れて大変申し訳ございません!! ご提示いただいたソースを応用し、やりたいことができました!! 感激です♪ ありがとうございました!!