• ベストアンサー

指定列を抜き出す

V1 , V2 , V3 , V4 , V5 , V6 5.9, 3.9, 0.7, 3.9, 5.8, 5.1 4.1, 6.4, 3.8, 3.3, 5.8, 9.3 3.1, 2.3, 1.8, 2.7, 3.6, 5.6 6.8, 4.2, 2.1, 3.3, 4.9, 5.1 2.3, 0.3, -1.7, -2.1, -1.7, 1.10 8.0, 4.7, 3.7, 6.9, 6.2, 5.5 さらに続く 上記のようなテキストデータがファイルAに入っており これからV1,V3,V5のデータだけを抽出し、 ファイルBに格納するプログラムを作成中なのですが、 データの読み込みと書き込みの部分は作成したのですが、 どのようにすれば抽出できますでしょうか? ソフトはVB6です。よろしくお願いします 'ファイル読み込み Open "C:\A.txt" For Input As #1 FlLen = LOF(1) txt = Input(FlLen, #1) Close #1 'ファイル書き込み Open "C:\B.txt" For Output As #1 Print #1, txt Close #1

  • valga
  • お礼率11% (1/9)

質問者が選んだベストアンサー

  • ベストアンサー
noname#140971
noname#140971
回答No.2

[C:\Temp\NewText.txt] 5.9, 0.7, 5.8 4.1, 3.8, 5.8 3.1, 1.8, 3.6 6.8, 2.1, 4.9 2.3, -1.7, -1.7 8.0, 3.7, 6.2 Private Sub コマンド0_Click()   Dim I    As Integer   Dim N    As Integer   Dim Datas() As String   Dim Cols() As String      If xxxx("C:\Temp\NewTest.txt") Then     xxxx "C:\Temp\NewTest.txt"  ' 既に存在していれば削除する   End If   Datas() = xxxx ("C:\Temp\test.txt") ' 全体を配列に呼び込む   N = UBound(Datas()) - 1   For I = 0 To N     Cols() = Split(Datas(I), ",")     xxxx  "C:\Temp\NewTest.txt", Cols(0) & "," & Cols(2) & "," & Cols(4) ' 書き出す   Next I   xxxx "", "" ' 閉じる End Sub 今、上述のように [C:\Temp\NewText.txt] を生成するコードを書いてみました。 質問の部分は、 Cols() = Split(Datas(I), ",") XXXX "C:\Temp\NewTest.txt", Cols(0) & "," & Cols(2) & "," & Cols(4) だと思います。 質問者は、 Datas(0)=1行目 Datas(1)=2行目 ・・・・・ Datas(n)=n行目 という取り込み方をしていませんので、少し、n行目のm番を求めるという工夫が要るでしょうね。 しかし、いずれにしろ、Split関数で配列に取り込めばいいです。

valga
質問者

お礼

Split関数ってわからないので、調べてみたら なんとまぁ便利な関数があるんですね。 これでなんとかプログラムを作成できそうです。 ありがとうございました。

その他の回答 (1)

  • PED02744
  • ベストアンサー率40% (157/390)
回答No.1

最初に謝っておきます。ごめんなさい。 私は疑い深いので、逆質問です。 「ファイル読み込み側で、なぜ行数不定のテキストファイルなのに、LOF()関数を使っているのですか?」 なぜこんな質問をしているかというと、 不定長テキストファイルの読み込みでLOF関数を使うという事を思いついたというのが、あなた自身の思いつきとは思いにくいのです。 何かの課題で入出力部分だけ与えられたかのように思われるので ・OKWaveでは課題の丸投げは禁止 という観点から、逆質問させていただいております。

valga
質問者

補足

PED02744さん >何かの課題で入出力部分だけ与えられたかのように思われる そういわれてみれば、そういう風にも見えますね。 >不定長テキストファイルの読み込みでLOF関数を使うという LOF関数は、前に友人が作ったプログラムで ファイルを読み込むのに使っていたのを覚えていたので、使ってみました。特に意味はないです。 どの関数を使えば、最適か!というが、イマイチわかっていないので、 とりあえず、最低限、動けばいいかな~という感じです(^_^;)

関連するQ&A

  • Excel VBAの文字列と数値の分類

    txtファイルで取り込んだ2行にまたがっている数値・英文字・ひらがななどを、数値だけのtxtファイルとそれ以外のtxtファイルを別々に作成し、保存するプログラムを組みたいのですが、よく分かりません。 ちなみに、使っているOSとAPはWinXP、Excel2003です。 InputData.txtの内容 A34bFg7p0 あ 1ylut890 B45LK4L え Number.txtの完成形 34701890454 String.txtの完成形 AbFgp あ ylutBLKL え '変数の宣言 Dim myFile As String Dim CC As Integer Dim XX As Integer Dim WW As Variant Dim str As String Dim tempStr As String Dim B As String Dim C As String myFile = Dir("InputData.txt") 'ファイルの読み込み If myFile = "InputData.txt" Then Open myFile For Input As #1 Do While Not EOF(1) Input #1, myText Loop '書き込みファイルの作成 Open "Number.txt" For Output As #2 Open "String.txt" For Output As #3 '数字・文字列の分類 CC = Len(myFile) For XX = 1 To CC str = Mid(myFile, XX, 1) If str >= 0 And str <= 9 Then B = B & str Else C = C & str End If Next Print #2, B Print #3, C Close #1, #2, #3 'エラーメッセージの表示 Else MsgBox "ファイルは存在しません。" End If ここまでやっている状態です。よろしくお願いします。

  • vistaでエクセル2007を使用しています。

    vistaでエクセル2007を使用しています。 久しぶりにVBAでプログラム作成をして、わけのわからない状況に遭遇したものですから、もしどなたか解説いただければと投稿しました。 Option Explicit Sub ボタン1_Click() Dim 文書全体 As String ' 文書全体読み込み ' Open Range("a1").Text For Input As #1 ' 文書全体 = Input(LOF(1), 1) ' Close #1 Open Range("a1").Text For Input As #1 Do Until EOF(1) 文書全体 = 文書全体 & Input(1, 1) Loop Close #1 英文のテキストファイルをまるまる1個の変数に読み込むだけのことなのですが、テストデータはリマークした方で問題なく動作しているにも関わらず、別のファイルを指定すると「実行時エラー62ファイルにこれ以上データがありません」で止まってしまいました。そしてその時のLOFの値とテキストファイルのプロパティで表示される値は同じでした。改めてDOで1バイトづつまわす方で試し、CLOSEで止めてイミディエイトで表示させると、 ? len(文書全体) ;lof(1) 11489 11493 となりました。これはどういうことなのでしょう。何か考え違いをしているのでしょうか?

  • テキストファイルを一行づつとる方法

    テキストファイルを一行だけとる方法は以下のとおりかと思いますが、最後の列まで一行づつとる場合はどうすればいいのでしょうか?教えて頂ければ幸いです。 Open "c:\data.txt" For Input As #1 Line Input #1, str Close #1

  • 指定の行数目から行を抽出する

    いつもお世話になっております. 環境はWindows XP Pro でActiveperlを使っています. Perlでしたいことは,「指定の行数目から行を抽出する」ことです. 具体的には以下のようにしたいと思っております. data.txt A B C D E F line.txt 2 4 6 output.txt B D F 先ほどある方からサンプルソースを教えてもらったのでそれをベースに作ってみましたが,出力のoutput.txtが空のままです. use strict; use warnings; use feature ':5.10'; use IO::File; open my $file2, '<', 'line.txt' or die "can't open input $!"; chomp(my @subjects = <$file2>); close $file2; open my $newfile, '>>', 'data_out.txt' or die "can't open output $!"; open my $file, '<', 'data.txt' or die "can't open input $!"; while (my $line = <$file>) { chomp $line; foreach my $line (@line) { print $line; if ($. eq $subjects){ say {$newfile} $line; } } } close $file; close $newfile; どこが間違っているのでしょうか.ご指摘ください.よろしくお願いします.

    • ベストアンサー
    • Perl
  • VBAで、指定したファイルを読み込めません。

    ファイルを読み込むマクロを作ったのですが、「ファイルが見つかりません」というメッセージが出てしまいます。 Open "C:\Documents and Settings\Owner\デスクトップ\textfile.txt" For Input As #1 どこか、 間違ってがっているのでしょうか。

  • バイナリデータの中からMidのように指定範囲を取得したい

    教えて下さい。 VB6です。 テキストファイルをバイナリモードで開き、Midのように特定の位置から、 必要な分を取得し、ファイルを分割させたいです。 調べてたら、 Open 読込ファイル For Binary As #1 Open 書込ファイル For Binary As #2 ReDim bytData(1 To LOF(1)) Get #1, , bytData() Put #2, , bytData() close #1 close #2 というのを見つけました。これだとそのままコピーします。 ここから、指定された、バイト数目から指定されたバイト数までの データを取得し別のファイルを作りたいのですが、 うまくできません。どうしたら、望むことができるでしょうか? お助け下さい。

  • (VB複数htmファイルからのテキストデータの抽出

    フォルダに入った複数のhtmファイルからテキストデータだけを抽出することを考えています。 ExcelVBAで下記のように記載しましたが、テキストだけではなく,htmlタグもコピーされてしまいます。 どのように修正すればよいでしょうか。 どなたか教えて頂けないでしょうか。 Sub ConvertHTMLtoTXT() Dim htmlFilePath As String Dim txtFilePath As String Dim htmlContent As String Dim txtContent As String ' HTMLファイルのパスを指定する htmlFilePath = "F:\test\0000AC4A.htm" ' TXTファイルのパスを指定する txtFilePath = "F:\test\0000AC4A.txt" ' HTMLファイルを開く Open htmlFilePath For Input As #1 ' HTMLファイルの内容を読み込む htmlContent = Input$(LOF(1), #1) ' HTMLファイルを閉じる Close #1 ' HTMLタグを除去してテキストデータを抽出する txtContent = RemoveHTMLTags(htmlContent) ' TXTファイルにテキストデータを書き込む Open txtFilePath For Output As #2 Print #2, txtContent Close #2 MsgBox "HTMLファイルがテキストファイルに変換されました。" End Sub Function RemoveHTMLTags(htmlText As String) As String ' 正規表現を使用してHTMLタグを除去する Dim regEx As Object Set regEx = CreateObject("VBScript.RegExp") ' HTMLタグを検索するパターン regEx.Pattern = "<[^>]+>" ' HTMLタグを除去する RemoveHTMLTags = regEx.Replace(htmlText, "") ' 正規表現オブジェクトを解放する Set regEx = Nothing End Function

  • 文字列を指定して,別のファイルでその文字列が存在する行を出力する

    いつもお世話になっております. 環境はWindows XP Pro でActiveperlを用いてプログラムをしております. この度,皆様にご意見をうかがいたいのは,「文字列を指定して,別のファイルでその文字列が存在する行を出力する」という内容です. まず,以下のテキストファイルがあります. data.txt ---------------------- A BA C DA E FA G sansyo.txt ----------------------------- B D F ------------------------------- 処理として,data.txtでsansyo.txtの行が "含まれる"行数を出力する ------------------------------- output.txt ------------------------------- 2 4 6 ここで自分なりにプログラムを組んでみました. ----------------------------------- open(FILE, "sansyo.txt"); open(FILE2,"data.txt"); @file = <FILE>; close(FILE); @file2 = <FILE2>; close(FILE2); foreach $line (@file) { foreach $line2 (@file2) { if ($line =~ $line2){ $hit = $.; } open(NEWFILE, " >> output.txt") or die "$!"; print NEWFILE $hit; close(NEWFILE); } } #ここまで ------------------------------------- ですが,永久ループに入ってしまったようにファイルはできるのですが, 出力されてきません. 間違っている点をご指摘ください.

    • ベストアンサー
    • Perl
  • EXCELVBAでファイルにあるデータをtxtファイルに出力しようと考えています。

    EXCELVBAでファイルにあるデータを txtファイルに出力しようと考えています。 txtファイルに出力することはできましたが、 エクセルのデータを参照しません。 どうすればいいのでしょうか。 よろしくおねがいします。 ********************************** 作成したVBA ********************************** Sub test_Click() Dim fNAME As String 'ファイル名格納用 fNAME = "c:\test.txt" Open fNAME For Output As #1 **************************************************** ここにB1からB10までの値をいれようと考えています。 ループのさせ方もよくわかりません。 **************************************************** Print #1, "test1=" & Range("B1").Select & " Print #1, "test2=" & Range("B2").Select & " … Print #1, "test10=" & Range("B10").Select & " Close #1 End Sub

  • ExcelのVBAでテキストファイルのAの文字列がある行とCの文字列がある行の間にBを追記したい

    以下のプログラムを実行してs.txtを作成します。 Sub test() Open "C:\s.txt" For Output As #1 Print #1, "A" Print #1, "C" Close #1 End Sub これで1行目がA、2行目がCのテキストファイルが作成されます。 この作成したテキストファイルのAがある行とCがある行の間にBを追記し、 1行目 A 2行目 B 3行目 C このようにするにはどうすればよいのでしょうか? 使用OS:Windows XP 使用ソフト:Microsoft Excel 2003 ご存知の方がおられましたらご回答をよろしくお願いします。

専門家に質問してみよう