将2个文本框内容与分隔符合并

时间:2014-05-05 22:05:53

标签: c# file textbox delimiter combiners

我有点问题。假设我有两个文本框,左边有一个文本框:

Win
Lose
Hello
Goodbye

右边一个,有这个信息:

One
Two
Three
Four

现在,按下按钮,我想将这两个文本框与冒号分隔结合起来,所以输出如下:

Win:One
Lose:Two
Hello:Three
Goodbye:Four

知道我怎么能做到这一点?到目前为止,我没有尝试过任何工作。这是我目前的代码,抱歉。我不想让你为我做我的工作,我只是相当困惑:

string path = Directory.GetCurrentDirectory() + @"\Randomized_List.txt";
string s = "";
StringBuilder sb = new StringBuilder();
StreamReader sr1 = new StreamReader("Randomized_UserList.txt");
string line = sr1.ReadLine();
while ((s = line) != null)
{
   var lineOutput = line+":";
   Console.WriteLine(lineOutput);
   sb.Append(lineOutput);
}
sr1.Close();
Console.WriteLine();
StreamWriter sw1 = File.AppendText(path);
sw1.Write(sb);
sw1.Close();

5 个答案:

答案 0 :(得分:3)

这是一种可能适合您的不同方法。

您可以通过拆分换行符来生成几个字符串数组。

var tb1 = textBox1.Text.Split(new[] { Environment.NewLine }, StringSplitOptions.None);
var tb2 = textBox2.Text.Split(new[] { Environment.NewLine }, StringSplitOptions.None);

然后使用LINQ的Zip()方法将它们组合成一个新列表。合并每个列表中的第一个元素,然后合并每个列表中的第二个元素,依此类推......

var combined = tb1.Zip(tb2, (s1, s2) => string.Format("{0}:{1}", s1, s2));

为了使其正常工作,TextBox es必须具有相同的行数。如果它们不同,则Zip无法正常工作。

答案 1 :(得分:1)

下面的代码演示了一种分割字符串然后连接它们的方法。我起初误解了这个问题。 :)

string left = string.Format("Win{0}Lose{0}Hello{0}Goodbye", Environment.NewLine);
string right = string.Format("One{0}Two{0}Three{0}Four", Environment.NewLine);
string[] leftSplit = left.Split(new[] { Environment.NewLine }, StringSplitOptions.None);
string[] rightSplit = right.Split(new[] { Environment.NewLine }, StringSplitOptions.None);

string output = "";
if (leftSplit.Length == rightSplit.Length)
{
    for (int i = 0; i < leftSplit.Length; i++)
    {
        output += leftSplit[i] + ":" + rightSplit[i] + Environment.NewLine;
    }
}

答案 2 :(得分:1)

如果这是一个winforms应用程序,您可以利用Lines属性执行以下操作。

var tb1 = this.textBox1.Lines.Select((line, index) => new { Line = line, Index = index });
var tb2 = this.textBox2.Lines.Select((line, index) => new { Line = line, Index = index });

var q = from t1 in tb1
        join t2 in tb2 on t1.Index equals t2.Index
        select string.Format("{0}:{1}", t1.Line, t2.Line);

this.textBox3.Lines = q.ToArray();

答案 3 :(得分:0)

您可以按以下方式按换行符拆分字符串:

string[] lines = theString.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);

我认为你应该像这样拆分两个TextBox的内容,之后(如果生成的arrrays大小相同),连接相应的(第一个数组中的第一个字符串和第二个数组的第一个字符串) ,第一个数组中的第二个字符串,第二个数组中的第二个字符串,等等。)字符串之间用分号。

例如:

var lines1 = textBox1.Text.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
var lines2 = textBox2.Text.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
string result = String.Empty;
if (lines1.Length == lines2.Length)
{
   for(int i=0; i< lines1.Length; ++i)
   {
       result += lines1[i] + ":" + lines2[i] + Environment.NewLine;
   }
}

答案 4 :(得分:0)

textbox1.Text.Split("\n").Zip(texbox2.Text.Split("\n"),(s1,s2)=>s1+":"+s2).Aggregate("",(a,s)=>a+s+"\n")

Split方法将代表它调用的字符串转换为字符串数组,方法是将其与参数中的字符分开(在本例中为新行)。

在此动作中,我们必须使用textbox1和textbox2中的行数组。

现在我们使用任何IEnumerable的Zip方法(这是一种扩展方法,因为Aggregate方法是)。 Zip方法的结果是一个IEnumerable,它包含从我们在参数中传递的函数提到的两个IEnumerables合并的元素,在这种情况下它是(s1,s2)=&gt; s1 +&#34;:&#34 ; + S2

此时我们有一些IEnumerable将元素作为两个文本框中的合并行。我们现在需要做的是将它们合并为一个带有Aggregate函数的字符串。它是一个函数,用于构造以第一个参数开始的结果,并为每个元素获取最后一步的结果并返回新值,该值是前一个结果和当前元素的某种聚合