2012-02-13 11 views
82

tuve este código:¿Cómo dividir() una cadena delimitada a una lista <String>

String[] lineElements;  
    . . . 
    try 
    { 
     using (StreamReader sr = new StreamReader("TestFile.txt")) 
     { 
      String line; 
      while ((line = sr.ReadLine()) != null) 
      { 
       lineElements = line.Split(','); 
       . . . 

pero luego pensé que tal vez debería ir con una lista en su lugar. Pero este código:

List<String> listStrLineElements; 
    . . . 
    try 
    { 
     using (StreamReader sr = new StreamReader("TestFile.txt")) 
     { 
      String line; 
      while ((line = sr.ReadLine()) != null) 
      { 
       listStrLineElements = line.Split(','); 
. . . 

... me da, "No se puede convertir implícitamente el tipo 'string []' a 'System.Collections.Generic.List'"

Respuesta

183

string.Split() devuelve una matriz - se puede convertir a una lista usando ToList():

listStrLineElements = line.Split(',').ToList(); 

necesita importar System.Linq acceder a la función .ToList().

+46

Probablemente debería mencionar aquí que tiene que estar usando el espacio de nombres System.Linq –

47

De cualquier uso:

List<string> list = new List<string>(array); 

o de LINQ:

List<string> list = array.ToList(); 

o cambiar el código para no depender de XX e implementación específica:

IList<string> list = array; // string[] implements IList<string> 
1
string[] thisArray = myString.Split('/');//<string1/string2/string3/--->  
List<string> myList = new List<string>(); //make a new string list  
myList.AddRange(thisArray);  

Uso AddRange para pasar string[] y obtener una lista de cadenas.

8

incluyen el uso de espacio de nombres System.Linq

List<string> stringList = line.Split(',').ToList(); 

se puede hacer uso de ella con facilidad para iterar a través de cada elemento.

foreach(string str in stringList) 
{ 

} 

String.Split() devuelve una matriz, por lo tanto, convertir a una lista usando ToList()

1

Esto permitirá la lectura de un archivo csv e incluye un divisor de línea csv que se encarga de las comillas dobles y se puede leer incluso si Excel tiene abierto.

public List<Dictionary<string, string>> LoadCsvAsDictionary(string path) 
    { 
     var result = new List<Dictionary<string, string>>(); 

     var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); 
     System.IO.StreamReader file = new System.IO.StreamReader(fs); 

     string line; 

     int n = 0; 
     List<string> columns = null; 
     while ((line = file.ReadLine()) != null) 
     { 
      var values = SplitCsv(line); 
      if (n == 0) 
      { 
       columns = values; 
      } 
      else 
      { 
       var dict = new Dictionary<string, string>(); 
       for (int i = 0; i < columns.Count; i++) 
        if (i < values.Count) 
         dict.Add(columns[i], values[i]); 
       result.Add(dict); 
      } 
      n++; 
     } 

     file.Close(); 
     return result; 
    } 

    private List<string> SplitCsv(string csv) 
    { 
     var values = new List<string>(); 

     int last = -1; 
     bool inQuotes = false; 

     int n = 0; 
     while (n < csv.Length) 
     { 
      switch (csv[n]) 
      { 
       case '"': 
        inQuotes = !inQuotes; 
        break; 
       case ',': 
        if (!inQuotes) 
        { 
         values.Add(csv.Substring(last + 1, (n - last)).Trim(' ', ',')); 
         last = n; 
        } 
        break; 
      } 
      n++; 
     } 

     if (last != csv.Length - 1) 
      values.Add(csv.Substring(last + 1).Trim()); 

     return values; 
    } 
3

Justo u puede utilizar con using System.Linq;

List<string> stringList = line.Split(',')  // this is array 
.ToList();  // this is a list which you can loop in all split string 
2

compruebe esta lista StringList = linea.split ('') ToList (.);

Cuestiones relacionadas