- ベストアンサー
VBS初歩的質問
すいません、色々調べましたが以下のことが思いつきませんのでご教示ください。 テキストファイルを一行ずつ読み込まして、文字列を検索するところまではできました。 文字列の検索は一行ずつ読み込ましたタイミングで、IF文で行っています。 そのテキストファイル内に同じ語句のものがある場合、始めのものだけを取得したい場合どうすればよいでしょうか。 一行ずつ読み込ましている関係上、2回IF文の条件にひっかかります。 具体例(上から5行あり1行目と4行目でIF文に入り、抽出してしまう) abc d e abc f
- craftx
- お礼率48% (388/806)
- Visual Basic
- 回答数3
- ありがとう数2
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
VBSを使っているというだけで、VBSの質問ではない。 処理ロジックというものを経験で会得していく必要がある点だ。 もちろん本やWEBに書いてあれば、それで勉強してその後の踏み台にしても良いのだが。しかし余り解説書は少ない。 書いてあっても諸所に散らばっていたりする。 初心者は経験が無く、視野も狭いので、ここでつまずくのだ。 そして大きく分けて分類しても、やり方が数種類在る場合が在る。だからプログラマにより、色々なやり方で処理される恐れがある。 また経験や勉強不足や苦手感で、便利な機能も使わない人もいるだろう。 処理系によっては、ズバリ用意された機能があり、楽に出来る場合がある(SQLのDistinctのようなイメージ)。そう言うのがソフトの進歩なのだろう。 ーー 本件は (1)ソート法 abcは近接レコードになる。同じものがあるかどうか判別がしやすい。 (2)過去蓄積検索法 過去にabcを書き出したか都度調べる (3)(FSOの)Dictionaryなどの仕組みを使う (2)と似ている (4)その他 思いつかないが、新手を生み出すには、相当な経験とひらめきが必要だ (5)エクセルにデータを写し、フィルタオプションの設定ー重複するレコードは無視する、などを使う。 (質問データが不十分で、これで出来るか十分検討して無いので出来るかどうかいいかねるが) ーー 本件は私ならソート法が好きだ。しかしCSVやTEXTファイルで任意の項目でソートが出来るソフトも余りないので 難しい点はある。ソートをプログラム自作してソートする方法もあるがお奨めできない。 エクセルに一旦読ますことをすれば、簡単にソートは出来て、またCSVやTXTファイルに保存できるとは思うが 横道にそれて面倒。 初心者にはドレが良いか、ドレをしたらと言いかねる点だ。質問者が少し考えて見ては。
その他の回答 (2)
- mu2011
- ベストアンサー率38% (1910/4994)
既に抽出した文字列を抽出済み配列に登録、検索都度にこの配列をチェックして登録済みならば抽出対象外にするぐらいでしょうか。 一例ですが、連想配列(Dictionaryオブジェクト)を使用しては如何でしょうか。
- Lchan0211b
- ベストアンサー率61% (573/930)
何がしたいのか十分説明されてないのでよくわかりません。 具体例の場合、5行あるデータのうち、特定の文字列(ここではabc)が 存在する行を取得したいということでしょうか? その時、最初に見つけた行だけを取得したいということでしょうか? そうであれば、abcが含まれる行を見つけた時点で ファイル読み込みループを脱出して、検索を続行しなければいい だけではないでしょうか? この回答が的外れであれば、なにがしたいかと、自分が作った ソースコードを示せば、誰かがアドバイスしてくれると 思います。
お礼
ありがとうございます。 やりたいことはテキストファイルを読み込まして、 それを一行ずつreadlineで見ていきます。 具体例でいうabcがあるかを一行ずつ見ていきます。 毎回IF文で調べる構文に今していますが、 2行目でabcで抽出して、5行目でも抽出されます。 ループをぬけるぬけないではなく、一行ずつ読み込み、全行検索対象にされます。
関連するQ&A
- VBSにてDNSサーバなどアドレス抽出
すいませんが、以下の方法がわかりませんでしたのでご教示ください。 それぞれのテキストファイルにはPCのDNSやWINSサーバのアドレスを記述しています。 テキストファイルを一行ずつ読み込まして、テキスト内に記述しているDNSやWINSサーバのデータを抽出しようとしています。 DNSやWINSのブライマリは一行なので、抽出条件(IF文)で該当した行を出力させていますが、 セカンダリは存在しない場合、一行存在する場合、複数行存在する場合とまちまちで困っております。 例えば、一行ずつ読み込ましているデータの中に、「DNSセカンダリ」という文字があれば、instr関数を使用してその行を取得しています。 ただ複数DNSセカンダリを設定している場合は、次の行も取得しなければいけません。 次の行には「DNSセカンダリ」という文字がないので、抽出対象とできませんが、どうすれば複数行あったときでも抽出させることができるでしょうか。
- ベストアンサー
- Visual Basic
- perlを使用しての特定行抽出について
何万行も書いてあるテキストファイルがあります。抽出したい文字列の一覧がテキストファイルにまとめられています(文字列は約1000個)。抽出したい文字列は一行にひとつづつ書かれています。何万行も書いてあるテキストファイルから抽出したい文字列と二つ合致したらその行を抽出したいです。ここで、注意していただきたいのが、抽出したい文字列一覧から二つの文字列にヒットした行を抽出したいです。宜しくお願い致します。 何万行も書いてあるテキストファイル aaaaa abc edi bb aert kkkkkkkkkk lllllll ddddd aaaaa anhi kkk ・・・・・・・・ ・・・・・・・・ 抽出したい文字列一覧のテキストファイル aaaaa bbbbb ddddd iiiiiiiii eeeee ・・・・・ ・・・・・
- ベストアンサー
- Perl
- (Excel VBA)困っています・・・orz
エクセルを使うとある業務でマクロを組み、最適化を図ろうと試みているのですが 気がつけば高度な領域に突入していまして、僕みたいなレベルじゃ全然???な状況になってしまいました。 まず A列の1行目から任意の行に(10行までしかなかったり、1000行まであったりとランダムにあるとする)、任意の文字列(ABCなど)があるとします。 それからオートフィルタを使い、A列からある任意の文字列(ABCなど)を検索条件にしてデータを抽出します。 抽出されたデータベースのA列には検索条件にある「ABC」が任意の行まであり、その抽出されたデーターベースのD列に今度は「XYZ」とという文字列を 抽出された分の最終行まで割り振る・・・ つまりA列《ABC》で検索され抽出されたデータのD列には《XYZ》が自動に入力される もし、検索条件(ABC)で抽出されたデータが「0」件だった場合は、D列には何もせず、次の検索条件に進む・・・ というものをマクロで組みたいのですがどうやったらよいのでしょうか?? 何卒、ご教授お願い致します。
- ベストアンサー
- Visual Basic
- 文字列の比較
現在Cでプログラムをつくっているのですが いきずまってしまいました。 1.テキストファイルを読み込む 2.書き込みファイルを開く 3.読み込んだデータを一行読み込んで その行の特定の文字列があれば、 特定の文字列のみ取り出し、 書き込みファイルに書く。 4.次以降の行も同じ処理をする。 5.読み込み、書き込みファイルを閉じる。 と、こんな感じのプログラムなのですが、 3の特定の文字列をどのように取り出せばいいのかわかりません。 取り出したいのが数字ならば、if文でできるのですが 文字列の場合は、どうなんでしょうか。 例えば、「MOJIRETU11」という取り出したいとき 数字と同じようにIF文を使用することは、できるのでしょうか。
- ベストアンサー
- C・C++・C#
- VBスクリプトのコマンドについて
テキストファイルを1行ずつ読み取り、必要な箇所のみを出力するプログラムを作成しています。 VBスクリプトで以下のことをする構文を教えてください。 1、ある1行から、ある文字列とスペースを除く方法 例(名前 abc → 名前を除きたい場合は「abc」を出力したい。) 2、ある1行から、ある文字列以降を抽出する方法 例(名前:abc →:以降をとりたい場合は「abc」を出力したい。) 3、2に加えて次の行も出力したい場合。 例(abc +次の行全部を出力)
- ベストアンサー
- Visual Basic
- 正規表現にマッチした文字列の抽出
閲覧頂きありがとうございます。 Linuxのsedコマンドに該当するwindowsコマンドは存在しますでしょうか? 存在しない場合、batやマクロでの長い記述となってしまっても構いません。 検索で調べたところ、特定のdllを入れればsedを使用できるとあったのですが、その方法は取りたくありません。 100万行以上あるテキストファイル(一行=一レコード)の中から、正規表現とマッチする文字列の抽出作業です。 1行に1つ、不特定な場所にその文字列が存在するという形です。 その抽出した文字列を、別のテキストファイルへ吐き出す…といった処理を想定しています。 どうかご教示いただけると幸いです。 環境 windows7、EmEditor使用
- 締切済み
- Windows系OS
- エクセルVBAのprintステートメントについて
エクセルVBAのprintステートメントについて エクセルVBAからテキストファイルに文字列を書き出す場合、output権限でテキストファイルを開いて、printで一行ずつ書き出すということをやっています。この際、テキストファイルの最終行の次の行に一行を書き出すのではなく、最終行の最後に追記することはできますでしょうか。 例えば、下記のようなテキストファイルの場合、cccの次の行に書き出すのではなく、 cccの直後に文字列を書きたいのです。 よろしくお願いします。 ファイルの始まり aaa bbb ccc <EOF> -- エクセル2003
- ベストアンサー
- Visual Basic
- テキストファイルから指定行をExcelに抽出したい。
「WindowsXP」/「Office2003Professional」を使用しています。 一つのフォルダに格納された複数のテキストファイルから、指定した文字列を含んだ行だけをExcelに抽出し、一覧表にする方法を教えて下さい。 各テキストファイルの抽出したい部分は以下のようになっています。(一部抜粋) ------------------ +製造元 *NEC +型番 *ABC-000 +メモリMAX *512GB +スロット数 *2 +DIMM1 *256 MB *333MHz +DIMM2 *256 MB *333MHz ------------------ 文字の先頭に[+]がついているものが検索文字列で、[*]が抜き出したいデータ部分です。 (実際のテキストでは[+]や[*]は書いてありません。) これをExcelで検索文字列を項目名に指定し、[*]部分を抜き出し全テキストファイルを一覧表にしたいと思っています。(行列反転した表) ------------------ A B C D E F G 1 ファイル名 製造元 型番 メモリMAX スロット数 DIMM1 DIMM2 … 2 aaa.txt NEC ABC-000 512MB 2 256MB 256MB 3 bbb.txt FUJITU FMV10 1024MB 2 512MB ・ ・ ------------------ ●テキストファイルの検索文字列とデータの間には半角スペースが入っています。 ●テキストファイルの検索文字列の行位置はファイルごとに異なります。 ●テキストファイルの検索文字列の中にはファイルによっては存在しない文字列もあります。 ●ExcelのA列にはフォルダ内のファイル名が予め全て入力されています。 もしもVBAを使用しなければならない場合は、VBAの知識が無い為、勝手を申しますが詳しくご教示頂けると幸いです。 宜しくお願い致します。
- ベストアンサー
- オフィス系ソフト
- ファイルの文字列の処理の質問
今ファイルに対して文字列の処理をしています。 あるファイルに対して一定の文字列を検索して、その検索したい文字列が なければ、その一行をファイルに出力したいですが、手元にwindowsバージョン のgrep.exe で実現すると考えています。 しかし、検索したいファイルは、文字列が入ってない行があります。 そのため、検索したい文字列が存在しない行は、改行だけの行を結果として 出力されています。改行だけの行を除きたいですが、どうすればいいか? ファイルのsjisです。例えば、内容としては、以下のようになっています。 aiiiiii ballllll fafafa 777777 とするファイルがあります。そのファイルに対して、aという文字が入ってない行を 取りたいですが、実際にgrep -v "a" ファイル名 でやると、777777の行とすべて 改行だけある行が取られてました。 777777だけをとる方法がありますでしょうか?
- ベストアンサー
- その他(プログラミング・開発)
お礼
皆様ありがとうございます。解決いたしました。