csvファイルの"1,2,3"を、数値として捉えたい

解決


翔太  2007-09-12 01:02:34  No: 137405

VB2005を用いてプログラミングをおこなっています。
通常、csvファイルは文字列として扱われるので、Stringとして用いています。
しかし、そこを数値と見なし、記述することは出来るのでしょうか?

たとえば、"1,2,3,・・・"というようにダブルクォーテーションで囲まれた文字列があったとします。これを、1と2と3と・・・という数だけは数値型に変換し、残りのカンマはそのままで  1,2,3  というように記述し直したいのです。

可能でしょうか?


特攻隊長まるるう  2007-09-12 01:25:26  No: 137406

>1と2と3と・・・という数だけは数値型に変換し
文字列操作用に用意された関数が String クラスの下に用意されて
いますよね?
[String メンバ]
http://msdn2.microsoft.com/ja-jp/library/system.string_members(VS.80).aspx
Replace や Trim でダブルクォーテーションを取り除き、カンマで
Split した文字列を、順に数値型の変数に入れればいいのでは?

>1,2,3  というように記述し直したいのです。
何に記述するのか分かりませんが、
記述する時点で文字列のはずですので、意味が無いはずです。


翔太  2007-09-12 02:08:40  No: 137407

すみません。どのように記述するのかを述べていませんでしたね。

実は、配列の初期化にcsvデータを用いたいのです。
通常、配列の初期化は以下の通りであると思います。

[配列]
Dim Hairetu() As Integer = {12, 13, 24, 35, 56, 87,・・・}

この{}の部分にcsvファイルから引っ張ってきた数値列を利用したいと考えています。
可能でしょうか?

要素数が数個であれば現実的ですが、実は要素数が100個以上あるのです。


特攻隊長まるるう  2007-09-12 03:28:28  No: 137408

>要素数が数個であれば現実的ですが、実は要素数が100個以上あるのです。
人間がやるならそうかもしれませんが、プログラムでやるならループ処理する
でしょうから違いは無いと思いますが?
既に提示した方法を試してください。


翔太  2007-09-12 06:19:25  No: 137409

試してみました。しかし、

TextBox3.Text = "12, 13, 24, 35, 56, 87, ・・・"
Dim LoadData() As Integer = {CInt(TextBox3.Text.Trim(Chr(34)))}

という様にしても、String型からInteger型への変換が行われませんでした。
これは、「ダブルクォーテーションは取り除かれるが、
カンマが数値として変換されずにエラーが発生する」のが原因でしょうか?
だとしたら、先ほどおっしゃっていたように、
カンマ区切りで一つずつの数文字を数値として変換させ、最後に
{数値,数値,数値,数値,・・・}
というように代入して記述しなければならないということでしょうか?

>記述する時点で文字列のはず
ということでしたら、上のコードでも同じことだと思うので、
変換されるはずなんですが・・・


特攻隊長まるるう  2007-09-12 06:58:23  No: 137410

あ、ソースコードの文法の部分を書き換えようしているわけですか。。。それは高度な。。。

実際問題、ソースコードはテキストファイルです。保存されているvbファイルを
メモ帳で開いても読めます。ところが、プログラムコードは実行ファイル(EXE)にする
時にコンパイル(ビルド)によって機械語に変換されるわけですよ。

その時点でソースコードの文法の部分を変更しても意味がありません。それを反映させる
ためにコンパイルからはじめようという話になると思います。

同じテキストで分かり難いかと思いますが、VBが解釈する文法の部分ではなく、
変数の中身を変更するように考えてください。

・変数1つなら
Dim LoadData As Integer
LoadData = CInt(TextBox3.Text)
ですね?

・配列なら
Dim LoadDataText(3) As String
Dim LoadData(3) As Integer
For i As Integer = 0 To 3
   LoadData(i) = CInt(LoadDataText(i))
Next
です。

で、例えば
        Dim strText As String = "12, 13, 24, 35, 56, 87"
        Dim LoadDataText() As String
        Dim LoadData() As Integer
        LoadDataText = strText.Split(","c)
        ReDim LoadData(LoadDataText.GetLength(0) - 1)
        For i As Integer = 0 To LoadDataText.GetLength(0) - 1
            LoadData(i) = CInt(LoadDataText(i))
        Next
こんな感じ。


翔太  2007-09-12 07:29:04  No: 137411

これは・・・また難しいお話ですね(苦笑)
でも、提示してくださった例を参考にしてみましたところ、
なんとか出来ました。

本当に助かりました。感謝の言葉もありません。

私ももう少し勉強したいものです。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加