Seite 2 von 2

Verfasst: 05.07.2009 19:59
von Tsuki-Namida
sorry doppelpost.....

es ist leider noch ein kleies problem bei diesem code auf getaucht...

Code: Alles auswählen

string$="666,'Test, 2, 3, 4',huhu,'irgend ein, text, mit, Kommas'"
; string$="'Test, 4','Test, 2','Test, 3'"
; string$="Test,513,'Test, 3'"

For i=1 To CountString(string$, ",")+1
a$=StringField(string$, i, ",")
  If Left(a$,1)="'"
    Repeat
    i+1
      a$+","+StringField(string$, i, ",")
    Until Right(a$,1)="'"
  EndIf 
Debug a$
Next 
und zwar wenn sich im string nur ein wort aufhält bleibt der code in der repeat schleife hängen.... also ich meinte das so:
string$ = "'Wort'"
string$ = "wort1,'wort2',wort3"

wen sich halt kein komma in ' ' befindest.....

Verfasst: 05.07.2009 21:04
von marco2007
...sollte nicht so schwer sein...probier`s mal mit If findstring oder so...
Ein bißchen mußt auch selber probieren - hier geht`s ja nur nur um Grundbefehle :wink:
Ich habe den Code ja auch in paar Minuten, während ich gegessen habe (Dinkelnudeln mit Tomatensauße + Parmesan :allright: ), gemacht...naja und da reden ja auch noch meine 2 Kleinen ständig....

Verfasst: 06.07.2009 00:17
von Tsuki-Namida
ja das habe ich ja probiert.... wenn ich die ganze fo[...]next schleiche in eine if abfrage machealso:

Code: Alles auswählen

If FindString(string$,",",1)
  For i=1 To CountString(string$, ",")+1 
    [...]
  Next
  Debug a$
Else
  Debug string$
EndIf
denn ich dann nur einen bereich habe wie "'text'"
ist das ja weiterhin kein problem.

wenn aber der string "'text',text" beinhät bleibt das in der schleife und a$ wird bei jeden durchlauf um ein komma verlängertso in etwar:
"'text',text,"
"'text',text,,"
"'text',text,,,"
"'text',text,,,,"
"'text',text,,,,,"
"'text',text,,,,,,"
"'text',text,,,,,,,"
"'text',text,,,,,,,,"
"'text',text,,,,,,,,,"
"'text',text,,,,,,,,,,"
"'text',text,,,,,[...]"

"'text',"
"'text',,"
"'text',,,"
"'text',,,,"
"'text',,,,,"
"'text',,,,,[...]"
und so weiter bis halt der speicher schlap macht

und ich habe überhaupt keine idee wie ich das unterbinden könnte...
und ich kann ja den benutzer der späteren anwendung nich vorschreiben das er immer ein komma setzen muss wenn er was in ' schreibt....

ich bitte euch bitte helft mir und sagt mir wie ich das versuchen kann das ich das so realilsieren kann das es endlich funktioniert.......

Verfasst: 06.07.2009 02:34
von KeyKon
Also bei mir bleibt da nix hängen...
Kannst du mal den Code exact so posten wie er hängen bleibt?

Verfasst: 06.07.2009 08:55
von Tsuki-Namida
okay ein problem.... 2 warianten wo er hängen bleibt...

Code: Alles auswählen

;string$="666,'Test, 2, 3, 4',huhu,'irgend ein, text, mit, Kommas',neu"
;string$="'Test, 4','Test, 2','Test, 3'"
string$="2345,'Parameter',neu"

If FindString(string$,",",1)
  For i=1 To CountString(string$, ",")+1
  a$=StringField(string$, i, ",")
    If Left(a$,1)="'"
      Repeat
      i+1
        ;Debug a$
        a$+StringField(string$, i, ",")
        ;Debug a$
      Until Right(a$,1)="'"
    EndIf 
  Debug a$
  Next  
Else
  Debug string$
EndIf
wenn der string hier so aus sieht geht es string$ = "'Parameter'" aber sobald ein parameter2 dazukommt geht es nicht mehr da es dann auserhalb von ' ein komma hat....

und hier ein klein wenig anderst also wo wie er gepostet wurde...

Code: Alles auswählen

;string$="666,'Test, 2, 3, 4',huhu$,'irgend ein, text, mit, Kommas',neu"
;string$="'Test, 4','Test, 2','Test, 3'"
string$="2345,'Parameter',neu"

  For i=1 To CountString(string$, ",")+1
  a$=StringField(string$, i, ",")
    If Left(a$,1)="'"
      Repeat
      i+1
        ;Debug a$
        a$+StringField(string$, i, ",")
        ;Debug a$
      Until Right(a$,1)="'"
    EndIf
  Next  
Debug a$
wenn du in diesem string string$="2345,'Parameter',neu" bei 'Parameter' irgent ein komma rein machst geht es wieder also zum beispiel
string$="2345,'Param,eter',neu"

Verfasst: 06.07.2009 10:21
von helpy
Ein anderer Versuch:

Code: Alles auswählen

EnableExplicit

Procedure SeperateStrings( string.s, Array result.s(1) )
  Protected *char.Character, *ItemStart.Character
  Protected ItemCount, ItemLength
  Protected bInQuote
  Protected PreDimArray
  
  If string = ""
    ReDim result.s(0)
    result(0) = ""
    ProcedureReturn #Null
  EndIf
  
  PreDimArray = 100
  ReDim result.s(PreDimArray)
  ItemCount = 0
  bInQuote = #False
  
  
  *char = @string
  *ItemStart = *char

  Repeat
    
    Select *char\c

      Case Asc("'")
        bInQuote ! #True

      Case ',', #NUL

        If Not bInQuote Or *char\c = #NUL
          ItemLength = (*char - *ItemStart) / SizeOf(Character)
          result( ItemCount ) = PeekS(*ItemStart, ItemLength )
          *ItemStart = *char + SizeOf(Character)
          ItemCount + 1

          If *char\c = #NUL 
            Break
          EndIf

          If ItemCount > PreDimArray
            PreDimArray + 100
            ReDim result.s( PreDimArray )
          EndIf
        EndIf

      Default
        
    EndSelect

    *char + SizeOf(Character)
  ForEver
  
  ReDim result.s( ItemCount-1 )
  ProcedureReturn ItemCount
EndProcedure

Define i, ItemCount
Define TestString.s
Dim ItemArray.s(0)

Macro TEST( _string_ )
  Debug "TestString: " + _string_
  ItemCount = SeperateStrings( _string_, ItemArray() )
  Debug "Items found: " + Str(ItemCount)
  If ItemCount
    For i = 0 To ItemCount - 1
      Debug "Item " + Str(i) + ": " + ItemArray(i)
    Next i
  EndIf
  Debug ""
EndMacro

TEST( "'text',text" )
TEST( "2345,'Parameter',neu" )
TEST( "'Test, 4','Test, 2','Test, 3'"  )
TEST( "1234,'Test, 2, 3, 4',huhu,'irgend ein, text, mit, Kommas',neu" )

; Und hier ein Test mit falsch formatierten Strings!
TEST( "Text mit [single quote] 'innerhalb' des textes,test1,test2,'text, mit, kommans, und text nach dem [single quote]' falsches format,test3" )
TEST( "test1,test2,test3,'test ohne abschließendes [single quote] ...,test4,test5" )

Verfasst: 06.07.2009 11:50
von alter Mann
@Tsuki-Namida : dein Fehler liegt in Zeile 7

Code: Alles auswählen

;string$="666,'Test, 2, 3, 4',huhu$,'irgend ein, text, mit, Kommas',neu"
;string$="'Test, 4','Test, 2','Test, 3'"
string$="2345,'Parameter',neu"

  For i=1 To CountString(string$, ",")+1
  a$=StringField(string$, i, ",")
    If Left(a$,1)="'" And Right(a$,1)<> "'"
      Repeat
      i+1
        ;Debug a$
        a$+StringField(string$, i, ",")
        ;Debug a$
      Until Right(a$,1)="'"
    EndIf
  Next 
Debug a$

Verfasst: 10.07.2009 22:34
von Tsuki-Namida
supi danke es funktioniert super :)

ich kapiere nur irgentwie nicht den inhalt der procedure...