В вашем коде есть несколько странностей. В частности, следующая строка внутри цикла while:
string[] l = new string[1000];
Это создаст массив строк из 1000 элементов для каждого раунда цикла while. Позже вы будете использовать только элемент i
в этом массиве, оставляя 999 других элементов неиспользованными. Судя по остальной части кода, вы можете просто использовать sd[i]
.
Кроме того, я предполагаю, что textBox1, textBox2 и textBox3 никогда не должны содержать одно и то же значение; если значение входит в один из них, оно никогда не должно переходить в другой из них (кроме textBox4, который, кажется, собирает все данные). Кроме того, нет необходимости продолжать тестировать значение, как только будет найдено правильное текстовое поле.
Наконец, следующая строка внутри цикла while:
char[] seps = { ' ' };
Это создаст идентичный массив символов для каждого раунда в цикле while; Вы можете переместить это за пределы цикла и просто использовать тот же массив.
Что касается определения даты; Исходя из представленных вами данных, дата - это единственные данные, которые содержат символ /, поэтому вы можете проверить это, а не длину.
Вы можете попробовать следующее:
StreamReader rr = File.OpenText("C:/1.txt");
string input = null;
char[] seps = { ' ' };
while ((input = rr.ReadLine()) != null)
{
string[] sd = input.Split(seps, StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < sd.Length; i++)
{
textBox4.AppendText(sd[i] + "\r\n");
if (sd[i].Contains("/"))
{
// The string contains a / character; assume it is a date
textBox1.AppendText(sd[i] + "\r\n");
}
else if (sd[i].Length == 8)
{
//The time is of 8 characters in length. ex:00:04:09
textBox2.AppendText(sd[i] + "\r\n");
}
else if (sd[i].Length == 11)
{
//The phone is of 11 characters in length. ex:9480455302#
textBox3.AppendText(sd[i] + "\r\n");
}
}
}