0

ここでやろうとしているのは、txt ファイルから最も長い行を削除することです。コードはその仕事をしますが、複数の「最長行」と空白行も削除する必要があります。それを行う方法についてのアイデアはありますか?

コードは C# です

    namespace _5_2
    {
    //------------------------------------------------------------
    class Program
    {
         const string CFd = "..\\..\\U1.txt";
         const string CFr = "..\\..\\Results.txt";
         static void Main(string[] args)
         {
             int nr;
             Read(CFd, out nr);
             Print(CFd, CFr, nr);
             Console.WriteLine("Longest line nr. {0, 4:d}", nr + 1);
             Console.WriteLine("Program done");
         }
         //------------------------------------------------------------
         /** Finds number of the longest line.
         @param fv - text file name
         @param nr - number of the longest line */
         //------------------------------------------------------------
         static void Read(string fv, out int nr)
         {
             string[] lines = File.ReadAllLines(fv, Encoding.GetEncoding(1257));
             int ilgis = 0;
             nr = 0;
             int nreil = 0;
         foreach (string line in lines)
         {
            if (line.Length > ilgis)
               {
                  ilgis = line.Length;
                   nr = nreil;
               }
              nreil++;
          }
        }
         static void Print(string fv, string fvr, int nr)
         {
             string[] lines = File.ReadAllLines(fv, Encoding.GetEncoding(1257));
             int nreil = 0;
             using (var fr = File.CreateText(fvr))
             {
                 foreach (string line in lines)
                 {
                     if (nr != nreil)
                     {
                         fr.WriteLine(line);
                     }
                     nreil++;
                 }
             }
         }
      }
  }
4

3 に答える 3

0

行を読み取り、空の行と最も長い 10 行を除外し、行を書き込みます。

     string[] lines = File.ReadAllLines(inputFile, Encoding.GetEncoding(1257));
     var filtered = lines
         .Where(line => line.Length > 0) // remove all empty lines
         .Except(lines.OrderByDescending(line => line.Length).Take(10)); // remove 10 longest lines
     File.WriteAllLines(outputFile, filtered);
于 2015-11-11T19:23:27.720 に答える
0

LINQ を使用することをお勧めします。.Max 拡張メソッドを利用して、文字列配列を反復処理します。

string[] lines = { "1", "two", "three" };
var longestLine = lines.Max(line => line.Length);
var revised = lines.Where(line => line.Length < longestLine).ToArray();

修正された変数には、行数が最も長い行を除外した文字列配列が含まれます。

于 2015-11-11T19:19:14.743 に答える
-1

最も長い行を特定し、リストをループして、その長さをすべて削除することができます。空のものも削除するには、String.IsNullOrWhiteSpace に対してテストできます。

(疑似コード) のようなもの:

     foreach (string line in lines)
     {
        if (String.IsNullOrWhiteSpace(line)) 
        {
            lines.Delete(line);
            Continue;
        }
        if (line.Length >= longestLine) // ">=" instead of "==" just to be on the safe side
        {
           lines.Delete(line);
        }
    }
于 2015-11-11T19:18:59.007 に答える