「テキストファイルを結合してCSVにする方法」について質問です。


1つのフォルダの中に、100個のテキストファイルがあります。
file1.txt
file2.txt
file3.txt・・

これを、結合してCSVにしたいのです。
↓こんな感じに。

file1 txtの中身
file2 txtの中身
file3 txtの中身
file4 txtの中身

ちなみに、これをMySQLの中に入れるのがゴールです。
まずはCSV化するところまでの手順をお教え頂ければ幸いです。

よろしくおねがいします!

回答の条件
  • 1人2回まで
  • 登録:2009/10/30 16:35:08
  • 終了:2009/10/31 11:25:03

回答(3件)

id:emu2929 No.1

emu2929回答回数19ベストアンサー獲得回数22009/10/30 16:54:47

ポイント20pt

まず、どのような環境化で実現したいのか、

それを明記していただけないと

目的の回答は得られないように思います。


また、MySQLに登録するまで全自動でやらせたいのか、

(毎日のバッチ処理等でやらせたいのか)

CSVにする箇所、MySQLへの登録箇所等で人手を介しても良いのか

によって、実装方法も変わると思います。


それと、「txtの中身」とありますが、これは1行限定なのでしょうか?

複数行考えられるなら、1カラム目(ファイル名)はどうするのか、

その辺も限定される方がいいかと思います。


仮にWindows環境として、人手を介していいなら、

私ならExeclVBAでCSV出力マクロ作成することで、

実装します。


URLダミー

http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110.html

id:freewriter

ありがとうございます。

CSVまでで結構です。Windows環境で、1回こっきりの作業です。

txtの中身は、各ファイルともに100行程度です。

VBAやVBSであれば、丁度良いサンプルコードをご呈示頂けますと助かります。

引き続きよろしく御願いします。

2009/10/30 17:05:13
id:drowsy No.2

drowsy回答回数1163ベストアンサー獲得回数882009/10/30 17:02:01

ポイント20pt

windowsの場合。


1.一つのフォルダにテキストファイル100個を入れた状態。

2.テキストエディタを開いて「copy *.txt zenbu.txt」と記入して保存。

3.ファイル名は任意でいいので、拡張子を.batにする。

4.できたファイルをダブルクリック。

5.zenbu.txtというフォルダが新たにできる。

6.開くとそのフォルダ内のテキストが全部入ってる。


もし改行が入ってなくて長いデータになってしまったらこちらを参考に

http://www.mag2qa.com/qa464709.html

id:freewriter

ありがとうございます。

でもこれは、マージしているだけでは?

2009/10/30 19:09:54
id:mattn No.3

mattn回答回数104ベストアンサー獲得回数232009/10/30 17:36:45

ポイント60pt

こんなのでどうでしょうか?

Option Explicit
Dim strPath, objShell, objFolder, objItem
Dim objFSO, objSTM, strName, strText
strPath = "C:\TEMP"

Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(strPath)
If Not objFolder Is Nothing Then
    For Each objItem in objFolder.Items()
		strName = objItem.Name
		If Not objItem.IsFolder And LCase(Right(strName, 4)) = ".txt" Then
            Set objFSO = CreateObject("Scripting.FileSystemObject")
            Set objSTM = objFSO.OpenTextFile(strPath & "\" & objItem.Name, 1)
			strText = objSTM.ReadAll
			strText = Replace(strText, vbCr, "")
			strText = Replace(strText, vbLf, "")
			WScript.Echo(strName & " " & strText)
			Call objSTM.Close()
			Set objSTM = Nothing
			Set objFSO = Nothing
		End If
    Next
End If

Set objFolder = Nothing
Set objShell = Nothing
id:freewriter

コメント欄に頂いた追記を含めてお返事です。

修正して頂いたものでちゃんと動作しています。ありがとうございます。

できれば、echoじゃなくてcsvで書き出すところまでして頂けると嬉しいです。

vbsあまり分からないので。。。。。。。すいません。出来ればで結構です。

2009/10/30 19:14:19
  • id:standard_one
    回答者の人たちが知りたいと思うのでコメントします。
    改行部分はどうしたいですか?
    改行コードを削除してもいいですか?
    一時的に別の文字に置き換えて後でまた改行コードに戻したいですか?
    テキストファイルの中身に , ' " などの文字は出てきますか?
  • id:freewriter
    改行は生かしたいです。
    一時的に別の文字にして、CSVの状態で元に戻っていれば嬉しいです。

    テキストファイルの中身には、そのような文字はないものとお考え下さい。
  • id:mattn
    ↑のソース、CSVでなかったしファイル名の.txt取るの忘れてたので修正ソースをgistに貼っておきますね。
    http://gist.github.com/222230
  • id:mattn
    いまWindows無いので動作確認出来ませんが...

    http://gist.github.com/222230

    たぶんこんな感じでいけます。
    list.csvというファイルがそれです。
  • id:freewriter
    できました!
    わざわざご対応頂きまして、本当にありがとうございます。

    もうひとつリクエストで大変恐縮ですが、objOUTが宣言漏れでしたので、
    ご修正頂けると、後の方もスムーズに使えると思います。

    ありがとうございました!

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません