2017-05-17 4 views
2

Ich bin ziemlich neu in C# Visual Studio. Ich wollte fragen, ob es möglich ist, mit der contain-Funktion zu prüfen, ob mein Programm Zahlen/Ziffern in einer DataTable-Zeile enthält.Überprüfen Sie die Nummern/Ziffern

p/s: Ich habe die Regex-Funktion versucht (auf einige Themen mit Bezug Online diskutiert)

string checkstring = "1234567890"; 
Regex reNum = new Regex(@"^\d+$"); 
bool isNumeric = reNum.Match(checkstring).Success; 

for (int i = 0; i < my_datatable.Rows.Count; i++) 
{ 
    data_source = my_datatable.Rows[i][4].ToString(); 

    if (data_source.Contains(reNum.Match)) 
    { 
     my_datatable.Rows[i][4] = "Contain Number"; 
    } 
    else 
    { 
     my_datatable.Rows[d][4] = "No number"; 
    } 
} 

Aber es scheint, es überhaupt nicht funktioniert, ist es eine andere Methode? Danke für deine Antwort!

+2

So möchten Sie überprüfen, ob die Zelle enthält Nummer oder enthält nur die Nummer? –

Antwort

1

Wenn Sie überprüfen möchten, ob die Zelle nur Ziffern enthält, müssen Sie Ihre Regex in der Schleife for verwenden.

Statt

if (data_source.Contains(reNum.Match)) 

Verwenden

if (reNum.Match(data_source)) 

Dies wird wahr zurück, wenn data_source nur Ziffern ist (Anmerkung - funktioniert nur für positive ganze Zahlen - Sie eine andere Strategie benötigen, wenn Sie andere Zeichen wie ein führender Strich oder Dezimalpunkte oder Kommas).

Wenn Sie auf das Vorhandensein von Ziffern testen möchten (aber andere Zeichen sind auch in Ordnung), dann möchten Sie Ihre Regex-Zeichenfolge zu @"\d" ändern, die wahr zurückgibt, wenn mindestens eine Ziffer vorhanden ist.

+0

Bekannt, ich werde diese Lösung versuchen, danke für Ihre Antwort @vorkosigan –

1

Haben Sie versucht:

for (int i = 0; i < my_datatable.Rows.Count; i++) 
{ 
    string data_source = my_datatable.Rows[i][4].ToString(); 
    if (data_source.Any(x=>Char.IsDigit(x))) 
    { 
     my_datatable.Rows[i][4] = "Contain Number"; 
    } 
    else 
    { 
     my_datatable.Rows[i][4] = "No number"; 
    } 
} 

Wo data_source.Any(x=>Char.IsDigit(x)) prüfen wird, ob die data_source bei Leasing eine Ziffer enthält, wenn also die Zelle Text "Contain Number" sonst der Text "No number" wäre Zelle ersetzen. Wenn Sie möchten, um den Zustand zu ändern, für alle Zahlen zu überprüfen ersetzen Any mit All()

+0

Vielen Dank, funktioniert wie ein Charme. :) –

+0

@AliffM .: Überprüfen Sie auch die anderen Antworten, und markieren Sie eine als akzeptiert, die Ihnen wirklich hilft –

1

Wenn Sie möchten, um zu überprüfen, ob es irgendwelche Integer-Zahlen (zB „-123.456“) in der vierten Spalte können Sie versuchen, Kombination Linq und reguläre Ausdrücke:

var hasNumbers = my_datatable 
    .Rows 
    .OfType<DataRow>() 
    .Where(row => row[4] != null) 
    .Any(row => Regex.IsMatch(row[4].ToString(), "^-?[0-9]+$")); 

Wenn Sie überprüfen wollen, dass vierte Spalte enthält Ziffern zB "Bla-bla- -bla":

var hasDigits = my_datatable 
    .Rows 
    .OfType<DataRow>() 
    .Where(row => row[4] != null) 
    .Any(row => row[4].ToString().Any(c => c >= '0' && c <= '9')); 
Verwandte Themen