|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Apr 2009
Città: Aci Catena (CT)
Messaggi: 1021
|
[C#] Split di una stringa e generazione DataTable
Buongiorno,
ho necessità di eseguire un split di una string e da questa generare un Datatable. La stringa in mio possesso è del tipo: 'B1M3T2' oppure potrebbe essere B10M3T22' dove l'ordine non è sempre lo stesso, e bisogna leggerle sempre in coppia: B1 - M2 - T2 Dopo lo split dovrei generare un DataTable: CHAR-----INT B--------1 M--------2 T--------2 Per lo split stavo utilizzando come separatore un array di char, ma non ho controllo sull'ordine... Suggerimenti? Grazie. Ultima modifica di robertino_salemi : 17-03-2015 alle 09:48. |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
|
Quote:
Dai un'occhiata qui. |
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Non mi è chiaro il formato dei dati che devi interpretare.
Dici che vanno letti in coppia, ma nel secondo esempio riporti la stringa 'B10M3T22' e lo 0 tra B1 e M3 che fine fa? Devi leggere solo il primo numero dopo una lettera? |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2009
Città: Aci Catena (CT)
Messaggi: 1021
|
[Kendall]:
si, nel mio caso dovrebbe essere [BMT] (o forse è molto semplice), no? Come dovrei trattarla? tomminno con la stringa 'B1M3T2' ottengo: CHAR-----INT B--------1 M--------2 T--------2 con la stringa 'B10M3T22' ottengo: CHAR-----INT B--------10 M--------3 T--------22 |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2009
Città: Aci Catena (CT)
Messaggi: 1021
|
Risolto grazie al supporto di un altro utente:
Codice:
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("CHAR", typeof(string)));
dt.Columns.Add(new DataColumn("INT", typeof(int)));
string s = "B10M3T22";
int lastIndex = 0;
bool isDigit = false;
for (int i = 0; i < s.Length; ++i)
{
if (char.IsDigit(s[i]))
{
if (!isDigit)
{
string column = s.Substring(lastIndex, i - lastIndex);
dt.Rows.Add(column, Convert.ToInt32(s[i].ToString()));
}
else
{
//add digit
dt.Rows[dt.Rows.Count - 1][1] = int.Parse(dt.Rows[dt.Rows.Count - 1][1].ToString() + s[i]);
}
lastIndex = i + 1;
isDigit = true;
}
else
isDigit = false;
}
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Puoi vedere diversi tipi di approccio al problema anche qui:
http://stackoverflow.com/questions/7...rs-and-letters
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Apr 2009
Città: Aci Catena (CT)
Messaggi: 1021
|
Quote:
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:49.




















