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

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

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

Re[5]: txtを読み込んでcsvにしたい


(過去ログ 90 を表示中)

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

■53755 / inTopicNo.1)  txtを読み込んでcsvにしたい
  
□投稿者/ まいご (1回)-(2010/09/26(Sun) 15:14:46)

分類:[.NET 全般] 

こんにちわ、初投稿です。

vb net framework1.1を使用しています。

したいことは、VBのform1というところにボタンを一つ配置して、ボタンを押すとテキストデータを1行ずつ読み込んで(読み込むフォルダのアドレスは固定)中身を決まったルールで編集後、テキストデータの内容によって複数のcsvをはき出して(はき出すアドレスも固定)ほしいのです。

たとえば、
元のテキストデータの書式は

A1 あきひろ a01
A2 ともや a05
A3 のぶゆき a07
A4 のぼる a08
B1 よしみ b02
B2 ゆき b03
C1 けいすけ c01
D1 こゆき d01
D2 しょうこ d02
D3 あきこ d04

とすると、

---A.csv-------
番号,名前,ID,set1,set2,set3
1,あきひろ,000A1,,,1
2,ともや,000A2,,,1
3,のぶゆき,000A3,,,1
4,のぼる,000A4,,,1
---B.csv-------
番号,名前,ID,set1,set2,set3
1,よしみ,000B1,,,1
2,ゆき,000B2,,,1
---C.csv-------
番号,名前,ID,set1,set2,set3
1,けいすけ,000C1,,,1
---D.csv-------
番号,名前,ID,set1,set2,set3
1,こゆき,000D1,,,1
2,しょうこ,000D2,,,1
3,あきこ,000D3,,,1

のようにしたいです。
最終的にはチェックボックスを複数個設置して、はき出すcsvを任意に決めれるようにしたいのですが、、

まったくの初心者で簡単なことを質問しているのであれば恐縮なのですが、ゆっくり勉強しているわけにもいかず、ネットで流れている似たようなサンプルコード真似てみても出来なかったり、書いていることがよくわからなかったりとうまく出来ず、少し時間が苦しくなってきたので恥を忍んでご質問させてください。

完璧なソースコードでなくても、こういう風にすればとか、なにかヒントのようなものをいただければありがたいです。



引用返信 編集キー/
■53756 / inTopicNo.2)  Re[1]: txtを読み込んでcsvにしたい
□投稿者/ επιστημη (2564回)-(2010/09/26(Sun) 15:53:15)
επιστημη さんの Web サイト
> したいことは、VBのform1というところにボタンを一つ配置して、ボタンを押すとテキストデータを1行ずつ読み込んで(読み込むフォルダのアドレスは固定)中身を決まったルールで編集後、テキストデータの内容によって複数のcsvをはき出して(はき出すアドレスも固定)ほしいのです。

で、なにがわからんですか?
- 「テキストデータを1行ずつ読み込んで」のとこ?
- 「中身を決まったルールで編集」のとこ?
- 「テキストデータの内容によって複数のcsvをはき出して」のとこ?
- ほかのなにか?

> ゆっくり勉強しているわけにもいかず、

なぜですか? 付け焼刃は脆いすよ?

> ネットで流れている似たようなサンプルコード真似てみても出来なかったり、
> 書いていることがよくわからなかったりとうまく出来ず、

なぜですか? ゆっくり勉強してないからじゃありませんか?
勉強してないのが理由ならしなきゃならないし、
勉強してもできないならやり方が悪い。

引用返信 編集キー/
■53757 / inTopicNo.3)  Re[2]: txtを読み込んでcsvにしたい
□投稿者/ まいご (3回)-(2010/09/26(Sun) 17:12:38)

> なぜですか? 付け焼刃は脆いすよ?

> なぜですか? ゆっくり勉強してないからじゃありませんか?
> 勉強してないのが理由ならしなきゃならないし、
> 勉強してもできないならやり方が悪い。
>
その通りだとは思いますが本当に時間がなくて、ピンポイントで似たようなソースがないか調べたら
framework1.1では使えないメソッドのコードだったり用語が不明で結局さかのぼって調べたりしなければ
ならなさそうで、悪循環に陥っていて困り果ててます。

vbを勉強するのが目的ではなくソフトを作るのが目的なので、掲示板として正しくない使い方をしているのは承知していますが、他に方法を思いつかなく、丸投げの形での質問になってしまいました。

何か似たようなサンプルコードが乗っている(vb net framework1.1で使える)サイトや、vb net をわかりやすく解説しているサイトを探しています。
引用返信 編集キー/
■53761 / inTopicNo.4)  Re[3]: txtを読み込んでcsvにしたい
□投稿者/ επιστημη (2565回)-(2010/09/26(Sun) 19:35:16)
επιστημη さんの Web サイト
2010/09/26(Sun) 19:38:38 編集(投稿者)
変換規則がわかんないからできるのはここ↓まで。
# あ、VBでしたね...まぁテキトーに読み替えてください。言わんとするところはわかるかと。

using System;
using System.IO;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            StreamReader reader = new StreamReader("trial.txt");
            string line;
            while ((line = reader.ReadLine()) != null)
            {
                string[] token = line.Split(' ');
                Console.WriteLine("{1} と {2} を適切に変換して {0}.csv に書く", token[0][0], token[1], token[2]);
            }
        }
    }
}

引用返信 編集キー/
■53762 / inTopicNo.5)  Re[3]: txtを読み込んでcsvにしたい
□投稿者/ Azulean (616回)-(2010/09/26(Sun) 20:29:19)
No53757 (まいご さん) に返信
> vbを勉強するのが目的ではなくソフトを作るのが目的

ところで、著作権の問題は大丈夫ですか?
何に使うつもりかわかりませんが…。
引用返信 編集キー/
■53763 / inTopicNo.6)  Re[1]: txtを読み込んでcsvにしたい
□投稿者/ やじゅ (1748回)-(2010/09/26(Sun) 22:09:44)
やじゅ さんの Web サイト
No53755 (まいご さん) に返信

>まったくの初心者で簡単なことを質問しているのであれば恐縮なのですが、ゆっくり勉強しているわけにもいかず、ネットで流れている似たような
>サンプルコード真似てみても出来なかったり、書いていることがよくわからなかったりとうまく出来ず、少し時間が苦しくなってきたので恥を忍んで
>ご質問させてください。

出来ないなら出来ないで降参してしまうっても有りかな。
どこまで出来てどこまで出来ないのかって、たぶん聞かれるはず。
CSVの読込、CSVの出力、データの絞込み、データの変換 等 何が分からなくて、何が問題なのか

> 完璧なソースコードでなくても、こういう風にすればとか、なにかヒントのようなものをいただければありがたいです。

DataTableを使ういいです。
DataTableはメモリ上のデータベースみたいなもので、簡単な条件検索や絞込みができます。
CSV形式のファイルをDataTableに入れてしまい、チェックボックスによって条件による絞込みをして
DataTableからCSVを出力する。

CSV形式のファイルをDataTableや配列等として取得する
http://dobon.net/vb/dotnet/file/readcsvfile.html
ヘッダが無い場合、項目名はF1,F2・・・になります。

DataTableにはSelectメソッドがあり、Likeで使えます。また、DataViewクラスのRowFilterでも同様にLikeが使えます。
「DataTable Select Like」または「DataView RowFilter Like」のキーワードを使えばサンプルは出てくるはず。
チェックボックスで吐き出すデータのLike文の条件を生成する(Like 'A%' や Like 'C%')

リスト9:DataTableの内容をCSV形式で出力する。
http://homepage1.nifty.com/rucio/main/VBdotNet/Database/Database4.htm

参考資料:
DataTableによるメモリ上のデータベース
http://www.sm.rim.or.jp/~shishido/datatable.html
DataTable からDataViewを生成する方法
http://www1.yel.m-net.ne.jp/oss/Tips/ADO/Tips_02001.htm
引用返信 編集キー/
■53766 / inTopicNo.7)  Re[2]: txtを読み込んでcsvにしたい
□投稿者/ επιστημη (2566回)-(2010/09/26(Sun) 23:37:41)
επιστημη さんの Web サイト
> CSV形式のファイルをDataTableに入れてしまい、

いや元ネタCSVぢゃないから。
引用返信 編集キー/
■53767 / inTopicNo.8)  Re[3]: txtを読み込んでcsvにしたい
□投稿者/ ななし (1回)-(2010/09/27(Mon) 00:40:11)
No53757 (まいご さん) に返信
> vbを勉強するのが目的ではなくソフトを作るのが目的なので、掲示板として正しくない使い方をしているのは承知していますが、他に方法を思いつかなく、丸投げの形での質問になってしまいました。

ってか、金儲けのために教えて君するくらいならそんな仕事受けるなって言いたいわ。
正直、そのレベルのやつが作ったソフト買わされるユーザが可哀想。

ファイルIOなんかプログラムで言えば最低レベルの基礎だろ。
それすら理解できないならとっとと廃業すべき。

おっさんなのか若いんかわからんが、努力できないやつはプログラム組む資格はないぞ。
金だけ欲しいなら素直に転職しましょうや。その方が同業者として助かるし。

初心者って単語は免罪符じゃねんだよ。
引用返信 編集キー/
■53772 / inTopicNo.9)  Re[3]: txtを読み込んでcsvにしたい
□投稿者/ やじゅ (1749回)-(2010/09/27(Mon) 07:32:51)
やじゅ さんの Web サイト
2010/09/27(Mon) 12:34:31 編集(投稿者)

No53766 (επιστημη さん) に返信
>>CSV形式のファイルをDataTableに入れてしまい、
>
> いや元ネタCSVぢゃないから。

見逃しました(^^;
schema.iniを定義すれば、半角スペース区切りでもいいかも。
http://park5.wakwak.com/~weblab/selectTextFile-TSV.html
http://bbs.wankuma.com/index.cgi?mode=al2&namber=40216&KLOG=69
引用返信 編集キー/
■53784 / inTopicNo.10)  Re[4]: txtを読み込んでcsvにしたい
□投稿者/ 魔界の仮面弁士 (1837回)-(2010/09/27(Mon) 10:45:30)
No53772 (やじゅ さん) に返信
> schema.iniを定義すれば、半角スペース区切りでもいいかも。

それではダメだと思いますよ(可変列数データになってしまいます)。
今回の元データは、

B1 よしみ           b02
B2 ゆき             b03
C1 けいすけ         c01

のような固定長テキスト形式なのですから、schema.ini で対応するなら、
半角スペース区切り「Format=Delimited( )」ではなく、
固定長データ「Format=FixedLength」を指定すべきかと。


たとえば元ファイルが C:\Folder\test.txt だとすれば、C:\Folder\schema.ini に

[test.txt]
ColNameHeader=False
Format=FixedLength
MaxScanRows=25
CharacterSet=OEM
;CharacterSet=ANSI
Col1=ID   Char Width 2
Col2=SP1  Char Width 1
Col3=NAME Char Width 16
Col4=SP2  Char Width 1
Col5=FLG  Char Width 3

のように定義して、OLE DB にて
 接続文字列「Provider=Microsoft.JET.OLEDB.4.0;Data Source=C:\Folder;Extended Properties=Text」
 SQL「SELECT ID, NAME, FLG FROM [TEST.TXT]」
のように問い合わせれば、とりあえず取得まではできます。

あとはそれを CSV に加工する処理になりますが、今回の場合、出力ファイル名が
固定的ではないので、SELECT INTO は使わずに行単位で処理する必要がありそうですね。

引用返信 編集キー/
■53788 / inTopicNo.11)  Re[5]: txtを読み込んでcsvにしたい
□投稿者/ やじゅ (1750回)-(2010/09/27(Mon) 12:09:24)
やじゅ さんの Web サイト
2010/09/27(Mon) 12:37:33 編集(投稿者)

No53784 (魔界の仮面弁士 さん) に返信

固定長テキストでしたか、見ためだけで半角スペース区切りと思ってしまいました。
引用返信でみると、固定長テキストになってますね。
私が提示したリンク先は固定長テキストでの読込みにはなっているw

と思ったら、違うのを貼り付けていたので修正しました。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=40216&KLOG=69
引用返信 編集キー/
■53796 / inTopicNo.12)  Re[3]: txtを読み込んでcsvにしたい
□投稿者/ PATIO (12回)-(2010/09/27(Mon) 15:32:18)
2010/09/27(Mon) 15:39:35 編集(投稿者)
2010/09/27(Mon) 15:37:30 編集(投稿者)

No53757 (まいご さん) に返信
> vbを勉強するのが目的ではなくソフトを作るのが目的なので、

状況はお察ししますが、理屈的にはおかしいです。
勉強するのが目的ではないのはわかりますが、
きちんとしたソフトを作成する為にはVBの勉強が必須なのでは?
手段をすっ飛ばして目的を得ようと言うのは現実的な話では無いと思います。
少なくとも理解しないで書いたソースがメンテナンスできるとは思えませんし。

あと、サンプルソースをかき集めてソフトを作る事が出来るのは
その言語の知識がきちんとあるから出来るのであって、
知識がない状態で継ぎ接ぎな事をしてもきちんとした品質の物が
できるとは思えません。
個人で使うプライベートな物ならともかく
仕事で作成するものなのであれば、それでは拙いと思います。

処理内容もはっきりしていそうですし、
入力ファイルのフォーマットもきっちり決まっているのでしたら
ちゃんと言語を理解した上でプログラミングされる事をお勧めします。
既に助け舟を出しておられる皆さんのサンプル内容が理解できるので
あれば良いと思うのですが、そうでないなら継ぎ接ぎにした結果
益々深みにはまりそうな気がします。

追伸:
仮に会社で出された課題のような物であるとすると
今の状況で作成された物がちゃんと動いてもあまり意味がなさそうです。
課題の目的はわかってないところをはっきりさせてそこをクリアする事だと思うので
今の状況だとわかっていない部分がクリアできずに答えだけを提出するような事になりそうです。
課題では無いと言われるのであれば、見当違いな話になりますけれど。

引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -