- - PR -
TextFieldParserってASP.NET(C#)で使えるのでしょうか?
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-04-12 13:04
毎度お世話になってます。
ASP.NETで開発してます。環境はVS2005 C# WinXP_Pro_SP2 DB:ora10g です。 .NET TIPSでCSVファイルを読み込むには?[2.0のみ、C#、VB]の記事にあるとおり FWは2.0から使用できるみたいですが、usingで使えるはずのMicrosoft.VisualBasic.FileIOが認識されず、TextFieldParserでファイル内容精査が難しい状況になってきました。やりたいことはUPLOADされたCSVファイル内容をCONSTで定義されたサイズ・型で照合し、エラーならエラー部までをSPREAD(Grid)に取込んで、エラー行のカラムにフォーカスするといったものです。 ASPでは難しいのでしょうか?またsubmitでtempフォルダにuploadされたファイルを指定フォルダ内のファイルと名前比較し、重複していればtempごとDropしたいのですが、参考事例があれば教えて頂けませんでしょうか。長々とすみませんがお願いいたします。 | ||||
|
投稿日時: 2007-04-12 13:38
開発がC#とのことですから、Microsoft.VisualBasicのアセンブリが
参照設定に入っていないだけではないでしょうか? 追加してあげればusingで使えるはずですよ。 -- 追記 -- アップロードファイルの重複チェック こんな感じでいかがでしょう?
[ メッセージ編集済み 編集者: 怜 編集日時 2007-04-12 14:10 ] | ||||
|
投稿日時: 2007-04-13 12:24
ありがとうございます。参照ですが、using System.IO;でアセンブリ参照したんですが、最初エラーでオブジェクトブラウザでMicrosoft.VisualBasic.FileIO以下を開いたら見えるようになりました。.NETってjavaとはかなり違いますね。というか使い方がいまいち?です。
>-- 追記 -- >アップロードファイルの重複チェック >こんな感じでいかがでしょう? 重複チェックの件、ありがとうございます。そうです、これです。助かりました。 ついでといっては何なのですが、Microsoft.VisualBasic.FileIO.TextFieldParserで取得したstring配列をspread(gridでも可)にsetする方法を探しているのですが、参考になるものをご存知でしたらご教授願いませんか?無条件でファイルを取り込む方法はわかるのですが、精査しながら1行ずつsetしたいのです。ファイルはcsvでエンコードs-jis で、デリミタを指定するのにTextFieldParserを使用してます。 通常streamReader/Writerでの出し入れになるかと思われますが、Parserを利用して ファイル内容精査をしながらエラー部までをspread(gridでも可)にセット表示したいのですが、ParserとstreamReaderを別々に扱う必要があります。ちょっと複雑で申し訳ありません。以下やりたいことを添付しますので、お願いできないでしょうか? ---------------------------------------------------------------------- TextFieldParser parser = new TextFieldParser(fileName,System.Text.Encoding.GetEncoding("Shift_JIS")); using (parser) { parser.TextFieldType = FieldType.Delimited; parser.SetDelimiters(","); parser.HasFieldsEnclosedInQuotes = false; parser.TrimWhiteSpace = false; while (!parser.EndOfData) { string[] row = parser.ReadFields(); // 1行読み込み // ファイル精査 if (!FileLenCheck(row)) { continue; } else { bool chkflg = false; break; } // ここでSPREADに1行セットしたい } | ||||
|
投稿日時: 2007-04-13 15:28
私の方は今の案件で初めてSpreadSheetを使うので、いろいろ遊んでいる最中でした。
お互いがんばりましょう。 私も試行錯誤中なので、「これが標準」的な回答は出来ませんが M太郎さんのやりたいことを実現するだけなら以下のやり方で出来ます。 以下のコードを「// ここでSPREADに1行セットしたい」の箇所に挿入してください。
これだとデータ件数が多いときに、データが描画される瞬間が目に 見えてしまいそうで心配です。 なので内容の精査がOKだった行を一度データテーブルに待避して貯めておき、 最後にバインドしてあげた方が良いのではないかと思います。 私ならそっちで実装します。 [ メッセージ編集済み 編集者: 怜 編集日時 2007-04-13 15:30 ] | ||||
|
投稿日時: 2007-04-13 16:42
へーJavaだったら関係ないアセンブリ(パッケージ)を参照して呼び出せるんだぁ。 Javaって人工知能搭載だったんだね。 つか。かなり違うなんて意見はじめて聞いたよ。 少なくともこのあたりは全く一緒だと思うけどね。 | ||||
|
投稿日時: 2007-04-13 17:51
怜さんいろいろとありがとうございます。
私もSpread(web2.0)使うの初めてで、四苦八苦してます。いろいろ機能ついてますと言われたのですが、QAだらけです。早速この方法で試してみますね。 >これだとデータ件数が多いときに、データが描画される瞬間が目に >見えてしまいそうで心配です。 そうですね、最初はSpread自体を非表示にしてセットしてから表示しようかと考えていたんですが、 >一度データテーブルに待避して貯めておき、最後にバインド・・ なら良さそうでね。 何とか解決できそうな気配です。ありがとうございます。 | ||||
|
投稿日時: 2007-04-13 20:21
え?ASP.NET でしょ?サーバがレスポンス返していないのに途中経過が見られたりしないよ。 ぶさいくろうさん、言葉は悪いけど、ど真ん中ですよ。ちゃんと意味を考えましょう。 ヒント:using は参照ではありません。using がなくても、名前空間も指定すればいいのですから。しかし、java でいえば .class ファイルだっけ?「読んで」と言わないと読んでくれないでしょ。 _________________ | ||||
|
投稿日時: 2007-04-13 20:54
ちょっと補足を。 # これだと Jitta さんがぶさいくろうさんに向けて言っているように見える # ので。 元々の原因はM太郎さんが TextFieldParser を Microsoft.VisualBasic 名前空間をつけずに書いてしまっていたことが 原因なわけで(using を使って解決したようですが)、そういった現象は Java でも同じように起こりうると思うのです。 ぶさいくろうさんが書かれているのは、そういったM太郎さん自身のミスを Java と C# の違いという話に置き換えてはいけないよということなので はないかと。 自分が使用するアセンブリやパッケージは C# でも Java でも「『読んで』 と言わないと読んでくれない(Jitta さん)」わけで、M太郎さんの書き方で はまるで .NET は読んでくれないけれど、Java だったら関係のないパッ ケージまでも自動で読んでくれるところが違うよね、と言っているように見 えるわけです。でもそうじゃないですし、ミスはミスでそう書かれた方が良 いのではないかしらん?という、ぶさいくろうさんなりの愛のあるツッコミな のではないかと思ったり思わなかったり。 確かにぶさいくろうさんは言葉は悪いですが、言うべきことはちゃんと言っ てくれる方だと思いますよ。華麗にスルーしてみるのもいいですが、良薬 口に苦しとも言いますし、意見は意見で真摯に受け止める姿勢も大事だと 思います。 _________________ ぽぴ王子@わんくま同盟 ぽぴ王子の人生プログラミング中 / ぽぴンち。 |