2014-01-21 7 views
-1

У меня есть текстовый файл, который должен содержать 100 строк. Каждая строка идентифицируется идентификатором (001 002 003 и т. Д.). Но иногда некоторые линии пропускают. Например: в некоторых текстовых файлах может быть только 93 строки. Я проверяю недостающие строки.Печать значений из массива C#

Это мой код для этого.

bool[] idCheck = new bool[100]; 
for (int i = 0; i < 100; i++) 
{ 
    idCheck[i] = false; 
    for (int j = 0; j < FileIdArray.Length; j++) //FileIdArray is the list of all my Ids. 
    { 
     if (i == Convert.ToInt32(FileIdArray[j])) 
     { 
      idCheck[i] = true; 
     } 
    } 
} 
ResultBuilder.AppendLine(String.Format("*****************************************")); 
for (int i = 0; i < idCheck.Length; i++) 
{ 
    idCheck[0] = true;   
    if (idCheck[i] == false) 
    { 
     ResultBuilder.AppendLine(String.Format("Missing Id's from File 1 are {0}", i)); 
    }          
} 

Мой о/р для этого выглядит так:

***************************************** 
Missing Id's from File 1 are 26 
Missing Id's from File 1 are 41 
Missing Id's from File 1 are 56 
Missing Id's from File 1 are 88 
Missing Id's from File 1 are 94 
Missing Id's from File 1 are 98 
Missing Id's from File 1 are 99 

Мне нравится моя о/р, чтобы выглядеть следующим образом:

Missing Id's from File 1 are 26,41,56,88,94,98,99. 

Я понимаю, что я разместил свой ResultBuilder внутри и, следовательно, у меня есть повторение. Но когда я попытался сохранить i в строку, я получал исключение.

+0

Какие исключения вы получили? – Scoregraphic

+0

Пожалуйста, укажите точное исключение, которое вы получаете. –

+0

Это часть большой программы, которую я пишу. Я посылаю 3 аргумента для своей программы (3 текстовых файла). Исключением является то, что приложение не собирает первый файл. Первый файл - это файл, для которого я это делаю. – Matt

ответ

-1

Просто используйте следующую строку в ваш цикл: -

ResetBuilder.Append(String.Format("Missing Id's from File 1 are {0}", i)) ; 
+0

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

1

Вы можете заменить нижнюю петлю:

var missing = idCheck.Select((b, idx) => new { IsPresent = b, Idx = idx }) 
    .Where(p => !p.IsPresent) 
    .Select(p => p.Idx); 

string message = string.Format("Missing ids from File 1 are {0}", string.Join("," missing)); 
ResetBuilder.Apppend(message); 
0

Попробуйте следующий код, который сохранит вашу вторую петлю. В первом цикле вы получите недостающие записи.

for (int i = 0; i < 100; i++) 
{ 
    idCheck[i] = false; 
    for (int j = 0; j < FileIdArray.Length; j++) //FileIdArray is the list of all my Ids. 
    { 
     if (i == Convert.ToInt32(FileIdArray[j])) 
     { 
      idCheck[i] = true;   
      break; 
     }  
    } 
    if(j>=100) 
    ResultBuilder.AppendLine(String.Format("Missing Id's from File 1 are {0}", i)); 
} 
0

обновление код:

ResultBuilder.AppendLine(String.Format("Missing Id's from File 1 are:") 

for (int i = 0; i < idCheck.Length; i++) 
{ 
    idCheck[0] = true; 

    if (idCheck[i] == false) 
    { 
     ResultBuilder.Append(String.Format("{0}", i)); 
    } 
} 
+0

Я пробовал это раньше. Это дает аналогичный избыточный о/р. Спасибо, что нашли время ответить – Matt

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