Schrift
[thread]1151[/thread]

string splitten/in 3 teile teilen

Leser: 1


<< >> 8 Einträge, 1 Seite
kale_1990
 2006-10-18 18:11
#11504 #11504
User since
2006-09-12
104 Artikel
BenutzerIn
[default_avatar]
hallo,

ich brauche eine routine die einen string übergeben bekommt. in diesem string steht "REM IF variable operator 'vergleichstext'" es ist ein einzeiliger string(char line[512];)

nun muss diese programm "REM IF" komplett wegsplitten und variable operator und 'vergleichstext' in 3 verschiedene variablen schreiben, danach muss es schaun
wenn operator = '==' dann muss variable == 'vergleichstext' sein
wenn operator = '!=' dann muss variable != 'vergleichstext' sein
wenn dann die variable == 'vergleichstext' bzw. nicht gleich 'vergleichstext' soll der wert 1 von der routine zurückgegeben werden!
ich hab schon was versucht aber ich komm auf kein ergebnis...wär echt cool wenn mir jemand helfen könnt....wenigstens ansatzweise!

danke schon im vorraus an alle die sich beteiligen!!!!
THERE'S MORE THAN ONE WAY TO DO IT - TMTOWTDI

EASY THINGS SHOULD BE EASY - HARD THINGS SHOULD BE POSSIBLE
Taulmarill
 2006-10-18 18:22
#11505 #11505
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
hm, an die werte zu kommen ist nicht besonders schwierig:
Code: (dl )
1
2
3
4
5
if ( $_[0] =~ /REM IF ([^ ]*) ([^ ]*) \'([^']*)\'/ ) {
$variable = $1;
$operator = $2;
$text = $3;
}


oder so ähnlich. anstatt eines variablennamens solltest du übrigens besser einen hashkey verwenden und die zu prüfenden texte unter eben diesen keys in einen hash legen. das ist wesendlich sicherer als direkt einen variablennamen zu verwenden.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
kale_1990
 2006-10-18 18:28
#11506 #11506
User since
2006-09-12
104 Artikel
BenutzerIn
[default_avatar]
reguläre ausdrücke in c?? gibts da sowas?
THERE'S MORE THAN ONE WAY TO DO IT - TMTOWTDI

EASY THINGS SHOULD BE EASY - HARD THINGS SHOULD BE POSSIBLE
Taulmarill
 2006-10-18 18:33
#11507 #11507
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
ups, das war ja im C-forum. hab ich ganz übersehen....

ähm, ja, reguläre ausdrücke gibt's afaik in vielen sprachen. perl hat da nur eine der besten umsetzungen. wenn du auf einer unix-kiste entwickelst, gibt mal einfach man regex ein.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
kale_1990
 2006-10-18 18:46
#11508 #11508
User since
2006-09-12
104 Artikel
BenutzerIn
[default_avatar]
ne leider keine unix kiste...:(
THERE'S MORE THAN ONE WAY TO DO IT - TMTOWTDI

EASY THINGS SHOULD BE EASY - HARD THINGS SHOULD BE POSSIBLE
esskar
 2006-10-18 19:05
#11509 #11509
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
Code: (dl )
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
void FreeSplit(char **data) {
int i;

if(data == NULL) return;

for(i = 0; i < 3; i++) {
if(data[i]) free(data[i]);
}

free(data);
}

char **SplitConstruct(const char *var) {
char **retval = NULL;
const char *ptr = NULL;
int len = 0, i = 0;

ptr = strstr(var, "REM IF ");
if(ptr == NULL) return NULL;
ptr += 7; // 7 == strlen("REM IF ");

retval = (char **)malloc(sizeof(char *) * 3);
memset(retval, 0, sizeof(char *) * 3);

for(i = 0; i < 3; i++) {
ptr = strchr(ptr, ' ');
if(ptr == NULL) break;

len = ptr - var;
retval[i] = (char *)malloc(len + 16);
strncpy(retval[i], ptr, len);

ptr += len + 1;
} while(0);

if(i != 3) { // error
FreeSplit(retval);
retval = NULL;
}

return retval;
}


ungetestet!
kale_1990
 2006-10-19 10:09
#11510 #11510
User since
2006-09-12
104 Artikel
BenutzerIn
[default_avatar]
danke und es liefert 1 zurück wenn die bedingung nach "rem if " wahr ist oder?
THERE'S MORE THAN ONE WAY TO DO IT - TMTOWTDI

EASY THINGS SHOULD BE EASY - HARD THINGS SHOULD BE POSSIBLE
esskar
 2006-10-19 14:44
#11511 #11511
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
nein, es splitten den string nur und gibt dir ein array von strings zurück
den vergleich musst du noch machen
<< >> 8 Einträge, 1 Seite



View all threads created 2006-10-18 18:11.