Volledige versie bekijken : String verdelen



osa
25 January 2010, 23:48
Hey!

Ik zoek al een tijdje naar een manier om een string te verdelen in twee andere strings, maar ik vind geen enkele (goede) oplossing. Duuus, ik dacht ik zal het ff posten op minatica en hopen dat iemand me verder kan helpen :D

Het gaat om VB.NET, en ik wil bv:



Dim TxT as String = "LOL - ROFL"

MessageBox.Show(CODECODECODE)Waar ipv CODECODECODE eigenlijk de code staat om enkel "LOL" weer te geven bv...

Ik had ooit een manier gezien, maar ondertussen al vergeten, waar je dit kan doen met String.Split ofzoiets, maar kweeni zeker..

Alvast bedankt!
Osa

carl
26 January 2010, 00:04
Public Function StripLeftNCharacters( _
ByVal vString As Variant _
, ByVal vNumChars As Variant _
) As Variant
Gebruiken;

String "123test"
-> dim res as String
res = StripLeft(of Right)NCharacters(String, 3)

-> res = "test"

PS: er zullen wss fouten in de code zitten, ik ben niet zo heel erg thuis in VB (het is miss niet de meest elegante methode, maar ik zie niet meteen iets staan om met een bepaalde delimeter ofzo te werken)

Edit: het kan dus veel simpeler, gewoon gebruik maken van de Substring methode ;) ( http://msdn.microsoft.com/en-us/library/system.string.substring.aspx )

osa
26 January 2010, 00:09
Deze code is zou inderdaad (ongeveer :p) werken, maar eigenlijk zoek ik meer een methode om de string te splitsen door middel van het "-" in het midden...

dus dat je de string verdeeld waar er een " - " staat, en dat je dan het linkse deel apart, en het rechte deel als een aparte string hebt

carl
26 January 2010, 00:17
http://msdn.microsoft.com/en-us/library/6x627e5f(VS.80).aspx
Ben je misschien iets mee ?

osa
26 January 2010, 01:23
Heb de site bekeken, maar werd er niet veel wijzer van.. Bestaat er geen eenvoudigere manier?

Dopey
26 January 2010, 02:52
Kijk hier (http://lmgtfy.com/?q=string+functions+vb.net) even ;)

carl
26 January 2010, 06:46
En wat is er moeilijk aan de methode substring ? Bij mijn weten zal dit de beste methode zijn hoor.
Mocht je niet begrijpen wat er staat:
Substring(tesplitsenstring, delimeter) en dan kan je evtnog een max. aantal strings opgeven en een compare method maar die heb je dus niet nodig.
Uit je voorbeeld:
SubString(txt,"-")

Martijnc
26 January 2010, 23:18
En wat is er moeilijk aan de methode substring ? Bij mijn weten zal dit de beste methode zijn hoor.
Mocht je niet begrijpen wat er staat:
Substring(tesplitsenstring, delimeter) en dan kan je evtnog een max. aantal strings opgeven en een compare method maar die heb je dus niet nodig.
Uit je voorbeeld:
SubString(txt,"-")

De substring (http://msdn.microsoft.com/en-us/library/system.string.substring.aspx) method neemt geen delimeter als parameter maar een startindex en optioneel een lengte, het is dus niet de beste methode, hij werkt hier namelijk niet.

Je kan de split (http://msdn.microsoft.com/en-us/library/b873y76a.aspx) method die Dopey poste hiervoor wel gebruiken. Zoals je kan lezen op MSDN geeft deze een array van strings, ieder element in die array is telkens een stukje van de gegeven string gesplitst op de delimeter (het streepje hier). Onderaan de pagina staat eveneens een voorbeeld.

carl
27 January 2010, 00:32
Bedankt, ik had de twee dus door mekaar geslagen :D blijkbaar was ik nog niet zo goed wakker om kwart voor zes ;)

osa
28 January 2010, 00:19
De substring (http://msdn.microsoft.com/en-us/library/system.string.substring.aspx) method neemt geen delimeter als parameter maar een startindex en optioneel een lengte, het is dus niet de beste methode, hij werkt hier namelijk niet.

Je kan de split (http://msdn.microsoft.com/en-us/library/b873y76a.aspx) method die Dopey poste hiervoor wel gebruiken. Zoals je kan lezen op MSDN geeft deze een array van strings, ieder element in die array is telkens een stukje van de gegeven string gesplitst op de delimeter (het streepje hier). Onderaan de pagina staat eveneens een voorbeeld.

Het verdelen lukt nu! Tis wel dat in de code:

Public Shared Sub Main()
Dim words As String = "This is a list of words, with: a bit of punctuation" + _
vbTab + "and a tab character."
Dim split As String() = words.Split(New [Char]() {" "c, ","c, "."c, ":"c, CChar(vbTab) })

For Each s As String In split
If s.Trim() <> "" Then
Console.WriteLine(s)
End If
Next s
End Suballe strings in de array worden weergegeven.. Ik heb enkel de eerste nodig, hoe doe je dat?
In de code worden er namelijk een For Each gebruikt, waardoor elke string wordt weergegeven...

Ik heb al geprobeert met s.Trim(1), en andere varianten, maar het werkte niet echt :D

Alvast bedankt! :)


@Carl: toch bedankt voor het verderhelpen, zelfs tijdens je slaap :p

ultddave
28 January 2010, 00:34
Het kan misschien wat ingewikkeld klinken (aangezien in de code "split" als variabele naam wordt gebruikt, maar ook de naam van de functie is).

Maar de variabele split => Dim split As String() is dus een Array (=lijst) van Strings. Als je de functie Split uitvoert, dan zal deze functie, elk onderdeel in die array stoppen. Dus als de string in 3 wordt gesplitst, gaat de Array 3 elementen bevatten.

Om die elementen aan te spreken moet je gewoon dit doen:
split(0)
split(1)
split(2)

Die For Each lus, is voor als je niet weet hoeveel elementen erin zitten en je ze allemaal wilt doorlopen voor iets op uit te voeren. ;)

Maar als je bijvoorbeeld weet dat de array maar maximum 2 elementen gaat bevatten. Dan kan je gewoon werken zonder lus. ;)

Als je enkel de eerste wilt, kan je "split(0)" gebruiken.

Mvg,
Dave

osa
29 January 2010, 12:05
Jah! Nu werkt alles!! :D

Bedankt!! :good: