お世話になります。
よっしです。
VBSで以下のことをしたいのですが、うまくいきません!
ご存知の方教えてください。
・2個のテキストファイル(Text1、Text2(改行あり))の文字列を比較し、同じものが無い場合にその文字列を別ファイルにWriteしたい。
Text1の内容例
Line1
Line2
Line3
Line4
Text2の内容例
Line2
Line3
この場合新規ファイルには以下のように記述したいです。
Line1
Line4
配列を使用してちょちょっとできると思ったらなかなか上手くいかず、配列と文字列のFilterをしたら"True"の場合を指定するとエラーが出てしまいます。
一次元の配列のはずなんですが・・・
何か上手くいく方法があれば教えてください!
No.6ベストアンサー
- 回答日時:
少しでもメモリを節約するようにして変更してみました
------------------------------------------------------------
'Text1.txtとText2.txtの共通しない部分を不一致.txtに書き出す。
Dim fso, TF1, TF2, TFo
Dim Text, aLine
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
Set TFo = fso.CreateTextFile("不一致.txt")
'Text1をText2で消去
Set TF1 = fso.OpenTextFile("Text1.txt")
Text = TF1.ReadAll
TF1.Close
Set TF2 = fso.OpenTextFile("Text2.txt")
Do Until TF2.AtEndOfStream
aLine = TF2.ReadLine & vbCRLF
Text=Replace(Text, aLine, "")
Loop
TF2.Close
'残りを書き出す
TFo.Write(Text)
'Text2をText1で消去
Set TF2 = fso.OpenTextFile("Text2.txt")
Text = TF2.ReadAll
TF2.Close
Set TF1 = fso.OpenTextFile("Text1.txt")
Do Until TF1.AtEndOfStream
aLine = TF1.ReadLine & vbCRLF
Text=Replace(Text, aLine, "")
Loop
TF1.Close
'残りを書き出す
TFo.Write(Text)
TFo.Close
また返事が遅くなってしまいすいません。
上記プログラムで完璧に動いてくれました!
もちろん一つ前のものでも動きました。
本当に助かりました。
どうもありがとうございます。
No.5
- 回答日時:
試しに作ってみました。
あまり大きくないファイルだったらこれでいいと思います
-------------------------------------------------------------
'Text1.txtとText2.txtの共通しない部分を不一致.txtに書き出す。
Dim fso, TF1, TF2, TFo
Dim Text1, Text2, aLine
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
Set TF1 = fso.OpenTextFile("Text1.txt")
Text1 = TF1.ReadAll
TF1.Close
Set TF2 = fso.OpenTextFile("Text2.txt")
Do Until TF2.AtEndOfStream
aLine = TF2.ReadLine & vbCRLF
Text1=Replace(Text1, aLine, "")
Loop
TF2.Close
Set TF2 = fso.OpenTextFile("Text2.txt")
Text2 = TF2.ReadAll
TF2.Close
Set TF1 = fso.OpenTextFile("Text1.txt")
Do Until TF1.AtEndOfStream
aLine = TF1.ReadLine & vbCRLF
Text2=Replace(Text2, aLine, "")
Loop
TF1.Close
Set TFo = fso.CreateTextFile("不一致.txt")
TFo.Write(Text1)
TFo.Write(Text2)
TFo.Close
No.4
- 回答日時:
#3
flagを0以外にしている部分がないと思ってたら訂正された…
(実際に動かしてもいないのに自信ありだなんて自信家ですね)
これって、Text2にあって、Text1には無いモノがあるってことを考慮してないですよね。
この回答への補足
お返事が遅くなってすいません。
ありがとうございます。
Text2にあって、Text1にはないというものは原則発生しません。発生すると困ってしまいますので・・・
現在回答いただいたプログラムを拝見させていただいております。ありがとうございます。
No.3
- 回答日時:
すみません、一行間違えました。
出しなおします。-- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< --
typedef struct _strlist {
char *text;
int flag;
struct _strlist *next,*prev;
} StrList;
void CTmpDlg::OnOK()
{
CStdioFile fin1("test1.txt",CFile::modeRead),fin2("test2.txt",CFile::modeRead),
fout("test3.txt",CFile::modeCreate|CFile::modeWrite);
CString ss;
StrList *head = NULL, *tail = NULL, *next, *list;
while(fin1.ReadString(ss) != NULL) {
list = new StrList;
if ((next = head) != NULL) {
next->prev = list;
}
else {
tail = list;
}
list->next = head;
list->prev = NULL;
list->text = strdup(ss);
list->flag = 1;
head = list;
}
while(fin2.ReadString(ss) != NULL) {
for (list = head; list != NULL; list = list->next) {
if (strcmp(ss,list->text) == 0) {
list->flag = 0;
}
}
}
for (list = tail;list != NULL; list = list->prev) {
if (list->flag != 0) {
ss = list->text;
ss += "\r\n";
fout.WriteString(ss);
}
}
for (list = head; list != NULL; list = next) {
next = list->next;
free(list->text);
delete(list);
}
CDialog::OnOK();
}
No.2
- 回答日時:
typedef struct _strlist {
char *text;
int flag;
struct _strlist *next,*prev;
} StrList;
void CStringDlg::OnOK()
{
CStdioFile fin1("test1.txt",CFile::modeRead),fin2("test2.txt",CFile::modeRead),
fout("test3.txt",CFile::modeCreate|CFile::modeWrite);
CString ss;
StrList *head = NULL, *tail = NULL, *next, *list;
while(fin1.ReadString(ss) != NULL) {
list = new StrList;
if ((next = head) != NULL) {
next->prev = list;
}
else {
tail = list;
}
list->next = head;
list->prev = NULL;
list->text = strdup(ss);
list->flag = 0;
head = list;
}
while(fin2.ReadString(ss) != NULL) {
for (list = head; list != NULL; list = list->next) {
if (strcmp(ss,list->text) == 0) {
list->flag = 0;
}
}
}
for (list = tail;list != NULL; list = list->prev) {
if (list->flag != 0) {
ss = list->text;
ss += "\r\n";
fout.WriteString(ss);
}
}
for (list = head; list != NULL; list = next) {
next = list->next;
free(list->text);
delete(list);
}
CDialog::OnOK();
}
No.1
- 回答日時:
結果ファイルの内容は
Line4
Line1
の様に順番は変わってしまってもいいんでしょうか
変わってもいいなら、
作業ファイルとしてText1とText2をソートしたものを用意して
先頭から順に比べて書き出していくというような方法でできます。
小さいファイルなら、Dictionaryオブジェクトを使ってできると思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- その他(プログラミング・Web制作) PythonでLoopを使って配列内の文字列を結合する。そして [] を削除する 1 2022/03/31 23:28
- 英語 提示した名言について(並列表現の文法規則) 4 2023/06/02 09:41
- Excel(エクセル) エクセルで2つの表を比較して、文字列が同じだが、その行のある値が違うものを抽出したい 1 2022/10/06 21:48
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- その他(プログラミング・Web制作) python質問 1 2023/08/14 11:54
- PHP ワードプレスサイト PHP8.0.25でのWarningエラー 1 2023/06/12 11:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
python3について。
-
vba クリップボードクリアにつ...
-
Pythonのコードエラーについて...
-
ホームページのプログラムの見...
-
IT業界より楽に稼げる業界って...
-
JRのjsonファイルって使って大...
-
HTMLソースが表示のページのも...
-
正規表現 URL抽出「 [\\/\\b]{0...
-
google formsを使ったタスク依...
-
このプログラミング言語のfor分...
-
プログラミング未経験者(殆ど未...
-
初心者が簡単なPowerShellスク...
-
ホワイトハッカー
-
pythonでのカーソル移動がずれる
-
恒久的リダイレクトについて
-
プログラマーと学歴の関係性に...
-
Pythonで仮想通貨の自動売買が...
-
16x16のスプライトフォント
-
Google ColaboでGUI作成
-
REGZAに接続できない(パソコン)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Python - Excel で Webからデー...
-
どちのほうがすきですか?
-
【python】辞書作成(ネスト)を...
-
C# GetFilesで複数のファイルの...
-
Scheme 中置式から後置式へ
-
Pythonでリストの要素の順番を...
-
C言語:単語カウント
-
STLのlistで重複するものだけを...
-
可変引数をconstで参照渡し
-
PerlでXMLを解析して出力する。
-
複数のIP取得
-
Ademの関係(Schemeについて教...
-
ギブアップ!!
-
リストの中のDataFrameに他のDa...
-
python3でのリスト作成について...
-
C言語:ファイル操作
-
プログラミングの問題について...
-
texで"図"または"Fig"を外したい
-
Application.ScreenUpdating = ...
-
JSONで文字列が長い時
おすすめ情報