1

区切られたファイルを読み取り、データグリッドビューの最初の数行を表示するアプリケーションに取り組んでいます。次に、これらの行の特定の要素を使用してSQLクエリ(郵便番号検索)を実行します。列の値の1つに£が含まれているデータを取得するまではすべて正常に機能していました。データグリッドに表示されると、?が付いたひし形のように見えます。その中にはありますが、ファイルを書き戻すと(SQL結果が追加されて)さらに悪いことに、次のようになります。

おそらくエンコーディングを指定する必要があると思いましたが、エンコーディング設定が見つからない次のものを使用していました。

    Sub ParseFile(inputfile)
    Dim dataFile = My.Computer.FileSystem.OpenTextFieldParser(inputFile)
    Using dataFile
        dataFile.TextFieldType = FileIO.FieldType.Delimited
        If DelimiterComboBox.SelectedItem = ".csv" Then
            dataFile.SetDelimiters(",")
        ElseIf DelimiterComboBox.SelectedItem = ".txt" Then
            dataFile.SetDelimiters(vbTab)
        End If
        Dim currentRow As String()
        currentRow = dataFile.ReadFields()

エンコーディングを指定できるTextFieldReaderを使用するように変更しようとしましたが、変換エラーが発生したため、ファイル名を変数として渡すことができません。次に、変数をファイル名のストリームとして定義しようとしましたが、次のようになります。「System.String」タイプのオブジェクトを「System.IO.Stream」タイプにキャストできません。

どういうわけかファイル名からストリームを作成し、それを「dataFile」オブジェクトにフィードして、エンコーディングを制御(または検出)できるようにする必要があると考えています。

このアプリは、さまざまな区切りファイル(.csv、タブ、パイプが最も一般的)で動作する必要があることを指摘しておく必要があります。

4

1 に答える 1

0

試す

Using dataFile As TextFieldParser = My.Computer.FileSystem.OpenTextFieldParser(New System.IO.StreamReader(inputFile, encoding))
...
End Using

パラメータに指定できる内容の詳細については、 http://msdn.microsoft.com/en-us/library/system.text.encodingencoding (v = vs.90).aspxを参照してください。

于 2013-01-22T18:06:59.633 に答える