簡體   English   中英

將字符串數組轉換為雙精度數組

[英]Converting string array to double array

我有一個帶有很多數字的文件,每個索引都有4個子數字

no1 no2 no3 no4 
no1 no2 no3 no4 
no1 no2 no3 no4 

該文件是cvs文件,但是我需要將數字讀入數組中,類型為double類型並進行插值,因此我需要遍歷表。

到現在為止,我仍然遇到這個問題,但是我還停留在上面,還不太了解如何將文件轉換為雙精度值,因此我可以對其進行計算。 有什么建議嗎?

var filelines = from line in file.Skip(5)
                select line.Split(';');

您可以分割線,將每個部分解析為十進制,然后使用SelectMany展平結果:

file.Skip(5).SelectMany(line => line.Split(';').Select(decimal.Parse)).ToArray()

如果要double[][] ,那么每行一個數組:

double d;
double[][] lineValues = file.Skip(5)
    .Select(l => l.Split(new[]{';'}, StringSplitOptions.RemoveEmptyEntries))
    .Where(arr => arr.Length == 4 && arr.All(s => double.TryParse(s, out d)))
    .Select(arr => arr.Select(double.Parse).ToArray())
    .ToArray();

如果每行中都有某些值,例如您的cvs數據存儲區具有特定數量的字段,那么明智且強類型的舉動是首先為數據存儲區建立一個模型,根據您提供的信息, :

public class MyCVSModel {
    public Double Number1 {get; set;} 
    public Double Number2 {get; set;} 
    public Double Number3 {get; set;} 
    public Double Number4 {get; set;} 
}

現在你可以:

public static IEnumerable<MyCVSModel> Converion(String FileName){
     var AllLines = System.IO.ReadAllLines(FileName);
     foreach(var i in AllLines){
        var Temp = i.Split('\t'); // Or any other delimiter
        if (Temp.Lenght >= 4){ // 4 is because you have 4 values in a row
           List<Double> TryConversion = new List<Double>();
           foreach(var x in Temp) {
              if (IsDouble(x))
                 TryConversion.Add(Convert.ToDouble(x));
              else
                 TryConversion.Add(0);
           }
           MyCVSModel Model = new MyCVSModel();
           Model.Number1 = TryConversion[0];
           Model.Number2 = TryConversion[1];
           Model.Number3 = TryConversion[2];
           Model.Number4 = TryConversion[3];
           yield return Model;
        }
     }
}

public static Boolean IsDouble(String Value) {
    Regex R = new Regex(@"^[0-9]*(?:\.[0-9]*)?$");
    return R.IsMatch(Value);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM