Comment faire cela dans la chaîne (pour afficher les valeurs de la première ligne si txtboxintdraws.lines (1) est la valeur - 2-3-4-6-7-8, dans textbox1.Lines1 () pour afficher 2,4,6,8, et dans textbox2.text - 3,7. (séparés par une virgule)
2 2 2 2 4 4 4 6 6 6 6
Cela me montre faux, genre
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click Dim number As Integer Dim numbers As New List(Of Integer) For Each strLine As String In TxtBoxIntDraws.Lines Dim nums() As String = strLine.Split(","c) For Each num As String In nums If Integer.TryParse(num.Trim, number) Then numbers.Add(number) End If Next Next numbers.Sort() 'When you are building strings use a StringBuilder to avoide creating and throwing away 'a bunch of strings. (happens every time you alter a string Dim TextBox1sb As New StringBuilder Dim TextBox2sb As New StringBuilder For Each intNumber As Integer In numbers 'The Mod operator divides the first number by the second number 'and returns the remainder If intNumber Mod 2 = 0 Then '(number / 2) = Int(number / 2) Then 'Number is even TextBox1sb.AppendLine(intNumber.ToString) TextBox1.Text = TextBox1.Text + intNumber.ToString Else TextBox2sb.AppendLine(intNumber.ToString) TextBox2.Text = TextBox1.Text + intNumber.ToString End If Next 'Update the UI only once, don't force a redraw on each iteration of the loop TextBox1.Text = TextBox1sb.ToString TextBox2.Text = TextBox2sb.ToString End Sub
Alors, où est-ce que je me trompe?
3 Réponses :
Si vous voulez que vos numéros soient affichés pour chaque ligne correspondante, vous devrez garder une trace de chaque ligne ainsi que garder deux listes distinctes; un pour les cotes et l'autre pour les nombres pairs. Veuillez voir ci-dessous une mise en œuvre rapide que j'ai faite pour permettre cela.
Dim even As New Dictionary(Of Integer, String) Dim odd As New Dictionary(Of Integer, String) Dim currIndex As Integer = 0 Dim curNum As Integer = 0 Dim evenNumbers As String = String.Empty Dim oddNumbers As String = String.Empty ' Go through all lines in the textbox TxtBoxIntDraws.Lines. ToList().ForEach(Sub(line) evenNumbers = String.Empty oddNumbers = String.Empty ' Try and split out the numbers from the line line.Split({"-"c}, StringSplitOptions.RemoveEmptyEntries).AsEnumerable(). Where(Function(i) Integer.TryParse(i.Trim, New Integer)).OrderBy(Function(num) CInt(num)).ToList(). ForEach(Sub(l) ' For each item if we can parse it, then check if even and or odd and add to the correct dictionary If Integer.TryParse(l.Trim, curNum) Then If curNum Mod 2 = 0 Then If evenNumbers.Length > 0 Then evenNumbers += ", " & curNum.ToString Else evenNumbers += curNum.ToString End If Else If oddNumbers.Length > 0 Then oddNumbers += ", " & curNum.ToString Else oddNumbers += curNum.ToString End If End If End If End Sub) If Not String.IsNullOrEmpty(evenNumbers) Then even.Add(currIndex, currIndex & " - " & evenNumbers) If Not String.IsNullOrEmpty(oddNumbers) Then odd.Add(currIndex, currIndex & " - " & oddNumbers) currIndex += 1 End Sub) ' Show the results TextBox1.Text = String.Join(Environment.NewLine, even.Values) TextBox2.Text = String.Join(Environment.NewLine, odd.Values)
Voici mes résultats
Pour une raison ou une autre dont je ne sais pas, lorsque j'ai ajouté le commentaire sur l'analyse, il a également inclus le If Integer.TryParse (l.Trim, curNum) Then
dans le cadre du commentaire , J'ai corrigé c'est le code ...
J'ai fait une petite modification sur votre code ci-dessus et je l'ai testé correctement, voici ce que je pense que vous avez demandé, en particulier pour la première ligne, sinon personnalisez-le comme vous le souhaitez. Voici le code de mise à jour:
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click Dim number As Integer Dim numbers As New List(Of Integer) For Each strLine As String In TxtArr.Lines 'Dim nums() As String = strLine.Split(","c) Dim nums() As String = strLine.Split("-") For Each num As String In nums If Integer.TryParse(num.Trim, number) Then numbers.Add(number) End If Next Next numbers.Sort() 'When you are building strings use a StringBuilder to avoide creating and throwing away 'a bunch of strings. (happens every time you alter a string Dim TextBox1sb As New StringBuilder Dim TextBox2sb As New StringBuilder For Each intNumber As Integer In numbers 'The Mod operator divides the first number by the second number 'and returns the remainder If intNumber Mod 2 = 0 Then '(number / 2) = Int(number / 2) Then 'Number is even TextBox1sb.Append(intNumber.ToString & ",") TextBox1.Text = TextBox1.Text + intNumber.ToString Else TextBox2sb.Append(intNumber.ToString & ",") TextBox2.Text = TextBox2.Text + intNumber.ToString End If Next 'Update the UI only once, don't force a redraw on each iteration of the loop 'TextBox1.Text = Strings.Left(TextBox1sb.ToString, TextBox1sb.Length - 1) TextBox1.Text = Mid(TextBox1sb.ToString, 1, Len(TextBox1sb.ToString) - 1) TextBox2.Text = Mid(TextBox2sb.ToString, 1, Len(TextBox2sb.ToString) - 1)
End Sub
J'espère que cela peut vous aider, ^ _ ^
Comme c'était mon code d'une réponse précédente, quelques modifications corrigent les choses. Vous pouvez corriger la virgule finale.
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click TextBox3.Text = "-2-3-4-6-7-8" 'Pretend TextBox3 is TxtBoxIntDraws Dim number As Integer Dim numbers As New List(Of Integer) For Each strLine As String In TextBox3.Lines Dim nums() As String = strLine.Split("-"c) For Each num As String In nums If Integer.TryParse(num.Trim, number) Then numbers.Add(number) End If Next Next numbers.Sort() 'When you are building strings use a StringBuilder to avoide creating and throwing away 'a bunch of strings. (happens every time you alter a string Dim TextBox1sb As New StringBuilder Dim TextBox2sb As New StringBuilder For Each intNumber As Integer In numbers 'The Mod operator divides the first number by the second number 'and returns the remainder If intNumber Mod 2 = 0 Then '(number / 2) = Int(number / 2) Then 'Number is even TextBox1sb.Append(intNumber.ToString & ",") TextBox1.Text = TextBox1.Text + intNumber.ToString Else TextBox2sb.Append(intNumber.ToString & ",") TextBox2.Text = TextBox1.Text + intNumber.ToString End If Next 'Update the UI only once, don't force a redraw on each iteration of the loop TextBox1.Text = TextBox1sb.ToString TextBox2.Text = TextBox2sb.ToString End Sub
Cela me montre mal, genre
, qu'est-ce que cela signifie? Voulez-vous tous les égales dans une liste et toutes les cotes dans une autre liste?J'ai montré ci-dessus, affichant mes valeurs en dessous les unes des autres, je veux afficher les valeurs correspondant à chaque ligne en ligne. oui, c'est ce que je veux.