2016-07-15 118 views
0

我有两个字符串/文本文件:“1.dll”和“1a.dll” - 1.dll包含“订单ID”和“cartID”(用回车符“/ n”分隔) - 1a.dll是数据库witdh“id”和“名称”(用回车'/ n'分隔)C#中的字符串数组拆分

我将字符串拆分为字符串数组。然后我用两个字符串分隔每个数组字符串。一个是偶数位置,另一个是奇数位置。 分割这两个文件后,我有4个数组字符串,我正在向4个ListBoxes显示。 - 来自1.dll的2个数组正在显示,因为它们应该是 - 来自1a.dll的2个数组缺少一些值。 Here is the screenshot with problem

//Load and split "1.dll" > create 2 array strings. orderID=odd # position and cartID=even # position 
     string a = File.ReadAllText(@"order/1.dll"); 
     string[] aa = a.Split('\n'); 
     aa = aa.Select(s => (s ?? "").Trim()).ToArray(); 
     string[] orderID = new string[aa.Length]; 
     string[] cartID = new string[aa.Length]; 

     int Dial1 = 0; 
     int Dial2 = 0; 
     for (int i = 0; i < aa.Length; i++) 
     { 
      if (i % 2 == 0) 
      { 
       orderID[Dial1] = aa[i]; 
       Dial1++; 
      } 
      else 
      { 
       cartID[Dial2] = aa[i]; 
       Dial2++; 
      } 
     } 
     for (int j = 0; j < aa.Length/2; j++) 
     { 
      AddToCartList.Items.Add(cartID[j]); 
      OrderIDList.Items.Add(orderID[j]); 
     } 
//Load and split "1a.dll" > create 2 array strings. id=odd # position and game=even # position 

     string b = File.ReadAllText(@"order/1a.dll"); 
     string[] bb = b.Split('\n'); 
     bb = bb.Select(s => (s ?? "").Trim()).ToArray(); 
     string[] id = new string[bb.Length/2]; 
     id = id.Select(s => (s ?? "").Trim()).ToArray(); 
     string[] name = new string[bb.Length/2]; 
     name = name.Select(s => (s ?? "").Trim()).ToArray(); 
     string combindedString = string.Join("\n", bb.ToArray()); 
     MessageBox.Show(combindedString); 

     int Dial3 = 0; 
     int Dial4 = 0; 
     for (int i = 0; i < bb.Length/2; i++) 
     { 
      if (i % 2 == 0) 
      { 
       id[Dial3] = bb[i]; 
       Dial3++; 
      } 
      else 
      { 
       name[Dial4] = bb[i]; 
       Dial4++; 
      } 
     } 
     for (int j = 0; j < bb.Length/2; j++) 
     { 
      IDlist.Items.Add(id[j]); 
      nameList.Items.Add(name[j]); 
     } 




     for (int i = 0; i < id.Length; i++) 
     { 
      if (orderID[0] == id[i]) 
      { 
       textBox1.Text = name[0]; 
      } 
      if (orderID[2] == id[i]) 
      { 
       textBox2.Text = name[1]; 
      } 
      if (orderID[2] == id[i]) 
      { 
       textBox3.Text = name[1]; 
      } 
     } 
+0

我看到的一件事就是你有2个if(orderID [2] == id [i])'行,我假设你想要说'if(orderID [1] == id [i ])'而不是,也可能是您在同一代码块(发布代码中最后一个for循环)中使用'name [1]'作为'name [2]'的一个名称。 – Quantic

回答

1

在第二循环运行循环的BB阵列

for (int i = 0; i < bb.Length/2; i++) 

的内容的一半,这应该是

for (int i = 0; i < bb.Length; i++) 

但是从这段代码可以使用被改变了很多开通用List<T>而不是创建许多临时数组,

例如第一环路可以写成

// ReadAllLines already returns your text file splitted at newlines 
string[] aa = File.ReadAllLines(@"order/1.dll"); 

// With lists you don't need to create a fixed size array in advance... 
List<string> orders = new List<string>(); 
List<string> carts = new List<string>(); 

// Your array could be iterated two items at times 
// Of course here a check for even number of items should be 
// added here.... 
for (int i = 0; i < aa.Length; i += 2) 
{ 
    orders.Add(aa[i]); 
    carts.Add(aa[i+1]); 
} 
// The collections have the possibility to add a range of items 
// without you writing a loop 
AddToCartList.Items.AddRange(carts.ToArray()); 
OrderIDList.Items.AddRange(orders.ToArray()); 
+0

完美的作品! 我会用1a.dll来做同样的事情。 在这种情况下你有一个建议也许如何与列表做到这一点: '为(INT I = 0;我 qretsar

+0

这部分对我来说不是很清楚。你有三个文本框,但我不明白设置Text属性的规则。然而,列表可以用作数组,因为它们是数组,因此代码不需要仅仅因为有列表而不是数组而改变。 – Steve

0

错是这里:

int Dial3 = 0; 
int Dial4 = 0; 
for (int i = 0; i < bb.Length/2; i++) 

长度应该是不bb.Length/2;

+0

我只想删除问题。这不是对未来其他人有价值的东西。我不是主持人。这只是一个意见。 – Paparazzi