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

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

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

Re[4]: CSVから文字列を取得して加工


(過去ログ 31 を表示中)

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

■15056 / inTopicNo.1)  CSVから文字列を取得して加工
  
□投稿者/ そら (3回)-(2008/03/03(Mon) 17:55:37)

分類:[.NET 全般] 

お世話になります
WinXP,VB.NET2005,Excel2003と言う環境です
CSVから文字列を取得してそれをデータベースに書き込もうとしています
Dim sr As New System.IO.StreamReader(Me.txt_PATH.Text, System.Text.Encoding.Default)
として、Me.txt_PATH.Textに書き込まれた所にあるCSVファイルを読み込んでいます

Dim strRead as String = Nothing
strRead = sr.ReadLine   '読込
Dim strData() As String = StrRead.Split(CChar(","))
として、一行ずつ読んで、","毎にstrDataに入れて、加工してデータベースにと言う流れです

文字列の加工なんですが
例えば「"東京都ABC(XP)"」と、「"」と全角と半角が入り混じっていてそこから「東京都ABC」と「(XP)」と分けたいのですが
どの様にすれば取れるのでしょうか

strCharは"東京都ABC(XP)"など加工する文字列を入れる様にしています
Dim intPos1 As Integer = 0
Dim intPos2 As Integer = 0
Dim strMAE As String = ""
Dim strUSIRO As String = ""

intPos1 = strChar.LastIndexOf("(")
intPos2 = strChar.LastIndexOf(")")

If intPos1 <> -1 AndAlso intPos2 <> -1 AndAlso (intPos1 < intPos2) Then
            strMAE = strChar.Remove(intPos1, intPos2)
            strUSIRO = strChar.Remove(1, intPos1)
End if
としていますがエラーが出たり、正しく取れないのです
よろしくお願いします

引用返信 編集キー/
■15057 / inTopicNo.2)  Re[1]: CSVから文字列を取得して加工
□投稿者/ まどか (478回)-(2008/03/03(Mon) 18:09:51)
文字列の中で「文字位置」とはどんな範囲の値なのかを考えればわかると思います。
"(XP)"の場合にどうなるかで考えるとハッと気づくことでしょう。

好き嫌いの問題かもしれませんが、部分文字列を取得するなら
RemoveよりSubStringのほうが直感的かもしれません。
#いや、ほんと、どっちだっていいじゃんという問題です。
引用返信 編集キー/
■15061 / inTopicNo.3)  Re[2]: CSVから文字列を取得して加工
□投稿者/ そら (4回)-(2008/03/03(Mon) 18:53:22)
まどかさん、ありがとうございます
東京都ABCの方は取れました。教えて頂いたSubStringでやりました
strMAE = strChar.Substring(1, intPos1 - 1)としてあげました

しかし、(XP)の方が上手く取れません
同じように考えて
strUSIRO = strChar.Substring(intPos1 - 1, intPos2)
としたのですが
インデックスおよび長さは文字列内の場所を参照しなければなりません。
パラメータ名: length
とエラーが出てしまいました
Substringの中はどちらかが必ず数字じゃないとダメなのでしょうか?
引用返信 編集キー/
■15062 / inTopicNo.4)  Re[1]: CSVから文字列を取得して加工
□投稿者/ Jitta on the way (47回)-(2008/03/03(Mon) 18:59:23)
No15056 (そら さん) に返信
> お世話になります
> WinXP,VB.NET2005,Excel2003と言う環境です
> CSVから文字列を取得してそれをデータベースに書き込もうとしています
> Dim sr As New System.IO.StreamReader(Me.txt_PATH.Text, System.Text.Encoding.Default)
> として、Me.txt_PATH.Textに書き込まれた所にあるCSVファイルを読み込んでいます
>
> Dim strRead as String = Nothing
> strRead = sr.ReadLine '読込
> Dim strData() As String = StrRead.Split(CChar(","))
> として、一行ずつ読んで、","毎にstrDataに入れて、加工してデータベースにと言う流れです
>
> 文字列の加工なんですが
> 例えば「"東京都ABC(XP)"」と、「"」と全角と半角が入り混じっていてそこから「東京都ABC」と「(XP)」と分けたいのですが
> どの様にすれば取れるのでしょうか
>
> strCharは"東京都ABC(XP)"など加工する文字列を入れる様にしています
> Dim intPos1 As Integer = 0
> Dim intPos2 As Integer = 0
> Dim strMAE As String = ""
> Dim strUSIRO As String = ""
>
> intPos1 = strChar.LastIndexOf("(")
> intPos2 = strChar.LastIndexOf(")")
>
> If intPos1 <> -1 AndAlso intPos2 <> -1 AndAlso (intPos1 < intPos2) Then
> strMAE = strChar.Remove(intPos1, intPos2)
> strUSIRO = strChar.Remove(1, intPos1)
> End if
> としていますがエラーが出たり、正しく取れないのです
> よろしくお願いします


エラーがでたり…どんなエラーでしょう?私にはあなたの見ているものは見えないので、説明して下さい。

正しく取れない…どのようなものを期待して、どのようなものが結果となるのでしょう?私にはあなたが考えていることがわからないので、説明して下さい。


ダブルクォーテーションを切り取るだけなら、2文字目から文字列の長さ引く2文字目までを取り出したらいけそうです。
その上で、小カッコ始めから文字列の最後までを取り外せばいいような気がします。
実際にどの様なデータが有り得るのか、この投稿だけでは判断できないので、確かなことは言えませんが...
引用返信 編集キー/
■15064 / inTopicNo.5)  Re[3]: CSVから文字列を取得して加工
□投稿者/ まどか (479回)-(2008/03/03(Mon) 20:11:39)
No15061 (そら さん) に返信
> インデックスおよび長さは文字列内の場所を参照しなければなりません。
> パラメータ名: length
> とエラーが出てしまいました

冷静になって考えましょう。
SubString(開始文字位置、長さ)の「開始文字位置」(何文字目)は、いくつから始まらなければいけないか。
"ABC".SubString(?, 1)で A を取得するには?はいくつか?ということです。
引用返信 編集キー/
■15079 / inTopicNo.6)  Re[4]: CSVから文字列を取得して加工
□投稿者/ そら (5回)-(2008/03/04(Tue) 09:59:34)
まどかさんありがとうございます
Jitta on the wayさんありがとうございます
エラーに関しては
インデックスおよび長さは文字列内の場所を参照しなければなりません。
パラメータ名: length
と出てしまっていました

後ろの(XP)に関しては一気に取るのではなくて2段階に分けて取る事が出来ました
以下2行です
strUSIRO = strChar.Substring(intPos1)
strUSIRO = strUSIRO.Substring(0, strUSIRO.LastIndexOf(")") + 1)

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -