2010-12-13 33 views
0

2つのテキスト(ini)ファイルを比較します。最初のものは、第1には、データが最初のファイルが伝えることによって、第2のファイルに置き換えるべきである形成私が言う3番目のファイルに2つのテキストファイルを1行ずつ比較し、真または偽の場合に置き換えます。

NUMM=0 
DURC=340 
VORS=3000 
SPAN=140 

を読み込み

NUMM=1 
DURC=360 
VORS=2500 
SPAN=130 

読み込み真または偽

NUMM=false 
DURC=true 
VORS=true 
SPAN=false 

置き換え後の2番目のファイルの結果は

NUMM=1 
DURC=340 
VORS=3000 
SPAN=130 

私はどうなるのか、いくつかの方法を試してみましたが、C#で

+1

おそらく、あなたが試したことについて少し説明する必要があります。私はあなたのすべての説明を理解しているかどうかはわかりませんが、私が試して答えを出すのであれば、基本的には自分でプログラミングしています。あなたが混乱しているところを示すことができれば、人々はそれを試して対処することができます。 –

+0

あなたが試した投稿を投稿してください。あなたはどんなエラーを出していますか? – womp

+1

"私はいくつかの方法を試しましたが、C#でうまくいかなかったのはなぜですか?何が悪かったのか?私はこれを行う方法を知っていますが、あなたが取るべきステップを書き留めてからC#でそれを実装するのが最善でしょう。 – RvdK

答えて

2

それをうまくできませんでした:

まず、htTrueFalseという名前のハッシュテーブルを作成するには、読んで、真/偽のファイルを分割します。

次に、最初のファイルを読み込んで分割し、htReplaceという名前のHashTableを作成します。

最後に、2番目のファイルを読み込んで分割し、置き換える必要がある場合は各キーごとにhtTrueFalseから取得し、必要な場合はhtReplaceからキーの値を取得して結果に置き換えますファイル。

Mmmh ...これは特に明白なことではありませんが、そうでない場合は、躊躇しないでください。

+0

2番目のファイルに書き戻しているのを忘れてしまった(おそらくそれがこのコードの意図なので)。置き換えた後の2番目のファイルの結果は – jcolebrand

0

あなたはこのようなことをすることができます。

var file1 = new StreamReader(filename1); 
var file2 = new StreamReader(filename2); 
var file3 = new StreamReader(filename3); 
var output = string.Empty; 
var line = string.Empty; 

while((line = file1.ReadLine()) != null) 
{ 
    var replace = file3.ReadLine.Split('=')[1]; 
    if(replace == "true") 
    { 
     output += file2.ReadLine() + "\r\n"; 
    } 
    else 
    { 
     output += line + "\r\n"; 
    } 
} 

file1.Close; 
file2.Close; 
file3.Close; 

var file4 = new StreamWriter(filename4); 
file4.Write(output); 
file4.Close; 

これが役に立ちます。

0

これは私がどうなるのかです:

System.Collections.Generic.List<string> fileToWrite = new List<string>(); 
string[] file1 = System.IO.File.ReadAllLines(filePath); 
string[] file2 = System.IO.File.ReadAllLines(anotherFilePath); 
string[] fileWithTrueFalse = System.IO.File.ReadAllLines(fileWithTrueFalsePath); 
for (int i = 0; i < file1.Length; i++) 
{ 
    if (fileWithTrueFalse[i].Substring(fileWithTrueFalse[i].IndexOf('=') + 1) == "true") 
     fileToWrite.Add(file2[i]); 
    else 
     fileToWrite.Add(file1[i]); 
} 
System.IO.File.WriteAllLines(fileToWritePath, fileToWrite.ToArray()); 
+0

Hello Cokegod your codeです。真の偽のファイルが定義された真偽値だけを持っているが、比較ファイルの中では同じように繰り返されます。 –

+0

Hello Cokegodは申し訳ありませんが、私のコメントを完了しませんでした。あなたのコードは、真の偽のファイルに定義された真偽値が1つしかないが、比較ファイルにはfile1のように繰り返されます。NUMM = 1 VORS = 3000 DURC = 360 NUMM = 2 VORS = 2500 DURC = 340等々。 file2はNUMM = 1のVORS = 2500 DURC = 350 NUMM = 2 VORS = 2400 DURC = 330などですが、file3(真偽はNUMM =偽のみです)VORS =真DURC =偽です。私はfile1で考え、NUMM、VORS、DURCのファイルは繰り返されていますが、file3(真偽)にはありません。 –

0

は、最終的な出力を取得し、ファイルに書き込むためにLINQを使用してください。ファイルへの最終出力に含まpを書くためにCSVファイルとしたTextWriterからリスト1、リスト2とLIST3を移入する

public class TempList 
{ 
    public TempList(string key1, string data1) 
    { 
     key = key1; 
     data = data1; 
    } 
    public TempList() 
    { } 

    public string key; 
    public string data; 
} 
{ 
    System.Collections.Generic.List<TempList> list1 = new System.Collections.Generic.List<TempList>(); 
     list1.Add(new TempList("NUMM", "1")); 
     list1.Add(new TempList("DURC", "360")); 
     list1.Add(new TempList("VORC", "2500")); 

     System.Collections.Generic.List<TempList> list2 = new System.Collections.Generic.List<TempList>(); 
     list2.Add(new TempList("NUMM", "0")); 
     list2.Add(new TempList("DURC", "340")); 
     list2.Add(new TempList("VORC", "3000")); 

     System.Collections.Generic.List<TempList> list3 = new System.Collections.Generic.List<TempList>(); 
     list3.Add(new TempList("NUMM", "false")); 
     list3.Add(new TempList("DURC", "true")); 
     list3.Add(new TempList("VORC", "false")); 

     System.Collections.Generic.List<TempList> p = (from q in list1 
       join w in list2 on q.key equals w.key 
       join r in list3 on q.key equals r.key 
       select new TempList 
       { 
        key = q.key, 
        data = (r.data == "true") ? w.data : q.data 
       }).ToList<TempList>(); 
    } 

使用したTextReader。

+0

私はcokegodのコードを使用しています。最初のファイルと2番目のファイルでは、値が数回存在するかもしれません。プログラム言語ではより簡単かもしれません。 –

+0

私はcokegodのコードを使用していますが、これは存在するもののtrue/fales値を正しく実行します。エラーが発生しました。真/偽のファイルを最初のファイルのような行数で拡張するか、exeptよりもファイルを比較すると、NUMM = trueのようにすべての行の真偽値を変更する必要があります。 NUMM = 2 .... NUMM = 3ファイルの比較NUMM = 1 .... NUMM = 3 .... NUMM = 2ファイルの真/ファルse NUMM = NUM​​M = 1よりも真のファイル結果.... NUMM = 2 ..... NUMM = 3は他の値と同じです。すべての値が1行ずつです。 –

関連する問題