Il modo più semplice per analizzare una stringa delimitata da una virgola in un tipo di object che posso scorrere per accedere ai singoli valori?

Qual è il modo più semplice per analizzare un elenco di valori stringa delimitato da virgole in un qualche tipo di object che posso scorrere, in modo da poter accedere facilmente ai singoli valori?

stringa di esempio: "0, 10, 20, 30, 100, 200"

Sono un po ‘nuovo in C #, quindi perdonami per aver fatto una semplice domanda come questa. Grazie.

ci sono trucchi con questo – ma alla fine il modo più semplice sarà quello di usare

 string s = [yourlongstring]; string[] values = s.Split(','); 

Se il numero di virgole e voci non è importante e si desidera eliminare i valori “vuoti”, è ansible utilizzarli

 string[] values = s.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); 

Una cosa, però – questo manterrà qualsiasi spazio bianco prima e dopo le tue corde. Potresti usare un po ‘di magia Linq per risolvere questo:

 string[] values = s.Split(',').Select(sValue => sValue.Trim()).ToArray(); 

Questo è se stai usando .Net 3.5 e hai la dichiarazione System.Linq in cima al tuo file sorgente.

  var stringToSplit = "0, 10, 20, 30, 100, 200"; 

  // To parse your string var elements = test.Split(new[] { ',' }, System.StringSplitOptions.RemoveEmptyEntries); 

  // To Loop through foreach (string items in elements) { // enjoy } 

Usa Linq, è un modo molto semplice e veloce.

 string mystring = "0, 10, 20, 30, 100, 200"; var query = from val in mystring.Split(',') select int.Parse(val); foreach (int num in query) { Console.WriteLine(num); } 

Il modello corrisponde a tutti i caratteri non numerici. Questo ti limiterà a numeri interi non negativi, ma per il tuo esempio sarà più che sufficiente.

 string input = "0, 10, 20, 30, 100, 200"; Regex.Split(input, @"\D+"); 

Penso che sia meglio usare la class Microsoft.VisualBasic.FileIO.TextFieldParser se si lavora con file di testo con valori separati da virgole.

A volte le colonne avranno virgole dentro se stesse, come ad esempio:

“Some item”, “Another Item”, “Also, One more item”

In questi casi, la divisione su “,” interromperà alcune colonne. Forse un modo più semplice, ma ho appena creato il mio metodo (come bonus, gestisce gli spazi dopo le virgole e restituisce un IList):

 private IList GetColumns(string columns) { IList list = new List(); if (!string.IsNullOrWhiteSpace(columns)) { if (columns[0] != '\"') { // treat as just one item list.Add(columns); } else { bool gettingItemName = true; bool justChanged = false; string itemName = string.Empty; for (int index = 1; index < columns.Length; index++) { justChanged = false; if (subIndustries[index] == '\"') { gettingItemName = !gettingItemName; justChanged = true; } if ((gettingItemName == false) && (justChanged == true)) { list.Add(itemName); itemName = string.Empty; justChanged = false; } if ((gettingItemName == true) && (justChanged == false)) { itemName += columns[index]; } } } } return list; }