2016-12-14 3 views
-5

В приложение, написанное давным-давно, потребовался другой столбец существующего datagridview с текущим временем сверления. Эти времена происходят из файла, который читает и запускает компьютер. Ниже приведен пример файла.Чтение в список и выбор определенных номеров

Machine Program

Теперь цифры там ищут те, с S. Теперь самое первое число это номер строки. Номер строки также должен быть захвачен, так как время должно совпадать с линией. Поэтому я должен прочитать это в списке, захватить номер строки, а затем связанный «s» номер времени. Я добавлю эти «временные» значения в существующую таблицу, у которой уже есть номера строк, поэтому я добавлю эти «раз» в новый столбец рядом с соответствующим номером строки. Я немного застрял здесь.

Любая помощь приветствуется.

Я знаю, что я могу читать все, что в, как этот

  string f = ("//dnc/WJ/MTI-WJ/" + cboPartProgram.Text); 

     List<string> lines = new List<string>(); 

     using (StreamReader r = new StreamReader(f)) 
     { 
      // Use while != null pattern for loop 
      string line; 
      while ((line = r.ReadLine()) != null) 
      { 
       lines.Add(line); 
      } 
     } 

Но однажды в списке мне нужно игнорировать строки, которые начинаются с апострофа «'», а затем взять только первый номер строки "1, 2 , 3 "и т. Д., Как бы там ни было много, а затем число« s »этой строки.

Так что я остался с:

1 2.75 
2 2.5 
3 2 

... и т.д.

Теперь в базе данных есть таблица программ. с колоннами

Program Line Time 
Program1 1  
Program1 2 
Program1 3 
Program1 4 

и т.д.

Так время будет добавлено к времени столбца существующей таблицы «s». Но время «s», взятое из строки 1,2,3,4 и т. Д., Будет совпадать с столбцом строки таблицы.

Таким образом, конечный конечный результат в этом примере будет

Program Line Time 
Program1 1 2.75 
Program1 2 2.5 
Program1 3 2 

UPDATE

Я не уверен, если отредактированный код для покрытия линии ж/из STIME работать еще и потому, Недавно я столкнулся с проблемой. Существует datagridview, который заполняет столбцы из списка, заполненного из оператора sql. Я добавил столбец для sTime (оказывается, мне может не понадобиться строка #, поэтому вы заметите, что я удалил это), однако мне нужно включить мой цикл из sTime в цикл, который встречается для списка, который также заполняется dgv. Теперь я попытался включить это в несколько разных способов, однако то, что происходит, является либо самым последним sTime, которое используется для всех 80 записей dgv (как показано в примере ниже), или если я перемещаю «}» скобки вокруг некоторых и объединить их, то использует первое sTime для создания 80 записей dgv, затем 2-го sTime для создания 80 записей dgv. Таким образом, вместо 80 записей в dgv с каждым отдельным sTime рядом с ним вы получаете 6 400 записей в dgv 80x80. поэтому я не уверен, как объединить эти 2 для работы.

 var sLines = File.ReadAllLines("//dnc/WJ/MTI-WJ/" + cboPartProgram.Text) 
      .Where(s => !s.StartsWith("'")) 
      .Select(s => new 
      { 
       SValue = Regex.Match(s, "(?<=S)[\\d.]*").Value 
      }) 
      .ToArray(); 

     string lastSValue = ""; 
     foreach (var line in sLines) 
     { 
      string val = line.SValue == string.Empty ? lastSValue : line.SValue; 
      lastSValue = val; 
     } 



      foreach (WjDwellOffsets offset in dwellTimes) 
      { 
       origionalDwellOffsets.Add(offset.dwellOffset); 

       dgvDwellTimes.Rows.Add(new object[] { offset.positionId, lastSValue, offset.dwellOffset, 0, offset.dwellOffset, "Update", (offset.dateTime > new DateTime(1900, 1, 1)) ? offset.dateTime.ToString() : "" }); 
       DataGridViewDisableButtonCell btnCell = ((DataGridViewDisableButtonCell)dgvDwellTimes.Rows[dgvDwellTimes.Rows.Count - 1].Cells[5]); 
       btnCell.Enabled = false; 
      } 
+0

В чем вопрос? Где ваш код? Вы пробовали * что-нибудь? * – Abion47

+0

, если вы пробовали что-нибудь, пожалуйста, напишите код ... –

+0

Ну, вот вопрос, как начать действительно. Это не похоже на то, что я ничего не имею, кроме как просто показывает, как я выгляжу так, как я чувствую. Я не уверен, должен ли я читать все в списке? Или, если я должен прочитать только номер строки, тогда прочитайте номер «s» в? Обычно я не работаю с файлами/кодом, поэтому я не знаю, с чего начать. Человек, который работал над этим материалом, ушел, и он упал на моем столе. – Lee

ответ

1

Если единственным условием является сохранение линий, которые имеют «S» в них, и если выборка данных указывает на общую картину линии, то это довольно просто (и вы можете использовать Regex для фильтрации результатов):

var sLines = File.ReadAllLines("filepath.txt") 
       .Where(s => !s.StartsWith("'") && s.Contains("S")) 
       .Select(s => new 
       { 
        LineNumber = Regex.Match(s, "^\\d*").Value, 
        SValue = Regex.Match(s, "(?<=S)[\\d.]*").Value 
       }) 
       .ToArray(); 

// Use like this 
foreach (var line in sLines) 
{ 
    string num = line.LineNumber; 
    string val = line.SValue; 
} 

Для поддержания все линии и просто соответствующую информацию о некоторых, этот метод может быть немного подправили, но это также потребует немного какой-либо внешней обработки.

var sLines = File.ReadAllLines("filepath.txt") 
       .Where(s => !s.StartsWith("'")) 
       .Select(s => new 
       { 
        LineNumber = Regex.Match(s, "^\\d*").Value, 
        SValue = Regex.Match(s, "(?<=S)[\\d.]*").Value 
       }) 
       .ToArray(); 

// Use like this 
string lastSValue = ""; 
foreach (var line in sLines) 
{ 
    string num = line.LineNumber; 
    string val = line.SValue == string.Empty ? lastSValue : line.SValue; 

    // Do the stuff 

    lastSValue = val; 
} 
+0

Я добавил дополнительную информацию, чтобы показать, каким должен быть мой конечный результат. – Lee

+0

@Lee См. Новое редактирование. – Abion47

+0

Я собираюсь попробовать это через мгновение, однако, просто быстро взглянув, это игнорирует линии с апострофом? Строки с апострофом прокомментировали строки, я не хочу их. Кроме того, мне нужно будет использовать косую черту «// d» в качестве примера или, возможно, мне не хватает класса. – Lee

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