From owner-freebsd-questions@FreeBSD.ORG Thu Sep 18 07:20:44 2008 Return-Path: Delivered-To: freebsd-questions@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 582C81065674 for ; Thu, 18 Sep 2008 07:20:44 +0000 (UTC) (envelope-from MTaylor@bytecraft.com.au) Received: from bcmelmx.bytecraft.au.com (bcmelmx.bytecraft.au.com [203.39.118.2]) by mx1.freebsd.org (Postfix) with ESMTP id A2A698FC0C for ; Thu, 18 Sep 2008 07:20:43 +0000 (UTC) (envelope-from MTaylor@bytecraft.com.au) Received: from svmailmarshal.bytecraft.internal ([10.0.0.3]) by bcmelmx.bytecraft.au.com (8.13.8/8.12.11) with ESMTP id m8I6k1UY086704; Thu, 18 Sep 2008 16:46:46 +1000 (EST) (envelope-from MTaylor@bytecraft.com.au) Received: from svmailmel.bytecraft.internal (Not Verified[10.0.0.24]) by svmailmarshal.bytecraft.internal with MailMarshal (v6, 4, 1, 5038) id ; Thu, 18 Sep 2008 16:46:01 +1000 X-MimeOLE: Produced By Microsoft Exchange V6.5 Content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----_=_NextPart_001_01C9195A.3694FC8E" Date: Thu, 18 Sep 2008 16:46:00 +1000 Message-ID: X-MS-Has-Attach: yes X-MS-TNEF-Correlator: Thread-Topic: How to split a C string by a string? thread-index: AckY3RgsmViS6ZKfRQ650jK8CC6rigAfG7fw From: "Murray Taylor" To: "Giorgos Keramidas" , Cc: freebsd-questions@freebsd.org Subject: RE: How to split a C string by a string? X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Sep 2008 07:20:44 -0000 This is a multi-part message in MIME format. ------_=_NextPart_001_01C9195A.3694FC8E Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable > -----Original Message----- > From: owner-freebsd-questions@freebsd.org [mailto:owner-freebsd-questions@freebsd.org] On Behalf Of Giorgos Keramidas > Sent: Thursday, 18 September 2008 1:49 AM > To: unga888@yahoo.com > Cc: freebsd-questions@freebsd.org > Subject: Re: How to split a C string by a string? >=20 > On Wed, 17 Sep 2008 06:32:56 -0700 (PDT), Unga wrote: > > --- On Wed, 9/17/08, Giorgos Keramidas wrote: > >> From: Giorgos Keramidas > >> Subject: Re: How to split a C string by a string? > >> To: unga888@yahoo.com > >> Cc: freebsd-questions@freebsd.org > >> Date: Wednesday, September 17, 2008, 6:17 PM On Wed, 17 Sep 2008=20 > >> 00:45:46 -0700 (PDT), Unga wrote: > >> > Hi all > >> > > >> > I'm writing an C application on FreeBSD 7+. I need to split a=20 > >> > string by another string (ie. the delimiter is "xxx") similar to=20 > >> > strtok split a string by a single char. Is there a standard=20 > >> > function or is there a FreeBSD functions for this? > >> > >> You can use strstr() to look for the "xxx" delimited and split that > >> that point: [snip sample code]>=20 > > > Thank you very much for the reply. That is, there is no existing split=20 > > function. So I got to write to my own :) >=20 > Yes, you have to roll our own. The standard C library doesn't have=20 > string splitting functions with a string as delimiter. It includes strtok(),=20 > strspn() and strcspn(), but these work with character sets as delimiters, not strings... Hi, the attached code does string splitting and insertion it looks for a specific string, copies from start up to that=20 point to a workspace, inserts the new text, then appends=20 the remainder, starting AFTER the search string fragment. with a bit of work you could make it do your string splitting.... Murray Taylor Bytecraft Systems Special Projects Engineer P: +61 3 8710 0600 D: +61 3 9238 4275 F: +61 3 9238 4140 -- =20|_|0|_| "Absence of evidence =20|_|_|0| is not evidence of absence" =20|0|0|0| Carl Sagan --------------------------------------------------------------- The information transmitted in this e-mail is for the exclusive use of the intended addressee and may contain confidential and/or privileged material. Any review, re-transmission, dissemination or other use of it, or the taking of any action in reliance upon this information by persons and/or entities other than the intended recipient is prohibited. If you received this in error, please inform the sender and/or addressee immediately and delete the material.=20 E-mails may not be secure, may contain computer viruses and may be corrupted in transmission. Please carefully check this e-mail (and any attachment) accordingly. No warranties are given and no liability is accepted for any loss or damage caused by such matters. --------------------------------------------------------------- ### This e-mail message has been scanned for Viruses by Bytecraft ### ------_=_NextPart_001_01C9195A.3694FC8E Content-Type: application/octet-stream; name="test.c" Content-Transfer-Encoding: base64 Content-Description: test.c Content-Disposition: attachment; filename="test.c" I2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8c3RkbGliLmg+DQojaW5jbHVkZSA8c3RyaW5n Lmg+DQoNCg0KY2hhcgkJdGVtcGxhdGUgIFtdID0gIlwNCi8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKlxuXA0KICogU1RBTkRBUkQgQ0xPU0VEXG5cDQogKi9cblwNClxu XA0KVG86ICRBRERSJFxuXA0KU3ViamVjdDogUmVxdWVzdFxuXA0KXG5cDQpcInN0YXJ0LXJlcXVl c3RcIlxuXA0KSm9iIElkOiRKT0JJRCRcblwNClN0YXR1czpDbG9zZWRcblwNClwiZW5kLXJlcXVl c3RcIlxuXA0KTWVzc2FnZSBzZW50OiAkREFURVRJTUUkXG5cDQpcblwNCi8qXG5cDQogKiBTVEFO REFSRCBFVEFcblwNCiAqL1xuXA0KXG5cDQpGcm9tOiBiY2FsbEBiY2FsbC5uZXRcblwNClRvOiAk QUREUiRcblwNClN1YmplY3Q6IFJlcXVlc3RcblwNClxuXA0KXCJzdGFydC1yZXF1ZXN0XCJcblwN CkpvYiBJZDokSk9CSUQkXG5cDQpTdGF0dXM6JFNUQVRVUyRcblwNClRpbWVzdGFtcDogJERBVEVU SU1FJFxuXA0KRVRBOiAkRVRBJFxuXA0KXCJlbmQtcmVxdWVzdFwiXG5cDQoiOw0KDQpjaGFyCSp0 YWdzW10gPSB7IiRBRERSJCIsICIkSk9CSUQkIiwgIiRTVEFUVVMkIiwgIiREQVRFVElNRSQiLCAi JFBBUlRCVUYkIiwgIiRFVEEkIiB9Ow0KDQoNCmludAkJbnRhZ3MgPSBzaXplb2YodGFncykgLyBz aXplb2YoY2hhciAqKTsNCg0KbWFpbigpDQp7DQoNCgljaGFyCQkqdmFsICAgICAgW10gPSB7ICJt anRAZXhhbXBsZS5jb20iLCI5ODc2NSIsICJPbnNpdGUiLCAiMjAwOC0wOS0xOCAxNjowNDo0MSIs DQoJCQkJCSJTb21lIGxvbmcgcGFydCBidWZmZXIgc3R1ZmYiLCAiMjAxMC0wMS0wMSAwMDowMDow MCJ9Ow0KCWludAkJaTsNCgljaGFyCQlCdWZfQSAgICAgWzIwNDhdOw0KDQoJcHJpbnRmKCJzaXpl b2YgdGFncyA9ICVkXG4iLCBudGFncyk7DQoNCg0KCXN0cmNweShCdWZfQSwgdGVtcGxhdGUpOw0K DQoJZm9yKCBpID0gMDsgaSA8IG50YWdzIDsgaSsrICkgew0KCQlwcmludGYoImNhbGxpbmcgc3Vi c3RcbiIpOw0KCQlzdWJzdChCdWZfQSwgc2l6ZW9mKEJ1Zl9BKSwgdGFnc1tpXSwgdmFsW2ldKTsN Cgl9DQoNCglwcmludGYoIiVzIiwgQnVmX0EpOw0KfQ0KDQoNCi8qKg0KICogIHN1YnN0aXR1dGUg YWxsIG9jY3VyZW5jZXMgb2YgdGFnIGluIHRlbXBsYXRlIHdpdGggcmVwbGFjZW1lbnQNCiAqICBw dXQgaXQgYWxsIGludG8gb3V0YnVmDQogKg0KICogaW5wdXRzOiBvdXRidWYgcy9iIHNldHVwIHdp dGggY3VycmVudCB0ZXh0IGJvZHkuDQogKiAgIG9uIGZpcnN0IHRhZyAtIGNvcHkgaW5pdGlhbCB0 ZW1wbGF0ZSB0byBvdXRidWYgdGhlbiBjYWxsIHN1YnN0DQogKiAgIG9uIHN1YnNlcXVlbnQgdGFn cywganVzdCB1c2UgY2FsbCBzdWJzdCB3aXRoIGV4aXN0aW5nIG91dGJ1Zi4NCiAqDQogKiAgcmV0 dXJucyBudW1iZXIgb2Ygc3Vic3RpdHV0aW9ucw0KICovDQppbnQNCnN1YnN0KGNoYXIgKm91dGJ1 ZiwgaW50IG91dGJ1ZnNpemUsIGNoYXIgKnRhZywgY2hhciAqcmVwbGFjZW1lbnQpDQp7DQoJY2hh ciAgICAgICAgICAgKmhpdDsNCglpbnQJCWNvdW50ID0gMDsNCglpbnQJCXN0YXJ0X29mX3N1YnN0 aXR1dGlvbjsNCgljaGFyICp0bXA7DQoNCg0KCXByaW50ZiggIlRhZyA9ICVzLCBWYWwgPSAlc1xu IiwgdGFnLCByZXBsYWNlbWVudCk7DQoNCgl0bXAgPSAoY2hhciAqKW1hbGxvYyhvdXRidWZzaXpl ICogMik7DQoNCgl3aGlsZSAoMSkgew0KCQkvKiBjb3B5IG91dGJ1ZiAtPiB0bXAgKi8NCgkJc3Ry Y3B5KHRtcCwgb3V0YnVmKTsNCg0KCQkvKiBmaW5kIHRhZyAqLw0KCQlpZiAoKGhpdCA9IHN0cnN0 cih0bXAsIHRhZykpID09IE5VTEwpIHsNCgkJCS8qIG5vdCBmb3VuZCAtPiByZXR1cm4gKG91dGJ1 ZiBpcyBjb3JyZWN0KSAqLw0KCQkJYnJlYWs7DQoJCX0NCgkJLyogZm91bmQgLSBjb250aW51ZSAq Lw0KCQlzdGFydF9vZl9zdWJzdGl0dXRpb24gPSAoaW50KSgoaGl0KSAtICh0bXApKTsNCg0KCQkv Kg0KCQkgKiBjb3B5IDFzdCBwYXJ0IHRtcCAtPiBvdXRidWYgLS0gbm90IG5lY2Vzc2FyeSA/DQoJ CSAqLw0KCQlzdHJsY3B5KG91dGJ1ZiwgdG1wLCBzdGFydF9vZl9zdWJzdGl0dXRpb24gKyAxKTsN Cg0KCQkvKiBhcHBlbmQgZGF0YSBpbnRvIG91dGJ1ZiAqLw0KCQlzdHJsY2F0KG91dGJ1ZiwgcmVw bGFjZW1lbnQsIG91dGJ1ZnNpemUpOw0KDQoJCS8qIGFwcGVuZCByZW1haW5kZXIgb2YgdG1wIGFm dGVyIHRhZ2xlbiBjaGFycyAqLw0KCQlzdHJsY2F0KG91dGJ1ZiwgdG1wICsgKHN0YXJ0X29mX3N1 YnN0aXR1dGlvbiArIHN0cmxlbih0YWcpKSwgb3V0YnVmc2l6ZSk7DQoNCgkJLyogbG9vcCAqLw0K CQljb3VudCsrOw0KCX0NCg0KCS8qIGNsZWFuIHVwIGFkIHJldHVybiAqLw0KCWZyZWUodG1wKTsN Cg0KCXJldHVybiAoY291bnQpOw0KfQ0K ------_=_NextPart_001_01C9195A.3694FC8E--