Replace Funktion in einem Intger

  • VB.NET

Es gibt 44 Antworten in diesem Thema. Der letzte Beitrag () ist von exc-jdbi.

    Replace Funktion in einem Intger

    Juten abend, ich würde gerne ein Teil in einem integer Löschen und dachte da an eine Replace Funktion.

    Habe zuerst den Integer in einen String Konvertiert.
    Aber eine reine Replace Funktion scheint ohne Regxex nicht möglich.

    Könnt ihr mir ein paar Anhalts punkte geben bitte?

    Beispiel: 3098764782673562

    Ersten 6 Ziffern

    Danke im voraus

    bigbase schrieb:

    Ersten 6 Ziffern
    sollen ersetzt werden durch was?
    Ansonsten:
    In einen String konvertieren und der Länge nach abschneiden.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Anmerkung: 3098764782673562 ist kein Integer
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    bigbase schrieb:

    Replace Funktion in einem Intger
    ...
    Durch nichts
    Formuliere doch mal ganz genau, was Du überhaupt willst :!:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Sagte ich doch:

    RodFromGermany schrieb:

    Ansonsten:
    In einen String konvertieren und der Länge nach abschneiden.

    VB.NET-Quellcode

    1. Dim txt = DEIN_STRING.SubString(7)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ja, die Stringvariante ist ein Einzeiler, der zigmal performanter ist, aber späßleshalber zum Ausprobieren:

    VB.NET-Quellcode

    1. Private Function GetShortedValueOf(Value As Integer, CountOfDigitsToRemove As Integer) As Integer
    2. Dim AbsoluteValue = Math.Abs(Value)
    3. Dim Power = Math.Log10(AbsoluteValue)
    4. If CountOfDigitsToRemove > Power Then Return 0
    5. Dim DownwardAdjustedPower = Math.Truncate(Power)
    6. Dim DivisorToSeperateUnwantedFromWantedPart = 10 ^ (DownwardAdjustedPower - CountOfDigitsToRemove + 1)
    7. Dim ValueWithSeperationByPoint = Value / DivisorToSeperateUnwantedFromWantedPart
    8. Dim PostPointValue = ValueWithSeperationByPoint - Math.Truncate(ValueWithSeperationByPoint)
    9. Dim ReraisedPostPointValue = PostPointValue * DivisorToSeperateUnwantedFromWantedPart
    10. Dim ReraisedPostPointValueAsInteger = CInt(ReraisedPostPointValue)
    11. Return ReraisedPostPointValueAsInteger
    12. End Function

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    RodFromGermany schrieb:

    VB.NET-Quellcode

    1. Dim txt = DEIN_STRING.SubString(7)


    Vielen dank, hättest du eventuell noch kurz zeit hier mal rüber zu schauen.
    Ich hab das Problem das Random sehr ähnliche zahlen generiert.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports System.Text.RegularExpressions
    3. Public Class Form1
    4. Dim zahl As String = "3083433122"
    5. Public Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    6. Debug.Print("Zahl = " & zahl)
    7. Dim placeholder As String = Nothing
    8. If zahl.Length <= 16 Then
    9. Do Until zahl.Length = 16
    10. Dim Random As New System.Random
    11. zahl = zahl & Random.Next(0, 9)
    12. Loop
    13. End If
    14. Debug.Print("")
    15. Debug.Print("Prüfziffer = " & PZ(zahl))
    16. End Sub
    17. Function PZ(z As String) As Integer
    18. Dim Zähler As Integer = 0
    19. Do Until Zähler = NumericUpDown1.Text
    20. Dim Qsum As Integer, m As Integer, diff As Integer
    21. Dim tmp As String = ""
    22. z = z.Replace(" ", "")
    23. For i As Integer = 0 To z.Length - 1
    24. If i Mod 2 = 0 Then m = 2 Else m = 1
    25. tmp &= (Convert.ToInt16(z.Substring(i, 1)) * m).ToString
    26. Debug.Print(z.Substring(i, 1) & vbTab & m & vbTab & tmp)
    27. Next
    28. For i = 0 To tmp.Length - 1
    29. Qsum += Convert.ToInt16(tmp.Substring(i, 1))
    30. Next
    31. Qsum = Qsum Mod 10
    32. diff = 10 - Qsum
    33. If diff = 10 Then diff = 0
    34. PZ = diff
    35. Dim DonePZ As String = zahl
    36. DonePZ = zahl.Substring(7)
    37. Dim W As New StreamWriter(Environment.CurrentDirectory & "\Output.txt", True)
    38. W.WriteLine(DonePZ & PZ)
    39. W.Close()
    40. Zähler = Zähler + 1
    41. Loop
    42. End Function
    43. End Class


    Das ist in der Ausgabedatei
    Spoiler anzeigen
    1223400572
    1223400574
    1223400576
    1223400578
    1223400570
    1223400572
    1223400574
    1223400576
    1223400578
    1223400570
    1223400572
    1223400574
    Der Zufallsgenerator darf nur einmalig per New erstellt werden, sonst kommt genau sowas unzufälliges raus. Verschieb die Zeile#15 in Zeile#5 und probier es so.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    bigbase schrieb:

    Leider ohne erfolg.


    Was verstehst du unter "ohne erfolg"

    Dein Code macht genau das was er soll:

    zahl = zahl & Random.Next(0, 9)

    zahl = 122823811
    Und er hängt eine Zahl zwischen 0 und 9 dran.

    Was soll denn passieren?

    Außerdem empfehle ich mal Option Strict auf ON zu setzen
    denn ich glaube die Zeile 27: Do Until Zähler = NumericUpDown1.Text
    Dürfte mit ON gar nicht kompilieren weil Zähler = Integer und .Text = String. (korrigiert mich wenn falsch arbeite schon lange nicht mehr mit solchen controls)
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    Fast-Vollzitat des direkten Vorposts an dieser Stelle entfernt ~VaporiZed

    Er soll genau das machen was du beschreibst ich habe die ausgabedatei geopostet. Daran sollte man direkt erkennen das da iwas nicht stimmt.
    Wenn er Radom nummern dran hängen soll wieso sind denn dann alle nummern fast identisch???

    Edit: Und nein option strict on ändert nichts

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Hi.

    bigbase schrieb:

    If zahl.Length <= 16 Then
    Do Until zahl.Length = 16
    Dim Random As New System.Random
    zahl = zahl & Random.Next(0, 9) ' Random.Next(0,9999).toString().PadLeft(5,0)
    Loop
    End If


    Wie vormals schon erwähnt, das Random vor der Schleife erzeugen und mittels .Next(Minimum, Maximum) (Die parameter natürlich mit Ganzzahlen ;) ) die (gezogene) Zahl mit Padleft anreichern.

    So würde ich daran gehen...

    VB.NET-Quellcode

    1. Dim Random As New Random
    2. Dim zahl As Integer = 0 'Wichtig! zahl sollte auch wie eine digitale Zahl definiert sein.
    3. Dim zahlAlsText As String = ""
    4. zahlAlsText = Random.Next(0, 9999).ToString().PadLeft(16 - zahlAlsText.Length, "0")
    5. ' Die Do Schleife braucht es nicht...


    Ich hoffe das gibt einen Denkanstoß...

    c.u. Joshi

    Joshi schrieb:


    Ich hoffe das gibt einen Denkanstoß...

    c.u. Joshi


    Das endet in einem Laufzeit Fehler zwecks nicht definiertem startindex des weiteren wollte ich jetzt nicht mein ganzen code umschreiben nur weil .net es nicht gebacken bekommt gescheit Random zu generieren.
    Auch Randomize()
    Hilft nicht

    Edit:
    Das probiert, funktioniert auch nicht.

    VB.NET-Quellcode

    1. ​Dim RandomGen1 As New Random
    2. Dim RandomInt1 As Integer
    3. RandomInt1 = RandomGen1.Next(2, 7)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „bigbase“ ()

    Wenn du es in String konvertiert hast, sollte Skip genau diese Möglichkeit bieten.
    docs.microsoft.com/en-us/dotne…merable.skip?view=net-6.0

    Sofern es nicht funktioniert mit String, dann einfach den String in eine Char-Array (ToCharArray) konvertieren, dann geht es ganz sicher.

    VB.NET-Quellcode

    1. Dim snumber = 3098764782673562.ToString
    2. Dim snewnumber as String = snumber.Skip(6).ToArray 'Sollte in Vb.Net funktionieren
    3. dim newnumber = Convert.ToInt32(snewnumber)' Oder in Long


    M.f.G.

    exc-jdbi

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „exc-jdbi“ ()

    exc-jdbi schrieb:

    Sofern es nicht funktioniert mit String, dann einfach den String in eine Char-Array (ToCharArray) konvertieren, dann geht es ganz sicher.
    exc-jdbi


    Es tut mir leid, aber ich verstehe nicht ganz.
    Du gibst hier

    VB.NET-Quellcode

    1. Dim snumber = 3098764782673562.ToString

    an
    Schon eine volle Nummer an aber die habe ich doch Garnichts die soll ja erst genereiert werden?
    Ich verstehe den sinn nicht was du mir versuchst zu erklären. Die Hauptproblemstellung dieses posts ist ja schon erledigt.
    Es geht Aktuell darum.
    Replace Funktion in einem Intger

    Ich habe mich auf den ersten Post hier bezogen.

    Ich bin davon ausgegangen, dass du irgend eine Zahl schon in einen String konvertiert hast. Z.B. die Zahl ​3098764782673562

    Du möchtest doch die ersten 6 Ziffern abschneiden. Skip bietet genau diese Möglichkeit.

    Freundliche Grüsse

    exc-jdbi

    exc-jdbi schrieb:

    Ich habe mich auf den ersten Post hier bezogen.
    exc-jdbi


    Dann danke aber das Problem ist bereits gelöst, mein zweites Problem im selben Programm ist das Random einfach nicht Random ist,
    und ich jetzt nicht nochmal einen neuen post öffnen wollte. Was ich aber werde wenn ich hier keinen erfolg erziele da es ja um ein
    anderes thema im titel geht.