C#,2后分开';他在同一条线上

C#,2后分开';他在同一条线上,c#,visual-studio-2010,csv,streamreader,streamwriter,C#,Visual Studio 2010,Csv,Streamreader,Streamwriter,我正在生成从/到坐标点的列表,以及这些点之间的距离/时间。 如图所示:最终产品的标题如下所示 writer.WriteLine("fromX" + ";" + "fromY" + ";" + "toX" + ";" + "toY" + ";" + "distance" + ";" + "time"); 逐点计算的过程如下: A -> A A -> B A -> C .. B -> A B -> B B -> C 等 距离和时间按计算,并位于单独的文件中。但

我正在生成从/到坐标点的列表,以及这些点之间的距离/时间。 如图所示:最终产品的标题如下所示

writer.WriteLine("fromX" + ";" + "fromY" + ";" + "toX" + ";" + "toY" + ";" + "distance" + ";" + "time");
逐点计算的过程如下:

A -> A
A -> B
A -> C
..
B -> A
B -> B
B -> C

距离和时间按计算,并位于单独的文件中。但是,此文件中的每一行由相同起点和每个端点之间的距离/时间组成,例如:

0;0;11289;950;9732;899;9886;725;32893;2195;38010;2478;46188;3330;
目标是在最终产品中使用以下符号:

point A;point A;0;0
point A;point B;11289;950
point A;point C;9732;899
等等

如您所见,我需要以每2秒的值分割距离+时间线

目前,我有以下代码:

    List<string> locationsList = new List<string>();
    using (var reader = new StreamReader(File.OpenRead("locations.csv")))
    {
        while (reader.Peek() != -1)
            locationsList.Add(reader.ReadLine());
    }

    List<string> distanceTime = new List<string>();
    using (var reader = new StreamReader(File.OpenRead("distance.csv")))
    {
        while (reader.Peek() != -1)
            distanceTime.Add(reader.ReadLine());
    }


    using (var writer = new System.IO.StreamWriter("Output.csv"))
    {
        writer.WriteLine("fromX" + ";" + "fromY" + ";" + "toX" + ";" + "toY" + "distance" + ";" + "time")

        foreach (var fromLine in locationsList)
        {
            splitFrom = fromLine.Split(';');

            fromX = splitFrom[0].Trim();
            fromY = splitFrom[1].Trim();

            foreach (var toLine in locationsList)
            {
                splitTo = toLine.Split(';');

                toX = splitTo[0].Trim();
                toY = splitTo[1].Trim();

                writer.WriteLine(fromX + ";" + fromY + ";" + toX + ";" + toY);
            }

        }

        MessageBox.Show("Done");
    }
列表位置列表=新列表();
使用(var reader=newstreamreader(File.OpenRead(“locations.csv”))
{
while(reader.Peek()!=-1)
locationsList.Add(reader.ReadLine());
}
列表距离时间=新列表();
使用(var reader=newstreamreader(File.OpenRead(“distance.csv”))
{
while(reader.Peek()!=-1)
Add(reader.ReadLine());
}
使用(var writer=new System.IO.StreamWriter(“Output.csv”))
{
writer.WriteLine(“fromX”+;“+”fromY“+”;“+”toX“+”;“+”玩具“+”距离“+”;“+”时间”)
foreach(位置列表中的var fromLine)
{
splitFrom=fromLine.Split(“;”);
fromX=splitFrom[0]。Trim();
fromY=splitFrom[1]。Trim();
foreach(位置列表中的var toLine)
{
splitTo=toLine.Split(“;”);
toX=splitTo[0]。Trim();
toY=splitTo[1]。Trim();
WriteLine(fromX+“;“+fromY+”;“+toX+”;“+toY”);
}
}
MessageBox.Show(“完成”);
}
这可能需要使用foreach循环进行扩展,foreach循环从distanceTime列表中读取一行,将其拆分,获取前2个值,并将它们与起点和终点一起写入。 问题是,我不知道在每2个值之后如何分割。 你有什么建议吗?

使用%运算符:

        string coords = "0;0;11289;950;9732;899;9886;725;32893;2195;38010;2478;46188;3330;";
        string[] values = coords.Split(';');
        for(int val=0; val<values.Length; val++)
        {
            int coord;
            if(val % 2 == 0)
            {
                //this will give you access to every second value
                 int.TryParse(values[val], out coord);
                Console.WriteLine(coord.ToString());
            }
        }
string-coords=“0;0;11289;950;9732;899;9886;725;32893;2195;38010;2478;46188;3330;”;
字符串[]值=coords.Split(“;”);
对于(int-val=0;val

使用%运算符:

        string coords = "0;0;11289;950;9732;899;9886;725;32893;2195;38010;2478;46188;3330;";
        string[] values = coords.Split(';');
        for(int val=0; val<values.Length; val++)
        {
            int coord;
            if(val % 2 == 0)
            {
                //this will give you access to every second value
                 int.TryParse(values[val], out coord);
                Console.WriteLine(coord.ToString());
            }
        }
string-coords=“0;0;11289;950;9732;899;9886;725;32893;2195;38010;2478;46188;3330;”;
字符串[]值=coords.Split(“;”);

对于(int val=0;val您实际上不需要在每秒钟“;”进行拆分,您只需要稍微不同的for循环:

using System;

class Program {
    static void Main(string[] args) {
        string line = "0;0;11289;950;9732;899;9886;725;32893;2195;38010;2478;46188;3330;";
        string[] values = line.Split(';');
        char pointName = 'A';
        for (int i = 0; i < values.Length - 1; i += 2) {
            string endProductLine = string.Format("point A;point {0};{1};{2}", pointName, values[i], values[i + 1]);
            Console.WriteLine(endProductLine);
            pointName++;
        }
    }
}
使用系统;
班级计划{
静态void Main(字符串[]参数){
字符串行=“0;0;11289;950;9732;899;9886;725;32893;2195;38010;2478;46188;3330;”;
string[]value=line.Split(“;”);
char pointName='A';
对于(int i=0;i
您并不需要在每一秒“;”上进行拆分,您只需要一个稍微不同的for循环:

using System;

class Program {
    static void Main(string[] args) {
        string line = "0;0;11289;950;9732;899;9886;725;32893;2195;38010;2478;46188;3330;";
        string[] values = line.Split(';');
        char pointName = 'A';
        for (int i = 0; i < values.Length - 1; i += 2) {
            string endProductLine = string.Format("point A;point {0};{1};{2}", pointName, values[i], values[i + 1]);
            Console.WriteLine(endProductLine);
            pointName++;
        }
    }
}
使用系统;
班级计划{
静态void Main(字符串[]参数){
字符串行=“0;0;11289;950;9732;899;9886;725;32893;2195;38010;2478;46188;3330;”;
string[]value=line.Split(“;”);
char pointName='A';
对于(int i=0;i
这里的问题是,我必须首先将每行拆分为500个字符串,然后才能确定哪些字符串是2对。我想在拆分行之前确定这一点。在您的示例中,
值列表是什么?
val%2
将在
val
为偶数时为真,而不是每秒钟的值…@PaoloTedesco是正确的-当
val
为偶数时,这将只进入
if
语句的主体,因此如果
仅包含奇数,则
if
的主体将永远不会执行。这里的问题是,我必须首先将每行拆分为500个字符串,然后才能确定哪个字符串s是一对2。我想在拆分行之前确定这一点。在您的示例中,
values
列表是什么?
val%2
将在
val
为偶数时为真,而不是每秒钟的值…@PaoloTedesco是正确的-当
val
为偶数时,这将只进入
if
语句的主体,因此如果
仅包含奇数,则
if
的主体将永远不会执行。