[delphi] String splitsen

Pagina: 1
Acties:
  • 180 views sinds 30-01-2008
  • Reageer

  • _JGC_
  • Registratie: Juli 2000
  • Laatst online: 07:17
Ik gebruik NMHTTP om van mijn website iets te downloaden, dit lukt op zich al aardig, maar het komt terug als 1 lange string.
Wat ik wil doen is dat hele ding regel voor regel in een TStringList te zetten.
Met PHP gebruik ik altijd de functie explode(), waar je een string en een delimiter op kunt geven, zodat ie een array maakt van alle regels.
Is er ook zoiets in Delphi? Of mag ik het lekker zelf doen met een keurig loopje?

  • Onno
  • Registratie: Juni 1999
  • Niet online
Op donderdag 29 november 2001 23:21 schreef _JGC_ het volgende:
Of mag ik het lekker zelf doen met een keurig loopje?
Jij hebt het door. :)

Verwijderd

Op donderdag 29 november 2001 23:21 schreef _JGC_ het volgende:
Ik gebruik NMHTTP om van mijn website iets te downloaden, dit lukt op zich al aardig, maar het komt terug als 1 lange string.
Wat ik wil doen is dat hele ding regel voor regel in een TStringList te zetten.
Met PHP gebruik ik altijd de functie explode(), waar je een string en een delimiter op kunt geven, zodat ie een array maakt van alle regels.
Is er ook zoiets in Delphi? Of mag ik het lekker zelf doen met een keurig loopje?
Wat voor delimiter geef je dan op in die functie, want als er in die string al newlines staan dan kun je gewoon die string in de text propertie van een StringList zetten en dan kun je vervolgens de aparte regels via de Strings propertie van je stringlist benaderen. Daar heb je in Delphi dus helemaal géén functie voor nodig... >:)

  • Crysania
  • Registratie: September 2000
  • Nu online
ik heb hier wel ff een stringsplit in javascript, is niet veel werk om om te zetten naar delphi
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function stringSplit( string, delimiter ) 
/*
pre:  -
post: returns an Array that contains parts of the string splitted by the delimiter
*/
{
    if( string == null || string == "" ) {
    return null ;
    } else if( string.split != null ) {
    return string.split( delimiter ) ;
    } else {
    var ar = new Array() ;
    var i = 0 ;
    var start = 0 ;
    while( start >= 0 && start < string.length ) {
        var end = string.indexOf( delimiter, start ) ;
        if( end >= 0 ) {
        ar[i++] = string.substring( start, end ) ;
        start = end+1 ;
        } else {
        ar[i++] = string.substring( start, string.length ) ;
        start = -1 ;
        }
    }
    return ar ;
    }
}

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:04

Creepy

Tactical Espionage Splatterer

Kijk eens naar pos, copy en delete (zie anders help -> string handling routines)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • SilentStorm
  • Registratie: November 2000
  • Laatst online: 18-03 14:45

SilentStorm

z.o.z

Ik heb zelf ook ooit eens zoiets gemaakt, maar heb na een kwartiertje zinloos zoeken in 5min die functie gemaakt.. Ik had zelf alleen het voordeel dat mijn delimiter op een nieuwe regel begon en ik dus niet de hele regel naar een bepaalde string hoefde af te zoeken.. maar dat is ook niet zo moeilijk te implementeren.

Je moet gewoon alles in een Stringlist zetten (lijstje.text := uitvoervanjevorigefunctie) en dan regel voor regel uitlezen (for i := 0 to lijsje.lines.count) of via lijstje.text (dus niet eerst opdelen in 'enters') en controleren op je delim. (checkopdelim(lijstje.lines[i]) of checkopdelim(lijstje.text). (eigen functie uiteraard). Daarin moet je m elke letter die die controleerd over laten zetten in n nieuwe String en als ie een delim tegenkomt exporteer je die.

Localhost is where the heart is


Verwijderd

Wanneer je toegang hebt tot de source van Borland's Classes unit, kijk dan 's naar de source van TStrings.SetTextStr.
En slimme en razendsnelle manier om een string te splitsen op een bep. karakter!

Zij hebben 'm keihard geimplementeerd voor CR, LF of CRLF, maar voor andere karakters is 't gemakkelijk aan te passen. 't wordt iets lastiger wanneer je een delimiter hebt van 2 of meer karakters, maar ook daarop is 'ie wel aan te passen.

  • SilentStorm
  • Registratie: November 2000
  • Laatst online: 18-03 14:45

SilentStorm

z.o.z

hoef je geen toegang tot te hebben.. copy en paste, aanpassen en een eigen unit maken >:)

Localhost is where the heart is

Pagina: 1