• 締切済み

VB OpenFileDialogと読み込み

OpenFileDialogを使用したテキストファイルの読み込みについて質問します。 TextFile.txt, TextFile2.txt, TextFile3.txt(内容は名前,電話番号)というファイルがあるとし、OpenFileDialogで選択してラベルまたはテキストボックスに表示させたいのですが、TextFile.txti以外のファイルを選んでもTextFile.txtの内容が表示されます。 VBの本に載っている二つのコードをそのまま使用してみました。 Imports Microsoft.VisualBasic.FileIO Public Class Form1 ' decrare modul level variable 'モジュールレベルの宣言 Private NamePhoneTextFieldParser As TextFieldParser Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Instatiate the ThextFieldPerser and set the deliminate 'Deliminateの設定とか Dim Filestring As String = "TextFile.txt" Try NamePhoneTextFieldParser = New TextFieldParser(Filestring) NamePhoneTextFieldParser.TextFieldType = FieldType.Delimited NamePhoneTextFieldParser.SetDelimiters(",") Catch ex As Exception MessageBox.Show("Unable to read the file:" & Filestring, "File Error") End Try End Sub Private Sub OFDBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OFDBtn.Click Dim ReponseDialogResult As DialogResult Dim stream As System.IO.Stream ' Set up and display the OpenFileDialog 'OpenFIleDialogのセットアップ With OpenFileDialog1 .FileName = "TextFile.txt" .Title = "Directory for File" .Filter = "Text File (*.txt)|*.txt|All Files (*.*)|*.*" 'DIsplay Dialog Box ReponseDialogResult = .ShowDialog If ReponseDialogResult = DialogResult.OK Then stream = OpenFileDialog1.OpenFile() Else Exit Sub End If '電話番号と名前をファイルから読み取る On Error Resume Next Dim FieldString() As String ' Must be a strng array for deliminated fields If Not NamePhoneTextFieldParser.EndOfData Then FieldString = NamePhoneTextFieldParser.ReadFields() ' 最初の Field Nametxt.Text = FieldString(0) '二番目の Field Phonetxt.Text = FieldString(1) Else MessageBox.Show("No more records to display.", "End of Data") End If End With End Sub End Class です。 Dim Filestring As String = "TextFile.txt" NamePhoneTextFieldParser = New TextFieldParser(Filestring) または .FileName = "TextFile.txt" のどれかが影響しているのかなと疑っているのですが(特に前者)、合ってますでしょうか? 上記のコードでTextFile.txtを指定してしまっているのを、TextFile2.txt, TextFile3.txtと自分で選択したものを読み込ませて表示させたい場合、どう記述を変更したらよいでしょうか? ちなみにいずれのテキストファイルもカンマで区切られた一組の名前と電話番号です。

みんなの回答

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

質問の内容は、典型的な単品処理なのだから、Googleででも「VB2010 Openfiledialog」で 照会し、出てきた記事の2,3を見て組み合わせれば仕舞い。 質問者は、そこまでも学習が行ってないのだろう。苦労するしかない。 まずWindowsApplicationで出てきたフォームにツールボックスから コマンドボタンを1つ貼り付ける。 またコントロールのOpenFileDialogをツールボックスから貼り付ける コマンドボタンのクリックイベントに Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim ReponseDialogResult Dim openFileDialog1 As New OpenFileDialog() With openFileDialog1 .FileName = "TextFile.txt" .Title = "Directory for File" .Filter = "Text File (*.txt)|*.txt|All Files (*.*)|*.*" 'DIsplay Dialog Box End With If openFileDialog1.ShowDialog() = DialogResult.OK Then ''選択したファイルのパスを取得 MessageBox.Show(openFileDialog1.FileName & " を選択しました。") End If Dim sr As New System.IO.StreamReader(openFileDialog1.FileName) MessageBox.Show(sr.ReadToEnd) sr.Close() End Sub End Class をつくり、デバッグの開始。 フォームが現れるから、そこのボタンをクリックすると ファイルを開くダイアロウグが出る。 ここでテキストファイルを指定すると そのファイルの確認のフルパスが出て、OKでテキストが 出る(全部ではない場合が有り。 tryーcatchーfinallyはその後付け加える。

  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.1

stream と NamePhoneTextFieldParser に何の関連も無いですからね。 隣りの家で秋刀魚を焼いてて、自分の家では卵かけご飯を作って、 「秋刀魚が食べたいです」って言っているような文章をプログラミング 言語で書いてますね。 使われている英単語は中学レベルなのですから、普通に日本語に 読み替えていけば、文章としておかしいくらいは初心者にも分かり ますよ? 「フォームロード時に"TextFile.txt"でテキスト解析オブジェクト(TextFieldParser)を開く」 「ファイル"TextFile2.txt"を選択する」 「stream でファイル"TextFile2.txt"を開く」 「フォームロード時に開いたテキスト解析オブジェクトでデータ"TextFile.txt"を読み込む」 NamePhoneTextFieldParser の設定は、フォームロードした時ではなく、 OpenFileDialog1 でファイルが選択された後に行って下さい。 「ファイル"TextFile2.txt"を選択する」 「選択したファイルのパス"TextFile2.txt"でテキスト解析オブジェクト(TextFieldParser)を開く」 「テキスト解析オブジェクトでデータ"TextFile2.txt"を読み込む」 でしょう? OpenFileDialog1.FileName で選択したファイルパスが取れます。  NamePhoneTextFieldParser = New TextFieldParser(OpenFileDialog1.FileName) です。

関連するQ&A