返回列表 發帖

C# 7 509 尋找及排序資料

TQC+ 物件導向程式語言
最新一次更新時間:2024-01-05 17:44:52

1. 題目說明:
請新增一個主控台應用程式,加入C:\ANS.CSF\CS05資料夾中的CSD05.cs進行編寫。依下列題意進行作答:輸入指定數字,在檔案中尋找及排序資料,再將處理後資料寫入至新檔案,使輸出值符合題意要求。檔案名稱請另存新檔為CSA05.cs,儲存於C:\ANS.CSF\CS05資料夾,再進行評分。
請使用正斜線(/)作為檔案路徑的分隔符號。

2. 設計說明:
請撰寫程式,讀取read.txt檔案內容,內含22位學生的資料,第一個欄位代表序號,目前檔案中沒有按照序號排列。
使用者輸入一個正整數n(n≧5),從read.txt檔案內容中,搜尋出序號1-n的學生資料,按序號由小而大寫入write.txt檔案中,檔案寫入完成後要關閉。若輸入文字或不在指定範圍的數字,請輸出【error】。
若該數超出總筆數,則該數指定為總筆數。

3. 輸入輸出:
輸入說明
一個正整數n(n≧5),若該數超出總筆數,則該數指定為總筆數

輸出說明
將取得的學生資料寫入write.txt檔案中

範例輸入1
5
範例輸出1
Alt text

範例輸入2
100
範例輸出2
Alt text

4. 評分項目:
(1) 符合設計說明輸出正確格式配分        20
May

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.IO;

  5. namespace CSA05
  6. {
  7.     class CSA05
  8.     {
  9.         public struct Record
  10.         {
  11.             public int Num;
  12.             public string Line;
  13.             public Record(int num, string line)
  14.             {
  15.                 this.Num = num;
  16.                 this.Line = line;
  17.             }
  18.             public override string ToString()
  19.             {
  20.                 return String.Format("[{0}] {1}", this.Num, this.Line);
  21.             }
  22.         };
  23.         static void Main(string[] args)
  24.         {
  25.             try
  26.             {
  27.                 int row = Convert.ToInt32(Console.ReadLine());
  28.                 if (row < 5) { throw new Exception(); }
  29.                 //TODO
  30.                 StreamReader sr1 = new StreamReader("read.txt");
  31.                 string results = getStr(sr1, row);
  32.                 System.IO.File.WriteAllText("write.txt", results);
  33.             }
  34.             catch
  35.             {
  36.                 Console.Write("error");
  37.             }
  38.             Console.ReadKey();
  39.         }
  40.         static string getStr(StreamReader sr1, int number)
  41.         {
  42.             sr1.BaseStream.Position = 0;

  43.             //TODO
  44.             string line;
  45.             string[] columns;
  46.             List<Record> dataset = new List<Record>();

  47.             while ((line = sr1.ReadLine()) != null)
  48.             {
  49.                 if (line.Trim().Length == 0)
  50.                 {
  51.                     continue; // skip the empty line
  52.                 }
  53.                 columns = line.Split(',');
  54.                 Record record = new Record(int.Parse(columns[0]), line);
  55.                 dataset.Add(record);
  56.                
  57.             }
  58.             
  59.             dataset.Sort((record1, record2) => {
  60.                 return record1.Num - record2.Num;
  61.              });

  62.             StringBuilder results = new StringBuilder();
  63.             int count = Math.Min(number, dataset.Count);
  64.             for (int i = 0; i < count; i++)
  65.             {
  66.                 Record r = dataset[i];
  67.                 results.Append(r.Line);
  68.                 results.Append("\n");
  69.             }
  70.             return results.ToString();
  71.         }


  72.     }
  73. }
複製代碼
May

TOP

返回列表