2012-03-20 11 views
6

Użyłem readreadera do odczytu w pliku .csv, a następnie muszę podzielić wartości i umieść je w słowniku. Do tej pory mam:Ładowanie pliku .csv do słownika, ciągle pojawia się błąd "nie można przekonwertować z" napis [] 'na' ciąg '"

namespace WindowsFormsApplication2 
{ 
public partial class Form1 : Form 
{ 
Dictionary<string, string> dict = new Dictionary<string, string>(); 
    public Form1() 
    { 
     InitializeComponent(); 
    } 
    private void Form1_Load(object sender, EventArgs e) 
    { 
     using (StreamReader reader = new StreamReader("textwords0.csv")) 
     { 
      string line; 
      while ((line = reader.ReadLine()) != null) 
      { 
       string[] parts = line.Split(','); 
       dict.Add(parts[0], parts[1]); 
      } 
     } 
    } 

Wciąż otrzymuję błąd „nie można przekonwertować z«string []»do«string»”, ale nie mogę dowiedzieć się, jak to naprawić.

Z góry dzięki!

Aktualizacja:

aktualizacja: ... Przypadkowo opuściłem plik csv otwarty i działa teraz, przepraszam za marnowanie czasu, ludzie myśleli, że mam inny arkusz kalkulacyjny otwarty, kilka bardzo przydatnych porad, ale dzięki za pomoc!

+3

Która linia zawiera błąd? Linia dict.Add? –

+0

Czy możemy wyświetlić de źródła? (textwords0.csv)? –

+0

VS mówi linię 33, która jest ostatnią}. – jesusjuice

Odpowiedz

19

Jeśli używasz .NET 4.0, po to naprawdę zwięzłe i należy osiągnąć to samo:

var dict = File.ReadLines("textwords0.csv").Select(line => line.Split(',')).ToDictionary(line => line[0], line => line[1]); 
+2

nie wiesz, czy to zadziała, jeśli masz dane z "," w nich. potrzebujesz parsera csv tutaj. – nakhli

+2

jest to krucha, ponieważ wartość może być zawijana w cudzysłów, jeśli zawiera przecinek '(" to jest, wartość ")' - wartość zostanie podzielona na pół –

+0

To prawda, że ​​nie sprawdza, czy przecinek jest w cytacie lub dane, ale @jesusjuice nie wydaje się tym martwić. –

0

błąd jest rzeczywiście ze względu na „” jesteś wprowadzania. Potrzebuje "tablicy" znaków, z których można się dzielić. Oto przykładowa metoda podziału za pomocą string.split.

string[] parts = line.Split(new string[] { "," }, StringSplitOptions.None); 

Mam nadzieję, że to pomoże. Zakłada się, że jest to linia, z której wynika błąd, ponieważ nie podano jej.

+0

widocznie jego linia 33, która jest ostatnia}. Jestem całkiem nowy w programowaniu, więc znalezienie tego trochę zagmatwało. Dzięki! – jesusjuice

+0

To nadal nie działa, dzięki za pomoc w każdym razie. – jesusjuice

Powiązane problemy