2017-01-22 13 views
1

Regexを使って余分な文字を削除する方法がわかりません。Regexを使用して一貫性のないテキストファイルの余分な文字セットを削除する

この例では、42個の "|" (縦棒)を1行につける。

|V.7|42| 
1|0|1|58|4|4|351|25|8|||1|0||6|3|1000|49|20|430|17|6|0|10|0|1200|25||30|20|20|20|20|0|100|61028|1|0|0|1|1|0| 
1|0|1|58|4|4|351|25|8|||1|0||6|3|1000|49|20|430|17|6|0|10|0|1200|25||30|20|20|20|20|0|100|61028|1|0|0|1|1|0| 
2|543|2|58|4|4|366|26|9|100||2|200||8|3|1000|49|20|430|17|6|10|21|54|2400|36||30|20|20|20|20|543|150|61028|2|100|1|2|2|0| 
3|1230|3|60|5|5|390|26|10|100||3|1500||10|3|1000|49|20|430|17|6|10|32|123|4800|46||30|20|20|20|20|1230|200|61028|3|1000|2|3|3|0| 
4|2002|4|61|6|6|424|27|12|100||4|6000||12|4|769|37|15|315|12|4|10|45|200|9600|57||30|20|20|20|20|2002|250|61028|4|5000|3|4|4|0| 
5|3306|5|63|7|7|468|29|14|100||5|18000||16|4|556|27|11|208|8|2|10|58|331||69||30|20|20|20|20|3306|300|61027|1|10000|4|5|5|0| 
6|4950|6|66|8|8|522|31|17|100||6|||18|4|435|21|9|147|6|1|10|74|495||80||30|20|20|20|20|4950|350|61027|2|30000|5|6|6|0| 
7|6947|7|69|10|10|585|33|20|100||7|||20|4|333|17|7|97|4|1|10|90|695||92||20|15|15|15|15|6947|400|61027|3|50000|6|7|7|0| 
8|9309|8|73|12|12|658|35|24|100||8|||24|4|286|14|6|73|3|1|10|109|931||105||20|15|15|15|15|9309|450|61026|1|100000|7|8|8|0| 
9|12050|9|77|14|14|741|38|28|100||9|||27|5|250|13|5|55|3|1|10|129|1205||117||20|15|15|15|15|12050|500|61026|2|300000|8|9|9|0| 
10|15183|10|82|16|16|834|41|33|100|100|10|||29|5|222|11|4|0|0|0|10|151|1366||130|5|20|15|15|15|15|15183|550|61025|1|500000|9|10|10|0| 
11|18720|11|87|19|19|936|45|38|100|100|11|||31|5|200|10|4|0|0|0|11|176|1685||143|10|20|15|15|15|15|18720|600|||||||0| 
12|21335|12|92|22|22|1048|48|44|100|100|12|||36|5|182|9|4|0|0|0|12|203|2134||157|15|10|15|10|10|10|21335|650|||||||0| 

私は45でもう1つ、新しい文字を削除して上記のような42個の垂直バーがあるようにしたいと思います。

public string Fix(string FileName, int columnsCount) 
{ 
    var InputFile = File.ReadLines(FileName).Skip(1).ToArray(); 
    string Result = ""; 
    for(int i = 0; i < InputFile.Length; i++) 
    { 
     int FoundMatches = Regex.Matches(Regex.Escape(InputFile[i]), FindWhatTxtBox.Text).Count; 
     // If too many letters found, trim the rest. 
     if(FoundMatches > CountTxtBox.Text.Length) 
     { 
      string CurrentLine = InputFile[i]; 
     } 
    } 
    return Result; 
} 

あなたは各行がその垂直バーの内部には、数字のいずれかを持って見ることができるように:

|V.8|45| 
1|0|1|58|4|4|351|25|8|||1|0||6|3|1000|49|20|430|17|6|0|10|0|1200|25||30|20|20|20|20|0|100|61028|1|0|0|1|1|0|5000|40022|1| 
2|543|2|58|4|4|366|26|9|100||2|200||8|3|1000|49|20|430|17|6|10|21|54|2400|36||30|20|20|20|20|543|150|61028|2|100|1|2|2|0|25000|61034|1| 
3|1230|3|60|5|5|390|26|10|100||3|1500||10|3|1000|49|20|430|17|6|10|32|123|4800|46||30|20|20|20|20|1230|200|61028|3|1000|2|3|3|0|75000|40250|1| 
4|2002|4|61|6|6|424|27|12|100||4|6000||12|4|769|37|15|315|12|4|10|45|200|9600|57||30|20|20|20|20|2002|250|61028|4|5000|3|4|4|0|160000|61035|1| 
5|3306|5|63|7|7|468|29|14|100||5|18000||16|4|556|27|11|208|8|2|10|58|331||69||30|20|20|20|20|3306|300|61027|1|10000|4|5|5|0|300000|40355|3| 
6|4950|6|66|8|8|522|31|17|100||6|||18|4|435|21|9|147|6|1|10|74|495||80||30|20|20|20|20|4950|350|61027|2|30000|5|6|6|0|||| 
7|6947|7|69|10|10|585|33|20|100||7|||20|4|333|17|7|97|4|1|10|90|695||92||20|15|15|15|15|6947|400|61027|3|50000|6|7|7|0|||| 
8|9309|8|73|12|12|658|35|24|100||8|||24|4|286|14|6|73|3|1|10|109|931||105||20|15|15|15|15|9309|450|61026|1|100000|7|8|8|0|||| 
9|12050|9|77|14|14|741|38|28|100||9|||27|5|250|13|5|55|3|1|10|129|1205||117||20|15|15|15|15|12050|500|61026|2|300000|8|9|9|0|||| 
10|15183|10|82|16|16|834|41|33|100|100|10|||29|5|222|11|4|0|0|0|10|151|1366||130|5|20|15|15|15|15|15183|550|61025|1|500000|9|10|10|0|||| 
11|18720|11|87|19|19|936|45|38|100|100|11|||31|5|200|10|4|0|0|0|11|176|1685||143|10|20|15|15|15|15|18720|600|||||||0|||| 
12|21335|12|92|22|22|1048|48|44|100|100|12|||36|5|182|9|4|0|0|0|12|203|2134||157|15|10|15|10|10|10|21335|650|||||||0|||| 

は、私は現時点ではこのコードを持っています。余分な手紙を取り除くにはどうすればいいですか?

+0

ループは必要ありません。 "^((?:\ d * \ |){42})。* '" $ 1 "のようなものを置き換えることができます。 – phatfingers

+0

サンプルコードはどのようなものになりますか? – Eperty123

+0

マイクロソフトまともなサンプルコードがここにあります。https://msdn.microsoft.com/en-us/library/xwewhkd1(v=vs.110).aspx – phatfingers

答えて

1

RegExを使用する必要がありますか?また、このように、文字列操作を行うことができます。

using System; 
using System.Linq; 

public class Program 
{ 
    public static void Main() 
    { 
     string s = "1|0|1|58|4|4|351|25|8|||1|0||6|3|1000|49|20|430|17|6|0|10|0|1200|25||30|20|20|20|20|0|100|61028|1|0|0|1|1|0|5000|40022|1|"; 
     var arr = s.Split('|') ;    
     var retVal = String.Join("|", arr.Take(43)); 

     Console.WriteLine(retVal); 
    } 
} 

1桁目が私にカウンターを思わので、それが43取る...しかし、あなたはそれを当然の42を作ることができます。このコードが失敗することに注意するには、動作するエントリが43未満であることです。

0

Regexを使うのも簡単です。以下のコードを参照してください:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     const string INPUT_FILENAME = @"c:\temp\test.txt"; 
     const string OUTPUT_FILENAME = @"c:\temp\test1.txt"; 
     static void Main(string[] args) 
     { 
      StreamReader reader = new StreamReader(INPUT_FILENAME); 
      StreamWriter writer = new StreamWriter(OUTPUT_FILENAME); 
      string inputLine = ""; 
      int lineCount = 0; 
      while ((inputLine = reader.ReadLine()) != null) 
      { 
       if (++lineCount == 1) 
       { 
        writer.WriteLine(inputLine); 
       } 
       else 
       { 
        string[] inputArray = inputLine.Split(new char[] {'|'}); 
        writer.WriteLine(string.Join("|", inputArray.Take(43))); 
       } 
      } 
      reader.Close(); 
      writer.Flush(); 
      writer.Close(); 
     } 
    } 
} 
+0

これは私のお金を助けました!ありがとうございました!私はこれを選んだが、この単純化されたことがたくさんあったので、私はこれを選んだ。しばらくの間プログラミングしていないし、正規表現を研究していないので、これは比較的新しいので、私は比較的新しいです。 – Eperty123

0

ここはデータファイルですが、5つのアイテムしか必要としませんが、まだRegexを使用するだけで簡単に保てます。 StackOverflowのサンプルを小さくしておくと、より多くの回答が得られます。

必要に応じて、以下のコードは、42({0,42})または任意の番号に変更することができるが、この例では、次に読み出す

1|2|3|4|5|6|7|8|9|10 
10|9|8|7|6|5|4|3|2|1|0|1| 
||||||||||||11|12| 

コードのみ5.

データファイルを書き込みます1行に0〜5個のアイテムを取得するには

結果ファイル

1|2|3|4|5| 
10|9|8|7|6| 
||||| 
関連する問題