アプリ版:「スタンプのみでお礼する」機能のリリースについて

http://hanatyan.sakura.ne.jp/dotnet/fileio03.htm
を見ながらcsvを構造体の配列に組みました。
その後、それに検索機能を付けたいと思い本やネットを駆使しながら試していますが、どうしてもうまくいきません。

-----ソースコード----
Private Structure SeisekiDat
Dim name As String //生徒名
   (上に記載したサイトと同じ内容なので略)

   ・
   ・
Loop
   FileClose(fileNo)
//※「Debug.WriteLine(sd(n).name & vbTab & sd(n).kokugo & vbTab & _
sd(n).suugaku & vbTab & sd(n).eigo)」は削除しています。


//ここから本やネットを見ながら
Dim p As Integer = InStrRev(TextBox1.Text, fileName)
   ListBox1.Items.Clear() 'リストボックスの中身を消去
If p = 0 Then
ListBox1.Items.Add(fileName.Substring(n).Split(vbNewLine)(p))

Else
MessageBox.Show("そのようなデータはありません。")
End If

こうするとなぜかcsvファイル名を削ったものがリストボックス出てきます…
そういうの求めていません(´;ω;`)
初心者なので、どこをどのように修正すればいいのか分かりません。
助けてください

質問者からの補足コメント

  • お二方にBAを送りたいのは山々なんですが、一人しか送れないので今回は始めに回答していただいためぐみん_さんに差し上げたいと思います

      補足日時:2017/12/03 22:58

A 回答 (3件)

>csvを構造体の配列に組みました。


>その後、それに検索機能を付けたいと思い

何を検索したいのかがわかりません。(その手段についても)

特に意味不明なのは

>Dim p As Integer = InStrRev(TextBox1.Text, fileName)

TextBox1にある文字列の中に変数:fileName が含まれているかどうかと言う点と、

>If p = 0 Then
>ListBox1.Items.Add(fileName.Substring(n).Split(vbNewLine)(p))

もし含まれていなければListBox1に fileName~を追加すると言う点。
含まれていない場合に追加するのに Else 以降のメッセージボックスの存在・文面もおかしい。

そもそも fileName とは何なのでしょ?
読み込んだCSVファイルの名前を格納している変数ではない?
そしてこれと『構造体:SeisekiDat』の関係が、まっっったくわかりません。
TextBox1さえどう言う意味で存在しているのか(検索値を入れるという予測は立つけど、InStrRev関数やfileNameとの繋がりが見えないです。

構造体とは関係なくファイル名をListBoxに追加したいのですか?
コードを端折られても質問者さんは理解できるでしょうけど、回答者は『突然出てきた変数名にさえ理解が及ばない』のですけどね。
    • good
    • 0

No.1です。



構造体のメンバのどれかとTextBox1の値を比較したいのなら、

For ~ Next でループさせ、一致したらループを抜ける
If sd(n).??? = TextBox1.Text Then Exit For

んで変数:n にその時のインデックスがあるから
ListBox1.Items.Add(sd(n).***)
と、登録したいメンバをリストボックスに放り込むって感じじゃないの?
    • good
    • 0
この回答へのお礼

自分の拙い文からソースコードを示していただきありがとうございます
勉強になります

お礼日時:2017/12/03 22:53

プログラムに「なぜか」ということは、ほとんどありません。


多くの場合は、思い込みや理解不足による、プログラムの間違いです。


ListBox1.Items.Add(fileName.Substring(n).Split(vbNewLine)(p))
は、 ListBox1の一覧に fileName.Substring(n).Split(vbNewLine)(p) を加える、というものです。

fileName.Substring(n).Split(vbNewLine)(p)
は、
fileName を Substring(n) したものを split(vbNewLine) した配列の p番目
という意味になります。

fileName がCSVファイル名を格納したStringだとすれば、Substring(n)は
https://msdn.microsoft.com/ja-jp/library/hxthx5h …
の説明通り、
 「CSVファイル名」の n番目(最初の文字は0番目)以降
別な言い方をすれば
 「CSVファイル名」の先頭n文字を削った残り
ということになります。

Splitは、指定した文字や文字列で区切った状態の配列を返します。
https://msdn.microsoft.com/ja-jp/library/tabh47c …
元のfileNameにvbNewLine(改行)は含まれていないので、 元の文字列がそのまま、配列の0番目の要素となります。

(p)でその配列の p番目を取り出しますが、ここに来るのは if p=0 のときなので、 p=0です。
つまり 0番目であり、配列の0番目には、上記のsplitにより 「CSVファイル名の先頭n文字を削った残り」がそのまま入っています。


以上のように「なぜか」ではなく、「そうなるべくして」削られたCSVファイル名 がListBox1に追加されることになります。



まず、あなたが何をしたいのか、日本語で書いてください。
次に、その「やりたいこと」をするには、何をどうするのか、ちょっとだけ具体的に日本語で書いてください。
その次に、その「ちょっと具体的にしたやりたいこと」をするには、何をどうするのか、もうちょっとだけ具体的に日本語で書いてください。
その次に ...

と、繰り返して、もうこれ以上はやりようがない、というところまで来たら、今まで書いたことをプログラムにします。
ほとんどは、「VBに直訳」できるようになっているはずです。



○検索機能を付ける

というのが目標ですが、これではプログラムは作れません。
この質問から読み取れるのは、このレベルです。
これでは、誰にも「正解」などわかりません。

少し具体的にします。

○「検索対象」から「検索条件」を検索
(「検索対象の中のなにか」と「テキストボックスに入力された文字列をもとにしたなにか」を比較して、
「一致とか部分一致とか」するものを探す)
○検索したものを「なんかの処理」をし,ListBox1に追加

まだ具体的になっていないことが沢山残っていますが、
ここまでやって、多少は意味のある回答もできるようになります。
    • good
    • 0
この回答へのお礼

すいません…ご指摘ありがとうございます
眠たい目を擦り半分意識が無い中書いたので読み返したら日本語じゃなくて恥ずかしい限りです
そして、自分のソースコードを解説していただきありがとうございます

お礼日時:2017/12/03 22:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています