Seite 1 von 1

ExchangeStringFields(String.s, Index1, Index2, Separator.s)

Verfasst: 21.11.2004 13:12
von DarkDragon
Hallo,

diese Prozedur dient lediglich dazu zwei StringFields auszutauschen:

Code: Alles auswählen

Procedure.s ExchangeStringFields(String.s, Index1, Index2, Separator.s)
  If Index1 > Index2
    c = Index1
    Index1 = Index2
    Index2 = c
  EndIf
  
  m1 = Index1
  m2 = Index2
  While m1 > 1
    x1 = FindString(String, Separator, x1)+1
    m1 - 1
  Wend
  While m2 > 1
    x2 = FindString(String, Separator, x2)+1
    m2 - 1
  Wend
  
  s1 = Len(StringField(String, Index1, Separator))
  s2 = Len(StringField(String, Index2, Separator))
  
  String2.s = Left(String, x1) + StringField(String, Index2, Separator) + Mid(String, x1+s1+1, x2-(x1+s1)-1) + StringField(String, Index1, Separator) + Right(String, Len(String)-(x2+s2-1))
  ProcedureReturn String2
EndProcedure

;Hier ein Beispiel:

Debug ExchangeStringFields("Test1|Test12|Test123", 1, 2, "|")

Verfasst: 21.11.2004 14:50
von MLK
ich wäre ja wirklich sehr froh darüber, wenn du bei einem code für die öffentlichkeit, zumindest die variablen sinngemäß benennen könntest. so könnte man auch trotz fehlender kommentare einen einfachen durchblick finden.

außerdem wird die gültigkeit der parameter nicht überprüft.


edit: geht auch einfacher

Code: Alles auswählen

Procedure$ ExchangeStringFields(String.s, Index1, Index2, Separator.s)
    If StringField(String,Index1,Separator)="" Or StringField(String,Index2,Separator)="" Or Index1<1 Or Index2<1
        ProcedureReturn ""
    EndIf
    
    For i=1 To CountString(String,Separator)+1
        If i=Index1
            Ergebnis.s+StringField(String,Index2,Separator)+Separator
        ElseIf i=Index2
            Ergebnis.s+StringField(String,Index1,Separator)+Separator
        ElseIf StringField(String,i,Separator)
            Ergebnis.s+StringField(String,i,Separator)+Separator
        EndIf
    Next
    If Right(String,1)<>Separator
        ProcedureReturn Left(Ergebnis,Len(Ergebnis)-1)
    Else
        ProcedureReturn Ergebnis
    EndIf
EndProcedure

Debug ExchangeStringFields("Test1|Test12|Test123", 1, 2, "|")