digitalmars.D.learn - sscanf() equivalent for D using Phobos library?
- rocknroll714 <rocknroll714 gmail.com> Dec 03 2008
- "Jarrett Billingsley" <jarrett.billingsley gmail.com> Dec 03 2008
- Spacen Jasset <spacenjasset yahoo.co.uk> Dec 04 2008
- "Steven Schveighoffer" <schveiguy yahoo.com> Dec 04 2008
- BCS <ao pathlink.com> Dec 03 2008
- "Bill Baxter" <wbaxter gmail.com> Dec 04 2008
- BCS <ao pathlink.com> Dec 04 2008
- "Bill Baxter" <wbaxter gmail.com> Dec 04 2008
- BCS <ao pathlink.com> Dec 04 2008
- "Jarrett Billingsley" <jarrett.billingsley gmail.com> Dec 04 2008
- BCS <ao pathlink.com> Dec 04 2008
- "Jarrett Billingsley" <jarrett.billingsley gmail.com> Dec 05 2008
Hi. I discovered D recently and I am very, very impressed. I've
decided to switch from C/C++ over to D as my programming language of
choice. Right now I'm porting one of my C++ applications to D, and I
need some help with a simple conversion.
How would I do this:
if(sscanf(line, "%[^:]: %[^\r\n]", name, value) != 2) {...}
In D? I'm looping through a text file using the File.getline() command
and splitting each line into two separate variables with the sscanf
command. The if conditional check is to make sure the line is
formatted properly (the text file is the settings file for my
application).
Help please!
Dec 03 2008
On Wed, Dec 3, 2008 at 6:37 PM, rocknroll714 <rocknroll714 gmail.com> wrote:Hi. I discovered D recently and I am very, very impressed. I've decided to switch from C/C++ over to D as my programming language of choice. Right now I'm porting one of my C++ applications to D, and I need some help with a simple conversion. How would I do this: if(sscanf(line, "%[^:]: %[^\r\n]", name, value) != 2) {...} In D? I'm looping through a text file using the File.getline() command and splitting each line into two separate variables with the sscanf command. The if conditional check is to make sure the line is formatted properly (the text file is the settings file for my application). Help please!
import std.cstream;, and use din.readf. readf is documented in std.stream. :)
Dec 03 2008
Jarrett Billingsley wrote:On Wed, Dec 3, 2008 at 6:37 PM, rocknroll714 <rocknroll714 gmail.com> wrote:Hi. I discovered D recently and I am very, very impressed. I've decided to switch from C/C++ over to D as my programming language of choice. Right now I'm porting one of my C++ applications to D, and I need some help with a simple conversion. How would I do this: if(sscanf(line, "%[^:]: %[^\r\n]", name, value) != 2) {...} In D? I'm looping through a text file using the File.getline() command and splitting each line into two separate variables with the sscanf command. The if conditional check is to make sure the line is formatted properly (the text file is the settings file for my application). Help please!
import std.cstream;, and use din.readf. readf is documented in std.stream. :)
Dec 04 2008
"Spacen Jasset" wroteJarrett Billingsley wrote:On Wed, Dec 3, 2008 at 6:37 PM, rocknroll714 <rocknroll714 gmail.com> wrote:Hi. I discovered D recently and I am very, very impressed. I've decided to switch from C/C++ over to D as my programming language of choice. Right now I'm porting one of my C++ applications to D, and I need some help with a simple conversion. How would I do this: if(sscanf(line, "%[^:]: %[^\r\n]", name, value) != 2) {...} In D? I'm looping through a text file using the File.getline() command and splitting each line into two separate variables with the sscanf command. The if conditional check is to make sure the line is formatted properly (the text file is the settings file for my application). Help please!
import std.cstream;, and use din.readf. readf is documented in std.stream. :)
might be talking out of my ass, since I'm a tango user, but I think readf is a function used by all streams? So you just need to make that char[] into a stream, and then you get readf functionality, maybe. -Steve
Dec 04 2008
Reply to rocknroll714,Hi. I discovered D recently and I am very, very impressed. I've decided to switch from C/C++ over to D as my programming language of choice. Right now I'm porting one of my C++ applications to D, and I need some help with a simple conversion. How would I do this: if(sscanf(line, "%[^:]: %[^\r\n]", name, value) != 2) {...} In D? I'm looping through a text file using the File.getline() command and splitting each line into two separate variables with the sscanf command. The if conditional check is to make sure the line is formatted properly (the text file is the settings file for my application). Help please!
the quick and wrong way that works is to go find std.c.stdio and call the C sscanf function. (be sure to uses toStringz on the line arg and to allocate for the outputs as you would in c as for a native D equivalent... I'm not sure.
Dec 03 2008
On Fri, Dec 5, 2008 at 9:06 AM, Steven Schveighoffer <schveiguy yahoo.com> wrote:"Spacen Jasset" wroteJarrett Billingsley wrote:On Wed, Dec 3, 2008 at 6:37 PM, rocknroll714 <rocknroll714 gmail.com> wrote:Hi. I discovered D recently and I am very, very impressed. I've decided to switch from C/C++ over to D as my programming language of choice. Right now I'm porting one of my C++ applications to D, and I need some help with a simple conversion. How would I do this: if(sscanf(line, "%[^:]: %[^\r\n]", name, value) != 2) {...} In D? I'm looping through a text file using the File.getline() command and splitting each line into two separate variables with the sscanf command. The if conditional check is to make sure the line is formatted properly (the text file is the settings file for my application). Help please!
import std.cstream;, and use din.readf. readf is documented in std.stream. :)
might be talking out of my ass, since I'm a tango user, but I think readf is a function used by all streams? So you just need to make that char[] into a stream, and then you get readf functionality, maybe.
I think that's what std.stream.MemoryStream is for, but I might be talking out of my ass too because I've never used it. But it looks like you could say scope thestream = new std.stream.MemoryStream(thebuffer); then use thestream just like it was a file. You may have to cast(byte[])thebuffer, though. --bb
Dec 04 2008
Reply to Bill,On Wed, Dec 3, 2008 at 6:37 PM, rocknroll714 <rocknroll714 gmail.com> wrote:I'm looping through a text file using the File.getline() command
scope thestream = new std.stream.MemoryStream(thebuffer);
One new MemoeryStream per line!?!?
Dec 04 2008
Jarrett Billingsley wrote:I could never quite figure out why Stream.readf was not separated out into a separate function in std.format. It probably wouldn't be a lot of work.
I thought that was what std.unformat was for ? But I would have put readf in std.stdio too... --anders
Dec 05 2008
Jarrett Billingsley wrote:I could never quite figure out why Stream.readf was not separated out into a separate function in std.format. It probably wouldn't be a lot of work.
Such a library exists? It's not in the D docs. I don't see anything in the Phobos source dir either.
It was suggested for DMD 0.128, but I don't think it made it. --anders
Dec 05 2008
On Fri, Dec 5, 2008 at 11:09 AM, BCS <ao pathlink.com> wrote:Reply to Bill,On Wed, Dec 3, 2008 at 6:37 PM, rocknroll714 <rocknroll714 gmail.com> wrote:I'm looping through a text file using the File.getline() command
scope thestream = new std.stream.MemoryStream(thebuffer);
One new MemoeryStream per line!?!?
It's scope! No worries mate! ;-) But seriously, it does sound heavyweight compared to a single sscanf function call. Honestly, std.stream is just barely functional enough to write the simplest stream code, so I wouldn't be surprised if that's what it takes to scan strings with it. Not much worse than what it takes to do it with std::stream in c++ though. I'm really talking out of my ass though, because I can probably count on one hand how many times written code to use scanf or stringstream in my life. If I have to parse input I'm much more likely to reach for the regexp hammer or write a simpler parser. --bb
Dec 04 2008
Reply to Bill,On Fri, Dec 5, 2008 at 11:09 AM, BCS <ao pathlink.com> wrote:Reply to Bill,On Wed, Dec 3, 2008 at 6:37 PM, rocknroll714 <rocknroll714 gmail.com> wrote:I'm looping through a text file using the File.getline() command
But seriously, it does sound heavyweight compared to a single sscanf function call. Honestly, std.stream is just barely functional enough to write the simplest stream code, so I wouldn't be surprised if that's what it takes to scan strings with it. Not much worse than what it takes to do it with std::stream in c++ though. I'm really talking out of my ass though, because I can probably count on one hand how many times written code to use scanf or stringstream in my life. If I have to parse input I'm much more likely to reach for the regexp hammer or write a simpler parser. --bb
there should so be a std.scan.scan function to go with the std.format.format.
Dec 04 2008
On Thu, Dec 4, 2008 at 9:25 PM, Bill Baxter <wbaxter gmail.com> wrote:It's scope! No worries mate! ;-) But seriously, it does sound heavyweight compared to a single sscanf function call. Honestly, std.stream is just barely functional enough to write the simplest stream code, so I wouldn't be surprised if that's what it takes to scan strings with it. Not much worse than what it takes to do it with std::stream in c++ though. I'm really talking out of my ass though, because I can probably count on one hand how many times written code to use scanf or stringstream in my life. If I have to parse input I'm much more likely to reach for the regexp hammer or write a simpler parser.
I could never quite figure out why Stream.readf was not separated out into a separate function in std.format. It probably wouldn't be a lot of work.
Dec 04 2008
Reply to Jarrett,On Thu, Dec 4, 2008 at 9:25 PM, Bill Baxter <wbaxter gmail.com> wrote:It's scope! No worries mate! ;-) But seriously, it does sound heavyweight compared to a single sscanf function call. Honestly, std.stream is just barely functional enough to write the simplest stream code, so I wouldn't be surprised if that's what it takes to scan strings with it. Not much worse than what it takes to do it with std::stream in c++ though. I'm really talking out of my ass though, because I can probably count on one hand how many times written code to use scanf or stringstream in my life. If I have to parse input I'm much more likely to reach for the regexp hammer or write a simpler parser.
into a separate function in std.format. It probably wouldn't be a lot of work.
do it, submit patch, become hero. <G>
Dec 04 2008
On Fri, Dec 5, 2008 at 5:43 AM, Anders F Bj=F6rklund <afb algonet.se> wrote= :Jarrett Billingsley wrote:I could never quite figure out why Stream.readf was not separated out into a separate function in std.format. It probably wouldn't be a lot of work.
I thought that was what std.unformat was for ?
Such a library exists? It's not in the D docs. I don't see anything in the Phobos source dir either.But I would have put readf in std.stdio too... --anders
Dec 05 2008









"Steven Schveighoffer" <schveiguy yahoo.com> 