2016-08-12 2 views
-2

Я внедрил некоторый код, чтобы внести изменения в мой файл csv. Однако каждый раз, когда я запускаю программу, я получаю ошибку IndexOutOfRangeException.IndexOutOfRangeException Было необработанное предупреждение

class Program 
{ 
    static void Main(string[] args) 
    { 
     var filePath = Path.Combine(Directory.GetCurrentDirectory(), "kaviaReport 02_08_2016.csv"); 
     var fileContents = ReadFile(filePath); 

     foreach (var line in fileContents) 
     { 
      Console.WriteLine(line); 
     } 

     Console.WriteLine("Press any key to exit..."); 
     Console.ReadKey(); 
    } 

    public static IList<string> ReadFile(string fileName) 
    { 
     var results = new List<string>(); 
     int lineCounter = 0; 
     string currentLine = string.Empty; 
     var target = File.ReadAllLines(fileName); 
     //.Skip(1) // Skip the line with column names 
     while ((currentLine = fileName) != null)//while there are lines to read 
     { 
      if (lineCounter != 0) 
      { 
       //If it's not the first line 
       var lineElements = currentLine.Split(',');//split your fields into an array 
       lineElements[4] = lineElements[4].Replace(' ', ',');//replace the space in position 4(field 5) of your array 
       //target.WriteAllLines(string.Join(",", fielded));//write the line in the new file 
       File.WriteAllLines(fileName, target); 
      } 

      lineCounter++; 

     } 

     return results; 
    } 
} 
} 
+0

Пожалуйста уточнить ваш вопрос немного, и не будет делать всю работу. См. [Mcve] (http://stackoverflow.com/help/mcve) –

+0

Ответ на этот вопрос был полезен для устранения ошибки? – Marusyk

ответ

0

Я понятия не имею, что вы пытаетесь сделать, но проблема здесь:

lineElements[4] = lineElements[4].Replace(' ', ','); 

У вас нет 5 элементов в массиве lineElements

Ваш filePath переменная containts Path.Combine(Directory.GetCurrentDirectory(), "kaviaReport 02_08_2016.csv");. Так что это должно быть что-то вроде: C:\Project\Bin\kaviaReport 02_08_2016.csv

Затем передать его в ReadFile() как fileName

После этого в строке

while ((currentLine = fileName) != null) 

вы установите currentLine те же значения, как fileName и проверить его на NULL. Итак, теперь у вас есть две переменные с одинаковым значением. Затем вы разделите значение (например: C:\Project\Bin\kaviaReport 02_08_2016.csv) на ,. Как вы видите, на вашем пути нет ,. В результате вы получаете массив lineElements только с одним элементом с индексом . Но вы пытаетесь получить элемент по индексу .

lineElements[4] = lineElements[4].Replace(' ', ','); 

Так как ожидался вы получили IndexOutOfRangeException

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