Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将分隔文件的读取从F转换为C_C#_Csv_F#_F# Data - Fatal编程技术网

C# 将分隔文件的读取从F转换为C

C# 将分隔文件的读取从F转换为C,c#,csv,f#,f#-data,C#,Csv,F#,F# Data,我知道这是一个很难回答的问题,但我正试图在F和C之间进行一些比较,并从C程序中借用了一个F脚本,试图从C程序中获得相同的操作,以测试操作和语法。这部分是在一个更大的脚本中,我正在将其转换为一个F程序,该程序对给定数据执行k均值分析 以下是F部分: let elections = let file = @"C:\Users\Deines\Documents\Election2008.txt" let fileAsLines = File.ReadAllLines(f

我知道这是一个很难回答的问题,但我正试图在F和C之间进行一些比较,并从C程序中借用了一个F脚本,试图从C程序中获得相同的操作,以测试操作和语法。这部分是在一个更大的脚本中,我正在将其转换为一个F程序,该程序对给定数据执行k均值分析

以下是F部分:

let elections =
    let file = @"C:\Users\Deines\Documents\Election2008.txt"
    let fileAsLines =
        File.ReadAllLines(file)
            |> Array.map (fun line -> line.Split(','))
    let dataset =
        fileAsLines
        |> Array.map (fun line ->
            [| Convert.ToDouble(line.[1]);
               Convert.ToDouble(line.[2]);
               Convert.ToDouble(line.[3]) |])
    let labels = fileAsLines |> Array.map (fun line -> line.[4])
    dataset, labels 
以下是data Election2008.txt的示例:

AL,32.7990,-86.8073,4447100,REP 
AK,61.3850,-152.2683,626932,REP 
AZ,33.7712,-111.3877,5130632,REP 
AR,34.9513,-92.3809,2673400,REP 
CA,36.1700,-119.7462,33871648,DEM 
CO,39.0646,-105.3272,4301261,DEM 
CT,41.5834,-72.7622,3405565,DEM 
DE,39.3498,-75.5148,783600,DEM 
DC,38.8964,-77.0262,572059,DEM 
FL,27.8333,-81.7170,15982378,DEM 

您可以通过以下方式在C中执行相同的基本操作:

Tuple<double[][], string[]> GetElections()
{
    var file = @"C:\Users\Deines\Documents\Election2008.txt";
    var fileAsLines = File.ReadLines(file).Select(line => line.Split(','));
    var dataset = fileAsLines.Select(line => new[] 
                                             { 
                                                 Convert.ToDouble(line[1]),
                                                 Convert.ToDouble(line[2]),
                                                 Convert.ToDouble(line[3])
                                             }).ToArray();
    var labels = fileAsLines.Select(line => line[4]).ToArray();
    return Tuple.Create(dataset, labels);
}
也就是说,C开发人员很少以这种方式编写。更可能的情况是,您会创建一个自定义类型,用name+值保存结果,并以这种方式读取,即:

class ElectionResult
{
     public ElecationResult(string label, double x, double y, int amount)
     {
         this.Label = label;
         this.Point = new Point(x,y);
         this.Amount = amount;
     }
     string Label { get; private set; }
     Point Location { get; private set; }
     int Amount { get; private set; }
}

IList<ElectionResult> GetElectionResults()
{
    var file = @"C:\Users\Deines\Documents\Election2008.txt";
    var fileAsLines = File.ReadLines(file).Select(line => line.Split(','));

    return fileAsLines.Select(line => new ElectionResult(line[4],
                                                 Convert.ToDouble(line[1]),
                                                 Convert.ToDouble(line[2]),
                                                 Convert.ToInt32(line[3]))
                      .ToList();
}

这使得它对典型的C开发人员更有用,因为没有模式匹配来从元组结果中提取数组。

您可以通过以下方式在C中执行相同的基本操作:

Tuple<double[][], string[]> GetElections()
{
    var file = @"C:\Users\Deines\Documents\Election2008.txt";
    var fileAsLines = File.ReadLines(file).Select(line => line.Split(','));
    var dataset = fileAsLines.Select(line => new[] 
                                             { 
                                                 Convert.ToDouble(line[1]),
                                                 Convert.ToDouble(line[2]),
                                                 Convert.ToDouble(line[3])
                                             }).ToArray();
    var labels = fileAsLines.Select(line => line[4]).ToArray();
    return Tuple.Create(dataset, labels);
}
也就是说,C开发人员很少以这种方式编写。更可能的情况是,您会创建一个自定义类型,用name+值保存结果,并以这种方式读取,即:

class ElectionResult
{
     public ElecationResult(string label, double x, double y, int amount)
     {
         this.Label = label;
         this.Point = new Point(x,y);
         this.Amount = amount;
     }
     string Label { get; private set; }
     Point Location { get; private set; }
     int Amount { get; private set; }
}

IList<ElectionResult> GetElectionResults()
{
    var file = @"C:\Users\Deines\Documents\Election2008.txt";
    var fileAsLines = File.ReadLines(file).Select(line => line.Split(','));

    return fileAsLines.Select(line => new ElectionResult(line[4],
                                                 Convert.ToDouble(line[1]),
                                                 Convert.ToDouble(line[2]),
                                                 Convert.ToInt32(line[3]))
                      .ToList();
}

这使得它对典型的C开发人员更有用,因为没有模式匹配来从元组结果中提取数组。

请了解此网站的操作方式。我们不是来执行通用代码翻译服务的。如果您打算经常使用此类数据,请查看F类型提供程序。有一个专门用于CSV数据。它可以解析输入数据,分析它,并为您生成类型。请与此网站如何运作。我们不是来执行通用代码翻译服务的。如果您打算经常使用此类数据,请查看F类型提供程序。有一个专门用于CSV数据。它可以解析输入数据,分析它,并为你生成类型。你太棒了,谢谢你,这就是我要找的。我会在测试中运行这个,看看我们如何进行。啊,你打败了我。标签选择可能需要一个选择多。虽然@ AlexBeisley不应该-它是每行的一个标签…哦,并且可以考虑EnUM {DEM,ReP,…}但是认真地,为了你自己,只使用FYou是伟大的,谢谢你这是我正在寻找的。我会在测试中运行这个,看看我们如何进行。啊,你打败了我。标签选择可能需要一个选择多。虽然@ AlexBeisley不应该——它是每行的一个标签…哦,并且可以考虑EnUM {DEM,ReP,…},但是认真地,为了你自己,只使用F。