vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Frage zur Mod-Funktion 
Autor: Bibobernie
Datum: 10.10.12 13:25

Hallo

Ich steh grad auf der Leitung beim meinem Problem. Und zwar will ich ne einfache Funktion welche mir ermöglicht einen String in ein Array zu wandeln. Das funktioniert soweit auch. Nun wollt ich die Funktion aber noch mit einem Optionalen Parameter versehen welcher angibt wie viele Buchstaben ein Array-Element enthält.
Nun könnte man ja auch nen String mit 19 Buchstaben übergeben und ein Array mit je 5 Buchstaben erhalten wollen. Damit das keinen Fehler gibt wollte ich zuvor prüfen ob man mittels mod-funktion einen Rest erhält. Ist ein Rest vorhanden werden dem Text eine entsprechende Anzahl an Leerzeichen abgehangen.

    Public Shared Function String2Array(ByVal Text As String, Optional ByVal _
      Einzelschritt As Integer = 1) As String()
        If Einzelschritt < 1 Then Einzelschritt = 1
        If Einzelschritt > Text.Length Then Einzelschritt = Text.Length - 1
 
        Dim ap As Integer = ((Text.Length) Mod Einzelschritt)
 
        If ap <> 0 Then
 
            For i As Integer = 0 To ap
                Text &= " "
            Next
 
        End If
 
        Dim Arr(CInt(Text.Length / Einzelschritt) - 1) As String
 
        Dim j As Integer = 0
        For i As Integer = 0 To Arr.Length - 1
 
            Arr(i) = Text.Substring(j, Einzelschritt)
            j += Einzelschritt
 
        Next
 
        Return Arr
    End Function
Das Problem ist nun jedoch das die Mod-Funktion nur den Rest zur nächst kleineren Funktion ergibt. 19 mod 5 ergebe demnach 4 und nicht die für die Funktion benötigte 1. Ich vermute mal das das ganze total einfach zu lösen ist aber manchmal steht man eben auf dem Schlauch...

Also wer ne Idee haben sollte nur her damit

Ahnungsloser ahnungsloser...

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Frage zur Mod-Funktion 
Autor: sv00010
Datum: 10.10.12 21:12

Der Kram mit Mod ist mir zu kompliziert.
Ich überprüfe auf Rest meist immer irgendwie so:
Dim dblResult1 As Double = Nothing
Dim dblResult2 As Double = Nothing
dblResult1 = Value / Diffident
dblResult2 = Microsoft.VisualBasic.Fix(dblResult1)
 
If dblResult1 = dblResult2 Then
'Code für kein Rest einfügen
Else
'Code für Rest einfügen
End If
0
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Frage zur Mod-Funktion 
Autor: ModeratorDaveS (Moderator)
Datum: 10.10.12 23:15

Naja, 5 - 4 (also Einzelschritt - ap) ist ja 1.

Der Code von sv00010 berechnet da übrigens 3, eigentlich x = floor(l / e), oder anders geschrieben x = l \ e. Damit könnte man mit Length - x * Einzelschritt wieder die 4 bekommen, die man direkt mit Mod hat.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Frage zur Mod-Funktion 
Autor: Bibobernie
Datum: 11.10.12 14:01

So ich habs jetzt hinbekommen. Ich nutz nun einfach ne Do Loop funktion und prüfe jedes Mal die Mod funktion ab. Das klappt hervorragend:

    Public Shared Function String2Array(ByVal Text As String, Optional ByVal _
      Einzelschritt As Integer = 1) As String()
        If Einzelschritt < 1 Then Einzelschritt = 1
        If Einzelschritt > Text.Length Then Einzelschritt = Text.Length
 
        Do Until ((Text.Length) Mod Einzelschritt) = 0
            Text &= " "
        Loop
 
        Dim Arr(CInt(Text.Length / Einzelschritt) - 1) As String
 
        Dim j As Integer = 0
        For i As Integer = 0 To Arr.Length - 1
 
            Arr(i) = Text.Substring(j, Einzelschritt)
            j += Einzelschritt
 
        Next
 
        Return Arr
    End Function
Danke nochmal

Ahnungsloser ahnungsloser...

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

String-Alarm !!!  
Autor: Manfred X
Datum: 11.10.12 15:42

Hallo!

Im Framework sind Strings "unveränderlich", d.h. bei jeder Änderung
(z.B. Anhängen von Zeichen) wird ein neuer String erstellt und die
vorhandenen Zeichen müssen kopiert werden.

Bei der Bearbeitung von längeren Zeichenfolgen durch eine größere Folge
von Modifikations-Operationen sollte deshalb entweder eine Variable
des Typs System.Text.Stringbuilder genutzt werden (=Zeichenfolge wird als
Liste verwaltet) oder die Operationen können zusammengefasst werden.

Eventuell so ....
  ''' <summary>Text in eine Liste von Teilstrings aufspalten</summary>
  ''' <param name="text">aufzuspaltender Text</param>
  ''' <param name="elementlength">Länge der Teilstrings</param>
  ''' <returns>Liste der Teilstrings</returns>
  Private Function SplitText(ByVal text As String, _
        ByVal elementlength As Integer) As List(Of String)
 
        If String.IsNullOrEmpty(text) Then
            Throw New ArgumentException("Text fehlt")
        End If
 
        If elementlength < 1 Or text.Length < elementlength Then
            Throw New ArgumentException("Elementlänge unplausibel")
        End If
 
        'einmaliges Anhängen 
        If text.Length Mod elementlength > 0 Then
            text &= StrDup(elementlength, " ")
        End If
 
        Dim elements As New List(Of String)
 
        'Step-Weite regelt das Schleifenende
        For i As Integer = 0 To text.Length - elementlength Step elementlength
            elements.Add(text.Substring(i, elementlength))
        Next i
 
        Return elements
    End Function
MfG
Manfred
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Frage zur Mod-Funktion 
Autor: ModeratorDaveS (Moderator)
Datum: 11.10.12 19:17

Ja, a - b zu berechnen ist wohl schwierig. Kann es sein du verstehst das wirklich nicht, oder willst dir einfach keine Mühe machen?

 Dim ap As Integer = Text.Length Mod Einzelschritt
 If ap <> 0 Then
     Text = Text.PadRight(Text.Length + Einzelschritt - ap)
 End If

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Frage zur Mod-Funktion 
Autor: keco
Datum: 11.10.12 20:30

Zu einfach. Heutzutage schießt man mit Kanonen auf Spatzen. (Einfach nur, weil man's kann.)
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Frage zur Mod-Funktion 
Autor: ModeratorDaveS (Moderator)
Datum: 11.10.12 20:51

Ach ja, hatte ich vergessen...

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel