我正在尋找一種方法,將文本檔案中的資訊傳遞給一個建構式,這樣我就可以創建一個該建構式物件的陣列,陣列中的每個物件都持有來自文本檔案行的資訊。
建構式的格式如下:
public Member(string name, int number, decimal rate, double hours)
而文本檔案的格式為:
Eric Wallace, 352456, 15.88, 32.20。
克拉拉-凱爾,233424,35.88,18.76。
達倫-普萊斯,656795,27.82,20.25。
等等。
并且每個成員將進入一個陣列。
最后,我需要的是將每一行分割開來并傳遞給建構式,使每一行成為陣列中自己的成員,這樣它們就可以在一個回圈中一個接一個地輸出或作為行單獨呼叫。
uj5u.com熱心網友回復:
我的方法將從制作一個介面開始,所有我的 "可構建 "資料型別都將實作這個介面。我希望我的資料模型能夠決定它們是如何從一個字串中構建的:
public interface IBuildableFromString
{
public IBuildableFromString Build(string Str, string seperator = ",")。
}
然后讓Member像這樣實作:
public class Member : IBuildableFromString
{
public string Name { get; set; }
public int Number { get; set; }
public decimal Rate { get; set; }
public double Hours { get; set; }
public Member() { }
public Member(string name。int number, decimal rate, double hours)
{
名稱 = 名稱。
Number = 數字。
速率 = 速率。
小時 = 小時。
}
public IBuildableFromString Build(string Str, string seperator = ",")?
{
try
{
string[] parts = str.Split(sepperator);
return new Member(parts[0], int.Parse(parts[1] )。)
decimal.Parse(parts[2]), double.Parse(parts[3])。
}
捕獲
{
return null。
}
}
}
然后是讀取檔案和建立物件資料的方法:
public static T[] BuildData< T>(string filePath) where T :
IBuildableFromString, new()
{
List<T> dataObjects = new List<T> ();
string[] lines = File.ReadAllLines(filePath)。
foreach (string line in line)
{
if (! String.IsNullOrEmpty(line))
{
var newMember = new T().Build(line)。
if (newMember != null)
dataObjects.Add((T)newMember)。
}
}
return dataObjects.ToArray()。
}
最后,這樣呼叫上面的函式:
static void Main(string[] args)
{
var data = BuildData<Member>(@"path_to_your_file.txt") 。
}
它可能需要更多的錯誤檢查,但這是我能想到的最可擴展的方式。干杯!
uj5u.com熱心網友回復:
只要你的檔案是格式良好的,那么這就可以了:
只要你的檔案是格式良好的,那么這就可以了。
Member[] members =
讀取線
.ReadLines(@"mytextfile.txt"/span>)
.Select(x => x.Split(',').Select(y => y.Trim()).ToArray()
.Select(x => new Member(x[0], int。 Parse(x[1]), decimal. Parse(x[2]), double.Parse(x[3] ))
.ToArray()。
uj5u.com熱心網友回復:
我將使用StreamReader來讀取txt檔案,然后使用replace來消除空格,然后使用split來分割資料。
讓會員像這樣實作:
public class Member {
public string Name { get; set; }
public int Number { get; set; }
public decimal Rate { get; set; }
public double Hours { get; set; }
public Member(string name, int number, decimal rate, double hours) {
名稱 = 名稱。
Number = 數字。
速率 = 速率。
小時 = 小時。
}
}
像這樣呼叫資料:
foreach (var item in members) {
Console.WriteLine($"{ item.Name} { item. Number} { item.Rate} { item.Hours}")。)
總的代碼:
using System;
using System.Collections.Generic;
using System.IO.Generic;
namespace ConsoleApp2 {
class Program {
static void Main(string[] args) {
List<Member> members = new List<Member>()。
try {
//創建一個StreamReader的實體來從檔案中讀取。
// using陳述句也關閉了StreamReader。
using (StreamReader sr = new StreamReader(@"C:demode.txt" )) {
string line;
//從檔案中讀取并顯示行,直到結束。
/span>檔案的結束。
while ((line = sr.ReadLine()) != null) {
line = line.Replace(" ", " ")。
string[] tmp = line.Split(', ');
string name = tmp[0] 。
int number = Convert.ToInt32(tmp[1] )。
decimal rate = Convert.ToDecimal(tmp[2])。
double hours = Convert.ToDouble(tmp[3] )。)
members.Add(new Member(name, number, rate, hours))。
}
}
} catch (Exception e) {
//讓用戶知道出了什么問題。
Console.WriteLine("檔案無法被讀取:")。
Console.WriteLine(e.Message)。
}
foreach (var item in members) {
Console.WriteLine($"{ item.Name} { item. Number} { item.Rate} { item.Hours}")。)
}
Console.ReadLine()。
}
public class Member {
public string Name { get; set; }
public int Number { get; set; }
public decimal Rate { get; set; }
public double Hours { get; set; }
public Member(string name, int number, decimal rate, double hours) {
名稱 = 名稱。
Number = 數字。
速率 = 速率。
小時 = 小時。
}
}
}
}
如果你有問題,請添加評論。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/332585.html
標籤:


