如何从txt filec中剪切多个字符串#

时间:2017-03-23 09:53:20

标签: c# string file split cycle

我为这个问题尝试了很多可能的解决方案,但它似乎永远不会起作用。我的问题如下:我有一个包含多行的txt文件。每行都有类似的内容:

xxxxx yyyyyy
xxxxx yyyyyy
xxxxx yyyyyy
xxxxx yyyyyy
...

我希望将xxxxx和另一个数组yyyyy存储在一个字符串数组中,对于txt文件中的每一行,类似

string[] x;
string[] y;

string[1] x = xxxxx; // the x from the first line of the txt
string[2] x = xxxxx; // the x from the second line of the txt
string[3] x = xxxxx; // the x from the third line of the txt

...

string[] y相同;

......但我不知道如何......

如果有人告诉我如何为这个问题制定循环,我将非常感激。

3 个答案:

答案 0 :(得分:3)

您可以使用linq:

string test = "xxxxx yyyyyy xxxxx yyyyyy xxxxx yyyyyy xxxxx yyyyyy";
string[] testarray = test.Split(' ');
string[] arrayx= testarray.Where((c, i) => i % 2 == 0).ToArray<string>();
string[] arrayy = testarray.Where((c, i) => i % 2 != 0).ToArray<string>();

基本上,这段代码用空格分割字符串,然后将偶数字符串放在一个数组中,将奇数字符串放在另一个数组中。

修改

你在评论中说你不理解这一点:Where((c, i) => i % 2 == 0).它的作用是取每个字符串的位置(i)并用2做一个mod。这意味着它将位置除以2并检查剩余是否等于0.这是一个数字奇数或偶数的方法。

<强> EDIT2

我的第一个答案仅适用于一行。对于几个(因为您的输入源是一个包含多行的文件),您需要进行foreach循环。或者您可以执行类似下一个示例代码的操作:读取所有行,将它们连接到单个字符串中,然后在结果上运行显式代码:

string[] file=File.ReadAllLines(@"yourfile.txt");
string allLines = string.Join(" ", file); //this joins all the lines into one
//Alternate way of joining the lines
//string allLines=file.Aggregate((i, j) => i + " " + j); 
string[] testarray = allLines.Split(' ');
string[] arrayx= testarray.Where((c, i) => i % 2 == 0).ToArray<string>();
string[] arrayy = testarray.Where((c, i) => i % 2 != 0).ToArray<string>();

答案 1 :(得分:0)

如果我理解你的问题,xxxxx和yyyyyy会重复出现,以防万一这样的话11111 222222 11111 222222 11111 222222 它们之间有一个空间,所以

1. you may split the line one by one within a loop
2. use ' ' as delimiter when split the line
3. use a counter to differentiate whether the string is odd or even and store them separately within another loop

答案 2 :(得分:0)

如果我理解正确,你有多行,每行有两个字符串。然后,这是一个使用普通旧的答案:

    public static void Main()
    {
        // This is just an example. In your case you would read the text from a file
        const string text = @"x y
xx yy
xxx yyy";
        var lines = text.Split(new[]{'\n', '\r'}, StringSplitOptions.RemoveEmptyEntries);
        var xs = new string[lines.Length];
        var ys = new string[lines.Length];

        for(int i = 0; i < lines.Length; i++) 
        {
            var parts = lines[i].Split(' ');
            xs[i] = parts[0];
            ys[i] = parts[1];
        } 
    }