C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[9]: VBについて


(過去ログ 18 を表示中)

[トピック内 18 記事 (1 - 18 表示)]  << 0 >>

■7026 / inTopicNo.1)  VBについて
  
□投稿者/ まる (1回)-(2007/08/29(Wed) 09:45:40)

分類:[VB.NET/VB2005] 

英字の文字列があって(200文字くらい)、それを指定された文字数ずつ区切って見る。1文字ずらして区切る。文字列の中に2回以上でてくる組を表示するプログラムについてなんですが、初心者で全くわかりません。お願いします。
引用返信 編集キー/
■7034 / inTopicNo.2)  Re[1]: VBについて
□投稿者/ はつね (251回)-(2007/08/29(Wed) 11:22:07)
はつね さんの Web サイト
2007/08/29(Wed) 11:22:51 編集(投稿者)
No7026 (まる さん) に返信
> 英字の文字列があって(200文字くらい)、それを指定された文字数ずつ区切って見る。1文字ずらして区切る。
> 文字列の中に2回以上でてくる組を表示するプログラムについてなんですが、初心者で全くわかりません。お願いします。

上記の事をコンピュータにやらせるためのロジックが分からないのでしょうか。
それとも、VBでの具体的な記述方法が分からないのでしょうか。

問題を解決するためには、問題を解決する手順(ロジック)を決めて、そしてそれに基づいて特定のコンピュータ言語でプログラミングをします。もちろん、手順を
決めるときに使う言語の特性や機能をしっていると有利な事は有利ですが、知らないからといって手順が決められない訳ではありません。

例えば、手順とは次のような感じで考えていきます。
(1) 文字列の入った変数を用意する
(2) (1)で用意した文字列に対して指定された文字数ずつ区切る   ←区切ったものをどうすればよいかを考えて見ましょう。
(3) 1文字ずらして区切る                    ←何に対して?
(4) 文字列の中に2回以上でてくる組を取り出す                   ←何に対して?
(5) (4)で取り出した文字列を表示する              ←どこに?

引用返信 編集キー/
■7055 / inTopicNo.3)  Re[2]: VBについて
□投稿者/ まる (2回)-(2007/08/29(Wed) 14:21:13)
No7034 (はつね さん) に返信
> 2007/08/29(Wed) 11:22:51 編集(投稿者)
>
>回答ありがとうございます。VBでの具体的な記述方法が分かりません。お願いします。
>
> ■No7026 (まる さん) に返信
>>英字の文字列があって(200文字くらい)、それを指定された文字数ずつ区切って見る。1文字ずらして区切る。
>>文字列の中に2回以上でてくる組を表示するプログラムについてなんですが、初心者で全くわかりません。お願いします。
>
> 上記の事をコンピュータにやらせるためのロジックが分からないのでしょうか。
> それとも、VBでの具体的な記述方法が分からないのでしょうか。
>
> 問題を解決するためには、問題を解決する手順(ロジック)を決めて、そしてそれに基づいて特定のコンピュータ言語でプログラミングをします。もちろん、手順を
> 決めるときに使う言語の特性や機能をしっていると有利な事は有利ですが、知らないからといって手順が決められない訳ではありません。
>
> 例えば、手順とは次のような感じで考えていきます。
> (1) 文字列の入った変数を用意する
> (2) (1)で用意した文字列に対して指定された文字数ずつ区切る   ←区切ったものをどうすればよいかを考えて見ましょう。
> (3) 1文字ずらして区切る                    ←何に対して?
> (4) 文字列の中に2回以上でてくる組を取り出す ←何に対して?
> (5) (4)で取り出した文字列を表示する              ←どこに?
>
引用返信 編集キー/
■7061 / inTopicNo.4)  Re[3]: VBについて
□投稿者/ PATIO (2回)-(2007/08/29(Wed) 16:26:04)
ども、PATIOです。

No7055 (まる さん) に返信
>回答ありがとうございます。VBでの具体的な記述方法が分かりません。お願いします。

そういう話ならどういうロジックで処理するのかを提示して
それをどう記述したら良いかと言う聞き方をすべきかと思います。
同じ結果を出すにしてもやり方は色々ありますから。

あと、VBの文法が分からないと言う話なら文法の勉強は書籍等でしないと
多分、説明しても理解できないのではと言う気がします。
その辺は大丈夫でしょうか?

引用返信 編集キー/
■7064 / inTopicNo.5)  Re[4]: VBについて
□投稿者/ まる (3回)-(2007/08/29(Wed) 16:44:36)
No7061 (PATIO さん) に返信
>
>返信ありがとうございます。
>
>今すぐではないのですが、今週金曜までに必要なので参考にしたいと思い、質問させていただきました。
>教わったものを使い、自分でそれに工夫を加えながら理解していきたいと思っています。
>今大学生で習い始めたばかりなので得意な方に教えていてもらえたらと思ってます。
引用返信 編集キー/
■7065 / inTopicNo.6)  Re[5]: VBについて
□投稿者/ PATIO (4回)-(2007/08/29(Wed) 16:51:08)
No7064 (まる さん) に返信
>返信ありがとうございます。
>
>今すぐではないのですが、今週金曜までに必要なので参考にしたいと思い、質問させていただきました。
>教わったものを使い、自分でそれに工夫を加えながら理解していきたいと思っています。
>今大学生で習い始めたばかりなので得意な方に教えていてもらえたらと思ってます。

えと、自分の書込みに引用符(>)をつけないでください。
引用部分のように見えて読みにくいです。
習い始めたばかりであれば尚の事、少なくともたたき台程度は自分で出さないと勉強にならないと
思いますけれど。課題として出されたのであれば、課題を解くためのレクチャは受けたのでは?
とりあえず、サンプルを見て考え方を学ぶと言う方法も否定はしませんが、
とりあえず、分からないなりに考えてみると言う姿勢も必要かと思いますよ。

引用返信 編集キー/
■7066 / inTopicNo.7)  Re[6]: VBについて
□投稿者/ まる (4回)-(2007/08/29(Wed) 17:00:35)
No7065 (PATIO さん) に返信

ご指摘ありがとうございます。
これは個人的にどういうふうに作るのかを知りたくて質問しました。
課題ではないので、今の夏休みの間に具体的なプログラムをみて勉強したいと思ってます。

引用返信 編集キー/
■7067 / inTopicNo.8)  Re[7]: VBについて
□投稿者/ はつね (252回)-(2007/08/29(Wed) 17:15:46)
はつね さんの Web サイト
No7066 (まる さん) に返信
> これは個人的にどういうふうに作るのかを知りたくて質問しました。
> 課題ではないので、今の夏休みの間に具体的なプログラムをみて勉強したいと思ってます。

課題ではないという事は、手順はまるさんの頭の中にあるということですね。
まるさんの最初の投稿から手順の例を記載しましたが、その時点であやふやなところが何点かあります。その部分はどうなっていますか?
あやふやな手順では具体的なコードは誰も提示できないですし、あやふやなままで探し回っても目的のコードをみつけるのは困難だと思います。

引用返信 編集キー/
■7070 / inTopicNo.9)  Re[8]: VBについて
□投稿者/ まる (5回)-(2007/08/29(Wed) 17:27:59)
No7067 (はつね さん) に返信
>
200文字程度の文字列をtextbox1を使い自分で入力し、3文字などtextbox2に自分で決めた文字数を入力。文字数ごとに列を区切る(組を作る)プログラム
「mdhvdkvmsxsgfsvvbhkmfhyybafxrdgnpmuhvydiszaqgnytdsfh・・・」
@---
A---
B---
@,A,Bなどのように区切って1度区切った組が2度以上出た組み合わせを表示する。
>(1) 文字列の入った変数を用意する
textbox1に手入力

>(2) (1)で用意した文字列に対して指定された文字数ずつ区切る   ←区切ったものをどうすればよいかを考えて見ましょう。
配列に格納

>(3) 1文字ずつずらして区切る                  ←何に対して?
文字列に対して@、A、Bのように区切る
 
>(4) 文字列の中に2回以上でてくる組を取り出す ←何に対して?
文字列に対して2回以上出てきた組み合わせを表示

>(5) (4)で取り出した文字列を表示する              ←どこに?
表示の際に使うものは何がいいのか?(ツールボックスの中の何を使って表示すればいいのか?参考に)

です。


引用返信 編集キー/
■7080 / inTopicNo.10)  Re[9]: VBについて
□投稿者/ はつね (254回)-(2007/08/29(Wed) 23:50:05)
はつね さんの Web サイト
No7070 (まる さん) に返信
> 「mdhvdkvmsxsgfsvvbhkmfhyybafxrdgnpmuhvydiszaqgnytdsfh・・・」
> @---
>  A---
>   B---
> @,A,Bなどのように区切って1度区切った組が2度以上出た組み合わせを表示する。

つまり、「先頭から1文字づつ位置をずらしながら指定された文字数ずつ区切る」ですね。
以下、まったく検証していないコード

        Dim inputString As String = Me.TextBox1.Text
        Dim splitLength As Integer = CType(Me.TextBox2.Text, Integer)
        Dim splitString(inputString.Length) As String

        For splitPosition As Integer = 0 To inputString.Length - splitLength
            splitString(splitPosition) = inputString.Substring(splitPosition, splitLength)
        Next


> >(4) 文字列の中に2回以上でてくる組を取り出す ←何に対して?
> 文字列に対して2回以上出てきた組み合わせを表示

手順は正確に!
例「(2)で作成した配列について、配列要素1つ1つに対して、他の要素と同じ文字列かをチェックして同じ文字列があったら・・どうする?」


> >(5) (4)で取り出した文字列を表示する              ←どこに?
> 表示の際に使うものは何がいいのか?(ツールボックスの中の何を使って表示すればいいのか?参考に)

どのように表示したいかにより何を使うかが決まります。
つまり、これも正解はまるさんの頭の中にあるということですね。

引用返信 編集キー/
■7082 / inTopicNo.11)  Re[10]: VBについて
□投稿者/ のん (2回)-(2007/08/30(Thu) 01:31:47)
>夏休みの間に具体的なプログラムをみて勉強したいと思ってます。

なら話は早いとおもいます。
どうしたいのか一区切りづつ一個一個詳しく書いてみてください。
私もよく掲示板に投稿して一個一個どうしたいのか分解するよう突っ込まれましたw

ループ・if文や・変数などは理解しておりますでしょうか〜??
焦らずゆっくり頭の中で考えてみてください。

>表示の際に使うものは何がいいのか?(ツールボックスの中の何を使って表示すればいいのか?参考に)
textboxやrichtextboxやlabelのことですか??

はつねさんがおっしゃるとおり、どうしたいのかにもよります。

引用返信 編集キー/
■7083 / inTopicNo.12)  Re[9]: VBについて
□投稿者/ のん (3回)-(2007/08/30(Thu) 01:44:48)
> 200文字程度の文字列をtextbox1を使い自分で入力し、3文字などtextbox2に自分で決めた文字数を入力。文字数ごとに列を区切る(組を作る)プログラム

> 「mdhvdkvmsxsgfsvvbhkmfhyybafxrdgnpmuhvydiszaqgnytdsfh・・・」
> @---
> A---
> B---
> @,A,Bなどのように区切って1度区切った組が2度以上出た組み合わせを表示する。
> >(1) 文字列の入った変数を用意する
> textbox1に手入力
>
> >(2) (1)で用意した文字列に対して指定された文字数ずつ区切る   ←区切ったものをどうすればよいかを考えて見ましょう。
> 配列に格納
>
> >(3) 1文字ずつずらして区切る                  ←何に対して?
> 文字列に対して@、A、Bのように区切る
>  
> >(4) 文字列の中に2回以上でてくる組を取り出す ←何に対して?
> 文字列に対して2回以上出てきた組み合わせを表示
>
> >(5) (4)で取り出した文字列を表示する              ←どこに?
> 表示の際に使うものは何がいいのか?(ツールボックスの中の何を使って表示すればいいのか?参考に)
>
> です。
>
>

考えてることが違っていたらごめんなさいsubstringを使って区切ってformatするってことでしょうか??
#いや本当間違えてたらすみません
引用返信 編集キー/
■7098 / inTopicNo.13)  Re[11]: VBについて
□投稿者/ まる (6回)-(2007/08/30(Thu) 11:43:26)
No7082 (のん さん) に返信
> ループ・if文や・変数などは理解しておりますでしょうか〜??
はい。そこは大丈夫です。

引用返信 編集キー/
■7099 / inTopicNo.14)  Re[10]: VBについて
□投稿者/ まる (7回)-(2007/08/30(Thu) 11:44:08)
2007/08/30(Thu) 11:49:16 編集(投稿者)

No7080 (はつね さん) に返信

例えば
実行ボタン内容
textbox1にabcdefgabcを入力、入力したものを記憶(表示はしない)
記憶したものを先頭から1文字づつ位置をずらしながら3文字ずつ区切り記憶(表示はしない)
@abc
Abcd
Bcde
Cdef
Defg
Efga
Fgab
Gabc
となる。
3文字ずつ区切ったもの(文字組)を比較する
@と文字が同じ順番に並んでいる文字組があるときの個数を数える
@abcのaから順にA以降の文字組と照合し、aが先頭にあった場合、2番目にある文字bについて照合。3番目cも同様。
3番目まで終わったらAについて他と照合。と順に行う。
「同じ順番に並んでいる文字組が2個以上存在する」かつ「存在頻度降順」にtextboxに表示。
textboxは文字組と個数の2つのtextboxが横に並んでいる
     10個以上の欄 文字組
     9個の欄 文字組
     8個の欄  〃   
     7個の欄  〃
      :
      :
     2個の欄  〃
の9つ用意してある。
当てはまる欄の文字組と個数が表示される。
1つもなかった欄には0が表示される。

終了ボタン内容
プログラムを終了させる。

のプログラムの書き方を教えてもらえますか?それを元に自分で追加しはじめの質問を完成させたいと思っています。


引用返信 編集キー/
■7123 / inTopicNo.15)  Re[11]: VBについて
□投稿者/ mあ (46回)-(2007/08/30(Thu) 14:05:25)
No7099 (まる さん) に返信
> 2007/08/30(Thu) 11:49:16 編集(投稿者)

> のプログラムの書き方を教えてもらえますか?それを元に自分で追加しはじめの質問を完成させたいと思っています。

    Public Class Sample

        Private _List As New ArrayList()

        Private Structure Suji : Implements System.IComparable


            Public s As String
            Public c As Integer
            Public p As Integer

            Public Sub New(ByVal p As Integer, ByVal s As String, ByVal c As Integer)
               ''-- ☆ここに変数の初期化処理
            End Sub

            Public Overrides Function ToString() As String
               ''-- ☆変数の表示文字列を返してください
            End Function

            Public Function CompareTo(ByVal obj As Object) As Integer Implements System.IComparable.CompareTo
                Dim xSuji As Suji = DirectCast(obj, Suji)

                Return xSuji.c < Me.c

            End Function
        End Structure

        Public Sub New(ByVal text As String)

            SubstrText(text)
            CountSameKeywords(0)
            SortAndShowResult(False)

        End Sub

        Private Sub SubstrText(ByVal text As String)

            Dim p As Integer = 1

            Do While text.Length > 2
                Dim key As String = text.Substring(0, 3)
                _List.Add(New Suji(p, key, 0))
                text = text.Substring(1)
                p += 1
            Loop

        End Sub


        Private Sub CountSameKeywords(ByVal index As Integer)

            If index < _List.Count Then
                Dim self As Suji = DirectCast(_List.Item(index), Suji)
                CountSameKeywords(index + 1)
                ''-- ☆ここにカウントする処理
                _List.Item(index) = self
            End If

        End Sub

        Private Sub SortAndShowResult(ByVal bSort As Boolean)
            Dim os() As Object = _List.ToArray()

            If bSort Then Array.Sort(os)

            ''-- 確認
            ''-- ☆ここに表示する処理
        End Sub


    End Class


上記クラスで以下を実行すると、
Dim ss As New Sample("123456234123456246")

結果は、
位置(1)='123'=>頻度(1)
位置(2)='234'=>頻度(2)
位置(3)='345'=>頻度(1)
位置(4)='456'=>頻度(1)
位置(5)='562'=>頻度(1)
位置(6)='623'=>頻度(0)
位置(7)='234'=>頻度(1)
位置(8)='341'=>頻度(0)
位置(9)='412'=>頻度(0)
位置(10)='123'=>頻度(0)
位置(11)='234'=>頻度(0)
位置(12)='345'=>頻度(0)
位置(13)='456'=>頻度(0)
位置(14)='562'=>頻度(0)
位置(15)='624'=>頻度(0)
位置(16)='246'=>頻度(0)

こうなります。

ところどころ☆の部分が歯抜けになっていますが、宜しければどうぞ。

再帰を使っているので具合が悪ければ別の手段を使ってください。

# 学校の宿題ですか?

引用返信 編集キー/
■7181 / inTopicNo.16)  Re[12]: VBについて
□投稿者/ まる (8回)-(2007/08/31(Fri) 15:48:53)
No7123 (mあ さん) に返信
>
遅くなりました。
Public Class Form1
Inherits System.Windows.Forms.Form
Dim a(200), d(200) As String
Dim n, c(200) As Integer
Dim ss As String

#Region " Windows フォーム デザイナで生成されたコード "

Public Sub New()
MyBase.New()

' この呼び出しは Windows フォーム デザイナで必要です。
InitializeComponent()

' InitializeComponent() 呼び出しの後に初期化を追加します。

End Sub

' Form は、コンポーネント一覧に後処理を実行するために dispose をオーバーライドします。
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub

' Windows フォーム デザイナで必要です。
Private components As System.ComponentModel.IContainer

' メモ : 以下のプロシージャは、Windows フォーム デザイナで必要です。
'Windows フォーム デザイナを使って変更してください。
' コード エディタを使って変更しないでください。
Friend WithEvents Label1 As System.Windows.Forms.Label
Friend WithEvents retu As System.Windows.Forms.TextBox
Friend WithEvents startButton As System.Windows.Forms.Button
Friend WithEvents finishButton As System.Windows.Forms.Button
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.Label1 = New System.Windows.Forms.Label
Me.retu = New System.Windows.Forms.TextBox
Me.startButton = New System.Windows.Forms.Button
Me.finishButton = New System.Windows.Forms.Button
Me.SuspendLayout()
'
'Label1
'
Me.Label1.Location = New System.Drawing.Point(120, 24)
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing.Size(56, 16)
Me.Label1.TabIndex = 0
Me.Label1.Text = "文字列 :"
'
'retu
'
Me.retu.Location = New System.Drawing.Point(176, 24)
Me.retu.Name = "retu"
Me.retu.Size = New System.Drawing.Size(384, 19)
Me.retu.TabIndex = 1
Me.retu.Text = ""
'
'startButton
'
Me.startButton.Location = New System.Drawing.Point(264, 56)
Me.startButton.Name = "startButton"
Me.startButton.TabIndex = 2
Me.startButton.Text = "実行"
'
'finishButton
'
Me.finishButton.Location = New System.Drawing.Point(376, 56)
Me.finishButton.Name = "finishButton"
Me.finishButton.TabIndex = 3
Me.finishButton.Text = "終了"
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 12)
Me.ClientSize = New System.Drawing.Size(744, 381)
Me.Controls.Add(Me.finishButton)
Me.Controls.Add(Me.startButton)
Me.Controls.Add(Me.retu)
Me.Controls.Add(Me.Label1)
Me.Name = "Form1"
Me.Text = "Form1"
Me.ResumeLayout(False)

End Sub

#End Region

Private Sub startButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles startButton.Click

'textboxに入力した文字列をssにうつして、文字列の長さを返す
ss = retu.Text
n = ss.Length()

'@3文字で区切ったものを配列に格納(文字組)
Dim i As Integer
Do
For i = 0 To n - 3
If i = 0 Then
a(i) = Microsoft.VisualBasic.Left(ss, 3)
Else
a(i) = Mid(ss, i + 1, 3)
End If
Next
Loop While i <= n - 3

Dim j As Integer
Do
For j = 0 To n - 3
If j = 0 Then
d(j) = Microsoft.VisualBasic.Left(ss, 3)
Else
d(j) = Mid(ss, j + 1, 3)
End If
Next
Loop While j <= n - 3

'A同じ順序に並んだ文字組を探す
Dim b As Integer
Do
For i = 0 To n - 3
For j = 0 To n - 3
For b = 0 To n - 3
c(i) = StrComp(a(i), d(j))
If c(b) = 0 Then
c(b) = c(b) + 1
d(j) = "zero"
End If
Next
Next
Next
Loop While i <= n - 3

'B2個以上あるデータを出力
Do
For i = 0 To n - 3
If c(b) >= 1 Then
Print(a(i))
End If
Next
Loop While i <= n - 3

End Sub

'終了ボタンでプログラム終了
Private Sub finishButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles finishButton.Click
End
End Sub

End Class

自分で一応考えて作ってみたのですが動きません。指摘をお願いします。
引用返信 編集キー/
■7189 / inTopicNo.17)  Re[13]: VBについて
□投稿者/ NANAC (3回)-(2007/08/31(Fri) 17:00:39)
No7181 (まる さん) に返信
> 自分で一応考えて作ってみたのですが動きません。指摘をお願いします。

・動かなくてどんなエラーがでたか
・そのエラーが発生した場所どこか?
を書いたほうが良いですよ。

じゃないと、検証に時間がかかって
レスが付き難くなります。
引用返信 編集キー/
■7190 / inTopicNo.18)  Re[13]: VBについて
□投稿者/ はつね (260回)-(2007/08/31(Fri) 17:00:46)
はつね さんの Web サイト
No7181 (まる さん) に返信
> 自分で一応考えて作ってみたのですが動きません。指摘をお願いします。

どのように動かないのでしょうか。
コード貼り付けてあるので、それを使って掲示板を見た方が確認すればよいのでしょうが、その手間をかけられない方からの回答を得られないというのももったいないですよね。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -