2013-04-17 2 views
0

Я пытаюсь вставить, чтобы вставить ниже данные в качестве моего требования. например: My Excel листа, как это:Как вставить разделенную строку в разные строки C#

id name codes      
    1  a 12 
    2  b 13,14,15 
    3  c 16-19 

мое требование, как это:

id  name codes 
    1  a  12   
    2  b  13 
    2  b  14 
    2  b  15 
    3  c  16 
    3  c  17 
    3  c  18     
    3  c  19 

Я использую C#. может кто-нибудь мне помочь .... thnx заранее.

мой код:

for (rCnt = 2; rCnt <= range.Rows.Count; rCnt++) 
     { 

      cmd = "insert into " + tablename + " values ("; 


      effective_date = VerifyDateTime(range.Cells[rCnt, 7].Value); 
      destination = (string)(range.Cells[rCnt, 1] as Excel.Range).Value2; 
      prefix = range.Cells[rCnt, 3].Value.ToString(); 
      codes = range.Cells[rCnt, 2].Value.ToString(); 
      level = range.Cells[rCnt, 5].Value.ToString(); 
      rate = range.Cells[rCnt, 4].Value.ToString(); 
      change = range.Cells[rCnt, 6].Value.ToString(); 
      company_id = cmbcompanyid.SelectedItem.ToString(); 


      string s = range.Cells[rCnt, 6].Value.ToString(); 
      List<string> l = new List<string>(s.Split(';', '-')); 
      int le = 0; 
      for (le = 0; le <= l.Count; le++) 
      { 




       change = l[le]; 


       cmd = cmd + "'" + destination + "','" + codes + "','" + prefix + "','" + rate + "','" + level + "','" + change + "','" + effective_date + "','" + company_id + "')"; 



       //  cmd = cmd + "'" + destination + "','" + codes + "','" + prefix + "','" + rate + "','" + level + "','" + change + "','" + effective_date + "','" + company_id + "')"; 



       cmd = ReplaceSpecialCharacters(cmd); 

       MySqlCommand sqlCmd = new MySqlCommand(cmd, sqlCon); 
       var i = sqlCmd.ExecuteNonQuery(); 

      } 
     } 
+2

, что вы пробовали до сих пор? – Arshad

+1

Если вы покажете свой код, мы сможем его исправить. –

+0

, когда я пытаюсь вставить данные на основе инструкции вставки split, выполняющей как эта «вставка в значения quickcom» («Aruba Mobile», «297», «0.1817», «0.1817», «No Change», «56», «1899- 00-30 ',' Quickcom ')' Aruba Mobile ',' 297 ',' 0.1817 ',' 0.1817 ',' No Change ',' 57 ',' 1899-00-30 ',' Quickcom ') "как разделите это утверждение как несколько stmnts. – user2265801

ответ

1

Там нет встроенного способа сделать это, но это довольно легко сделать самостоятельно:

  1. разделить строку на ,, чтобы получить отдельные значения
  2. разделил результаты на -, чтобы получить пределы диапазона. Один результат = отсутствие диапазона; два результата = нижний и верхний предел, поэтому испускаем все числа между ними.

Основной способ использования здесь .Split().

Полная реализация остается в качестве упражнения для читателя :-)

EDIT
Обратите внимание, что вы поворачиваете одну оригинальную ценность в потенциально много новых значений. Одной «вставки» недостаточно для обработки одной входной строки.

+0

Я получаю ошибку при максимальном значении intialising как «Строка ввода не в правильном формате». – user2265801

+0

@ user2265801 - тогда вам нужно проверить это максимальное значение, видимо, это не тот номер, который, по вашему мнению, должен быть. –

0

Вам придется разобрать строку, что-то вроде этого:

string[] items = value.Split(","); 
foreach (string item in items) { 
    if (item.Contains("-")) { 
    string[] parts = item.Split("-"); 
    int min = Int32.Parse(parts[0]); 
    int max = Int32.Parse(parts[1]); 
    for (int i = min; i <= max; i++) { 
     // add the value in i to the data 
    } 
    } else { 
    // add the value in item to the data 
    } 
} 
+0

thnxxxx .................. – user2265801

+0

am get error at max value intialising как «Строка ввода не в правильном формате». – user2265801

+0

@ user2265801: Тогда у вас есть тип значения, который не подпадает под ваши примеры. Возможно, что-то вроде '' 42- "', где пустое значение после тире было бы невозможно разобрать как целое. – Guffa

Смежные вопросы