Hello,
Anybody know if anything exists like sscanf in c.
I found a few things OL but most were pretty old. Maybe something has
come along since 2004?
Thanks
Mike 20 21057
"AMP" <am******@gmail.comwrote in message
news:11**********************@k70g2000cwa.googlegr oups.com...
Hello,
Anybody know if anything exists like sscanf in c.
I found a few things OL but most were pretty old. Maybe something has
come along since 2004?
Thanks
Mike
Yup, regular expressions :) Regex library.
HTH,
Mythran
"AMP" <am******@gmail.comwrote in message
news:11**********************@k70g2000cwa.googlegr oups.com...
| Hello,
| Anybody know if anything exists like sscanf in c.
| I found a few things OL but most were pretty old. Maybe something has
| come along since 2004?
| Thanks
| Mike
|
Search the doc's for String.Format, this is the closest you can get.
Willy.
"Willy Denoyette [MVP]" <wi*************@telenet.bewrote in message
news:en**************@TK2MSFTNGP05.phx.gbl...
>
"AMP" <am******@gmail.comwrote in message
news:11**********************@k70g2000cwa.googlegr oups.com...
| Hello,
| Anybody know if anything exists like sscanf in c.
| I found a few things OL but most were pretty old. Maybe something has
| come along since 2004?
| Thanks
| Mike
|
Search the doc's for String.Format, this is the closest you can get.
Willy.
If I remember correctly, sscanf doesn't format output, it reads input from a
pre-formatted string. For that, you can use regular expressions.
HTH,
Mythran
"Mythran" <ki********@hotmail.comwrote in message
news:Ow**************@TK2MSFTNGP03.phx.gbl...
|
| "Willy Denoyette [MVP]" <wi*************@telenet.bewrote in message
| news:en**************@TK2MSFTNGP05.phx.gbl...
| >
| "AMP" <am******@gmail.comwrote in message
| news:11**********************@k70g2000cwa.googlegr oups.com...
| | Hello,
| | Anybody know if anything exists like sscanf in c.
| | I found a few things OL but most were pretty old. Maybe something has
| | come along since 2004?
| | Thanks
| | Mike
| |
| >
| Search the doc's for String.Format, this is the closest you can get.
| >
| Willy.
| >
| >
| >
|
| If I remember correctly, sscanf doesn't format output, it reads input from
a
| pre-formatted string. For that, you can use regular expressions.
|
| HTH,
| Mythran
|
|
Sorry I misread the OP's post, was thinking of scanf, anyway you don't need
regex.
Willy.
Mythran wrote:
"Willy Denoyette [MVP]" <wi*************@telenet.bewrote in message
news:en**************@TK2MSFTNGP05.phx.gbl...
"AMP" <am******@gmail.comwrote in message
news:11**********************@k70g2000cwa.googlegr oups.com...
| Hello,
| Anybody know if anything exists like sscanf in c.
| I found a few things OL but most were pretty old. Maybe something has
| come along since 2004?
| Thanks
| Mike
|
Search the doc's for String.Format, this is the closest you can get.
Willy.
If I remember correctly, sscanf doesn't format output, it reads input from a
pre-formatted string. For that, you can use regular expressions.
You can also use a StringReader
"AMP" <am******@gmail.comwrote in message
news:11**********************@k70g2000cwa.googlegr oups.com...
| Hello,
| Anybody know if anything exists like sscanf in c.
| I found a few things OL but most were pretty old. Maybe something has
| come along since 2004?
| Thanks
| Mike
|
Ignore my previous post.
Using Parse and TryParse methods you can achieve the same (and more) results
as sscanf in C.
Consider following sample....
static void Main()
{
string tokenString = "12 25 56 4";
string [] split = tokenString.Split(new Char [] {' '});
int Int32Val;
char charVal;
float floatVal;
bool result = Int32.TryParse(split[0], NumberStyles.Integer, null, out
Int32Val);
if(result)
Console.WriteLine(Int32Val);
result = Char.TryParse(split[1][0].ToString(), out charVal);
if(result)
Console.WriteLine(charVal);
result = Single.TryParse(split[2], NumberStyles.Float, null, out
floatVal);
if(result)
Console.WriteLine("{0:f}", floatVal);
}
This should output:
12
2
56,00
Willy.
"Willy Denoyette [MVP]" <wi*************@telenet.bewrote in message
news:eQ**************@TK2MSFTNGP05.phx.gbl...
>
"AMP" <am******@gmail.comwrote in message
news:11**********************@k70g2000cwa.googlegr oups.com...
| Hello,
| Anybody know if anything exists like sscanf in c.
| I found a few things OL but most were pretty old. Maybe something has
| come along since 2004?
| Thanks
| Mike
|
Ignore my previous post.
Using Parse and TryParse methods you can achieve the same (and more)
results
as sscanf in C.
Consider following sample....
static void Main()
{
string tokenString = "12 25 56 4";
string [] split = tokenString.Split(new Char [] {' '});
int Int32Val;
char charVal;
float floatVal;
bool result = Int32.TryParse(split[0], NumberStyles.Integer, null,
out
Int32Val);
if(result)
Console.WriteLine(Int32Val);
result = Char.TryParse(split[1][0].ToString(), out charVal);
if(result)
Console.WriteLine(charVal);
result = Single.TryParse(split[2], NumberStyles.Float, null, out
floatVal);
if(result)
Console.WriteLine("{0:f}", floatVal);
}
This should output:
12
2
56,00
Willy.
Well, suppose you have the following string:
"Item #1: $32.53 Item #2: $32.54 Sub-Total: $65.07"
With sscanf, I believe you can do something like:
sscanf(buff, "Item #1: $%d Item #2: $%d Sub-Total: $%d", value1, value2,
value3);
printf("Sub-Total: %d", value3);
Using regex, you can do something similar...and parsing out yourself would
be more trickier...
HTH,
Mythran
"Mythran" <ki********@hotmail.comwrote in message
news:uS**************@TK2MSFTNGP06.phx.gbl...
|
| "Willy Denoyette [MVP]" <wi*************@telenet.bewrote in message
| news:eQ**************@TK2MSFTNGP05.phx.gbl...
| >
| "AMP" <am******@gmail.comwrote in message
| news:11**********************@k70g2000cwa.googlegr oups.com...
| | Hello,
| | Anybody know if anything exists like sscanf in c.
| | I found a few things OL but most were pretty old. Maybe something has
| | come along since 2004?
| | Thanks
| | Mike
| |
| >
| Ignore my previous post.
| Using Parse and TryParse methods you can achieve the same (and more)
| results
| as sscanf in C.
| Consider following sample....
| >
| static void Main()
| {
| string tokenString = "12 25 56 4";
| string [] split = tokenString.Split(new Char [] {' '});
| int Int32Val;
| char charVal;
| float floatVal;
| bool result = Int32.TryParse(split[0], NumberStyles.Integer, null,
| out
| Int32Val);
| if(result)
| Console.WriteLine(Int32Val);
| result = Char.TryParse(split[1][0].ToString(), out charVal);
| if(result)
| Console.WriteLine(charVal);
| result = Single.TryParse(split[2], NumberStyles.Float, null, out
| floatVal);
| if(result)
| Console.WriteLine("{0:f}", floatVal);
| }
| >
| >
| This should output:
| >
| 12
| 2
| 56,00
| >
| Willy.
| >
| >
| >
| >
|
| Well, suppose you have the following string:
|
| "Item #1: $32.53 Item #2: $32.54 Sub-Total: $65.07"
|
| With sscanf, I believe you can do something like:
|
|
| sscanf(buff, "Item #1: $%d Item #2: $%d Sub-Total: $%d", value1, value2,
| value3);
| printf("Sub-Total: %d", value3);
|
|
| Using regex, you can do something similar...and parsing out yourself would
| be more trickier...
|
| HTH,
| Mythran
|
I prefer using TryParse over RegEx, just a matter of taste, and quite faster
;-)
// suppose the current culture is en-US...
Decimal decVal;
string tokenString = "Item #1: $32.53 Item #2: $32.54 Sub-Total:
$65.07";
string [] split = tokenString.Split(new Char [] {' '});
bool result = Decimal.TryParse(split[7], NumberStyles.Currency, null,
out decVal);
if(result)
Console.WriteLine("Sub-total: {0:c}", decVal);
Not really tricky IMO.
Willy.
"Willy Denoyette [MVP]" <wi*************@telenet.bewrote in message
news:Ow****************@TK2MSFTNGP02.phx.gbl...
>
"Mythran" <ki********@hotmail.comwrote in message
news:uS**************@TK2MSFTNGP06.phx.gbl...
|
| "Willy Denoyette [MVP]" <wi*************@telenet.bewrote in message
| news:eQ**************@TK2MSFTNGP05.phx.gbl...
| >
| "AMP" <am******@gmail.comwrote in message
| news:11**********************@k70g2000cwa.googlegr oups.com...
| | Hello,
| | Anybody know if anything exists like sscanf in c.
| | I found a few things OL but most were pretty old. Maybe something
has
| | come along since 2004?
| | Thanks
| | Mike
| |
| >
| Ignore my previous post.
| Using Parse and TryParse methods you can achieve the same (and more)
| results
| as sscanf in C.
| Consider following sample....
| >
| static void Main()
| {
| string tokenString = "12 25 56 4";
| string [] split = tokenString.Split(new Char [] {' '});
| int Int32Val;
| char charVal;
| float floatVal;
| bool result = Int32.TryParse(split[0], NumberStyles.Integer,
null,
| out
| Int32Val);
| if(result)
| Console.WriteLine(Int32Val);
| result = Char.TryParse(split[1][0].ToString(), out charVal);
| if(result)
| Console.WriteLine(charVal);
| result = Single.TryParse(split[2], NumberStyles.Float, null, out
| floatVal);
| if(result)
| Console.WriteLine("{0:f}", floatVal);
| }
| >
| >
| This should output:
| >
| 12
| 2
| 56,00
| >
| Willy.
| >
| >
| >
| >
|
| Well, suppose you have the following string:
|
| "Item #1: $32.53 Item #2: $32.54 Sub-Total: $65.07"
|
| With sscanf, I believe you can do something like:
|
|
| sscanf(buff, "Item #1: $%d Item #2: $%d Sub-Total: $%d", value1, value2,
| value3);
| printf("Sub-Total: %d", value3);
|
|
| Using regex, you can do something similar...and parsing out yourself
would
| be more trickier...
|
| HTH,
| Mythran
|
I prefer using TryParse over RegEx, just a matter of taste, and quite
faster
;-)
// suppose the current culture is en-US...
Decimal decVal;
string tokenString = "Item #1: $32.53 Item #2: $32.54 Sub-Total:
$65.07";
string [] split = tokenString.Split(new Char [] {' '});
bool result = Decimal.TryParse(split[7], NumberStyles.Currency, null,
out decVal);
if(result)
Console.WriteLine("Sub-total: {0:c}", decVal);
Not really tricky IMO.
Willy.
grr, that's not my point. The OP requested similar functionality to sscanf.
The closest he can get is by using Regex...sure, you can parse it yourself
into an array and access the individual elements, but that's not what the OP
was originally asking AFAIK (even though, it should work for the OP).
Anywho :)
Mythran
"Mythran" <ki********@hotmail.comwrote in message
news:%2****************@TK2MSFTNGP02.phx.gbl...
|
| "Willy Denoyette [MVP]" <wi*************@telenet.bewrote in message
| news:Ow****************@TK2MSFTNGP02.phx.gbl...
| >
| "Mythran" <ki********@hotmail.comwrote in message
| news:uS**************@TK2MSFTNGP06.phx.gbl...
| |
| | "Willy Denoyette [MVP]" <wi*************@telenet.bewrote in message
| | news:eQ**************@TK2MSFTNGP05.phx.gbl...
| | >
| | "AMP" <am******@gmail.comwrote in message
| | news:11**********************@k70g2000cwa.googlegr oups.com...
| | | Hello,
| | | Anybody know if anything exists like sscanf in c.
| | | I found a few things OL but most were pretty old. Maybe something
| has
| | | come along since 2004?
| | | Thanks
| | | Mike
| | |
| | >
| | Ignore my previous post.
| | Using Parse and TryParse methods you can achieve the same (and more)
| | results
| | as sscanf in C.
| | Consider following sample....
| | >
| | static void Main()
| | {
| | string tokenString = "12 25 56 4";
| | string [] split = tokenString.Split(new Char [] {' '});
| | int Int32Val;
| | char charVal;
| | float floatVal;
| | bool result = Int32.TryParse(split[0], NumberStyles.Integer,
| null,
| | out
| | Int32Val);
| | if(result)
| | Console.WriteLine(Int32Val);
| | result = Char.TryParse(split[1][0].ToString(), out charVal);
| | if(result)
| | Console.WriteLine(charVal);
| | result = Single.TryParse(split[2], NumberStyles.Float, null,
out
| | floatVal);
| | if(result)
| | Console.WriteLine("{0:f}", floatVal);
| | }
| | >
| | >
| | This should output:
| | >
| | 12
| | 2
| | 56,00
| | >
| | Willy.
| | >
| | >
| | >
| | >
| |
| | Well, suppose you have the following string:
| |
| | "Item #1: $32.53 Item #2: $32.54 Sub-Total: $65.07"
| |
| | With sscanf, I believe you can do something like:
| |
| |
| | sscanf(buff, "Item #1: $%d Item #2: $%d Sub-Total: $%d", value1,
value2,
| | value3);
| | printf("Sub-Total: %d", value3);
| |
| |
| | Using regex, you can do something similar...and parsing out yourself
| would
| | be more trickier...
| |
| | HTH,
| | Mythran
| |
| >
| I prefer using TryParse over RegEx, just a matter of taste, and quite
| faster
| ;-)
| >
| // suppose the current culture is en-US...
| Decimal decVal;
| string tokenString = "Item #1: $32.53 Item #2: $32.54 Sub-Total:
| $65.07";
| string [] split = tokenString.Split(new Char [] {' '});
| bool result = Decimal.TryParse(split[7], NumberStyles.Currency,
null,
| out decVal);
| if(result)
| Console.WriteLine("Sub-total: {0:c}", decVal);
| >
| Not really tricky IMO.
| >
| Willy.
| >
| >
|
| grr, that's not my point. The OP requested similar functionality to
sscanf.
| The closest he can get is by using Regex...sure, you can parse it yourself
| into an array and access the individual elements, but that's not what the
OP
| was originally asking AFAIK (even though, it should work for the OP).
| Anywho :)
|
| Mythran
|
Sorry, but I'm affraid we'll have to agree to disagree. I don't see how a
simple C library 'function' like sscanf compares to Regex, a 'library' and a
complex engine on it's own, it's too heavy weight compared to sscanf.
I know you can achieve the same using RegEx, but I can do exactly that using
some minimal code arround the individual type's Parse and TryParse methods.
Notice, that the OP asks about sscanf, this means he has a C background,
chances are that he know little/nothing about RegEx, maybe he will prefer to
use Parse and TryParse, the choice will be on him.
Willy.
|
"Willy Denoyette [MVP]" <wi*************@telenet.bewrote in message
news:ew**************@TK2MSFTNGP02.phx.gbl...
>
"Mythran" <ki********@hotmail.comwrote in message
news:%2****************@TK2MSFTNGP02.phx.gbl...
|
| "Willy Denoyette [MVP]" <wi*************@telenet.bewrote in message
| news:Ow****************@TK2MSFTNGP02.phx.gbl...
| >
| "Mythran" <ki********@hotmail.comwrote in message
| news:uS**************@TK2MSFTNGP06.phx.gbl...
| |
| | "Willy Denoyette [MVP]" <wi*************@telenet.bewrote in
message
| | news:eQ**************@TK2MSFTNGP05.phx.gbl...
| | >
| | "AMP" <am******@gmail.comwrote in message
| | news:11**********************@k70g2000cwa.googlegr oups.com...
| | | Hello,
| | | Anybody know if anything exists like sscanf in c.
| | | I found a few things OL but most were pretty old. Maybe
something
| has
| | | come along since 2004?
| | | Thanks
| | | Mike
| | |
| | >
| | Ignore my previous post.
| | Using Parse and TryParse methods you can achieve the same (and
more)
| | results
| | as sscanf in C.
| | Consider following sample....
| | >
| | static void Main()
| | {
| | string tokenString = "12 25 56 4";
| | string [] split = tokenString.Split(new Char [] {' '});
| | int Int32Val;
| | char charVal;
| | float floatVal;
| | bool result = Int32.TryParse(split[0], NumberStyles.Integer,
| null,
| | out
| | Int32Val);
| | if(result)
| | Console.WriteLine(Int32Val);
| | result = Char.TryParse(split[1][0].ToString(), out charVal);
| | if(result)
| | Console.WriteLine(charVal);
| | result = Single.TryParse(split[2], NumberStyles.Float, null,
out
| | floatVal);
| | if(result)
| | Console.WriteLine("{0:f}", floatVal);
| | }
| | >
| | >
| | This should output:
| | >
| | 12
| | 2
| | 56,00
| | >
| | Willy.
| | >
| | >
| | >
| | >
| |
| | Well, suppose you have the following string:
| |
| | "Item #1: $32.53 Item #2: $32.54 Sub-Total: $65.07"
| |
| | With sscanf, I believe you can do something like:
| |
| |
| | sscanf(buff, "Item #1: $%d Item #2: $%d Sub-Total: $%d", value1,
value2,
| | value3);
| | printf("Sub-Total: %d", value3);
| |
| |
| | Using regex, you can do something similar...and parsing out yourself
| would
| | be more trickier...
| |
| | HTH,
| | Mythran
| |
| >
| I prefer using TryParse over RegEx, just a matter of taste, and quite
| faster
| ;-)
| >
| // suppose the current culture is en-US...
| Decimal decVal;
| string tokenString = "Item #1: $32.53 Item #2: $32.54 Sub-Total:
| $65.07";
| string [] split = tokenString.Split(new Char [] {' '});
| bool result = Decimal.TryParse(split[7], NumberStyles.Currency,
null,
| out decVal);
| if(result)
| Console.WriteLine("Sub-total: {0:c}", decVal);
| >
| Not really tricky IMO.
| >
| Willy.
| >
| >
|
| grr, that's not my point. The OP requested similar functionality to
sscanf.
| The closest he can get is by using Regex...sure, you can parse it
yourself
| into an array and access the individual elements, but that's not what
the
OP
| was originally asking AFAIK (even though, it should work for the OP).
| Anywho :)
|
| Mythran
|
Sorry, but I'm affraid we'll have to agree to disagree. I don't see how a
simple C library 'function' like sscanf compares to Regex, a 'library' and
a
complex engine on it's own, it's too heavy weight compared to sscanf.
I know you can achieve the same using RegEx, but I can do exactly that
using
some minimal code arround the individual type's Parse and TryParse
methods.
Notice, that the OP asks about sscanf, this means he has a C background,
chances are that he know little/nothing about RegEx, maybe he will prefer
to
use Parse and TryParse, the choice will be on him.
Willy.
|
I do see where you are coming from. And yes, I will continue to disagree as
we have previously agreed to allow :) On second thought, maybe I will agree
with you about parsing out manually depending on the amount of data the OP
needs to parse. If it is a larger amount of data, and performance isn't an
issue, then I would then go with Regex for this.
:)
Mythran
"Mythran" <ki********@hotmail.comwrote in message
news:uw****************@TK2MSFTNGP04.phx.gbl...
|
| I do see where you are coming from. And yes, I will continue to disagree
as
| we have previously agreed to allow :) On second thought, maybe I will
agree
| with you about parsing out manually depending on the amount of data the OP
| needs to parse.
sscanf (and family) is often used for very simple parsing in C. Something
like this:
// query registry value.
if( ERROR_SUCCESS == RegQueryValueExA( hKey, "whateverString", NULL,
NULL, (LPBYTE)szResult, &dwResult ) )
{
// parse result
if(sscanf( szResult, "%x", &dwResult ) == 0)
...
is very common, and the equivalent in C# looks something like...
int dwResult ;
string installResult = rk.GetValue("whateverString");
bool result = Int32.TryParse(installResult, NumberStyles.HexNumber,
null, out dwResult );
if(result)
// hexVal contains a correct hex value.
...
This illustrates the equivalence of sscanf and Parse (or preferably:
TryParse).
I (nor you!) would never use RegEx for this.
If it is a larger amount of data, and performance isn't an
| issue, then I would then go with Regex for this.
|
| :)
|
Agreed, but that's not my point.
Willy.
Hello,
I am the OP.
I am beginning to understand but I have the following:
sscanf(strdata[1], "%lx\n", currentAddr);
currentAddr is an unsigned long in c(which is a uint in c#) 4 bytes,
correct?
I am trying to get the hang of this, but I could use an example with
something I'm using.
I have to convert about 8 of these to dfferent formats, so its
important I can understand what I;m doing.
Thanks
Mike
Mythran wrote:
"Willy Denoyette [MVP]" <wi*************@telenet.bewrote in message
news:ew**************@TK2MSFTNGP02.phx.gbl...
"Mythran" <ki********@hotmail.comwrote in message
news:%2****************@TK2MSFTNGP02.phx.gbl...
|
| "Willy Denoyette [MVP]" <wi*************@telenet.bewrote in message
| news:Ow****************@TK2MSFTNGP02.phx.gbl...
| >
| "Mythran" <ki********@hotmail.comwrote in message
| news:uS**************@TK2MSFTNGP06.phx.gbl...
| |
| | "Willy Denoyette [MVP]" <wi*************@telenet.bewrote in
message
| | news:eQ**************@TK2MSFTNGP05.phx.gbl...
| | >
| | "AMP" <am******@gmail.comwrote in message
| | news:11**********************@k70g2000cwa.googlegr oups.com...
| | | Hello,
| | | Anybody know if anything exists like sscanf in c.
| | | I found a few things OL but most were pretty old. Maybe
something
| has
| | | come along since 2004?
| | | Thanks
| | | Mike
| | |
| | >
| | Ignore my previous post.
| | Using Parse and TryParse methods you can achieve the same (and
more)
| | results
| | as sscanf in C.
| | Consider following sample....
| | >
| | static void Main()
| | {
| | string tokenString = "12 25 56 4";
| | string [] split = tokenString.Split(new Char [] {' '});
| | int Int32Val;
| | char charVal;
| | float floatVal;
| | bool result = Int32.TryParse(split[0], NumberStyles.Integer,
| null,
| | out
| | Int32Val);
| | if(result)
| | Console.WriteLine(Int32Val);
| | result = Char.TryParse(split[1][0].ToString(), out charVal);
| | if(result)
| | Console.WriteLine(charVal);
| | result = Single.TryParse(split[2], NumberStyles.Float, null,
out
| | floatVal);
| | if(result)
| | Console.WriteLine("{0:f}", floatVal);
| | }
| | >
| | >
| | This should output:
| | >
| | 12
| | 2
| | 56,00
| | >
| | Willy.
| | >
| | >
| | >
| | >
| |
| | Well, suppose you have the following string:
| |
| | "Item #1: $32.53 Item #2: $32.54 Sub-Total: $65.07"
| |
| | With sscanf, I believe you can do something like:
| |
| |
| | sscanf(buff, "Item #1: $%d Item #2: $%d Sub-Total: $%d", value1,
value2,
| | value3);
| | printf("Sub-Total: %d", value3);
| |
| |
| | Using regex, you can do something similar...and parsing out yourself
| would
| | be more trickier...
| |
| | HTH,
| | Mythran
| |
| >
| I prefer using TryParse over RegEx, just a matter of taste, and quite
| faster
| ;-)
| >
| // suppose the current culture is en-US...
| Decimal decVal;
| string tokenString = "Item #1: $32.53 Item #2: $32.54 Sub-Total:
| $65.07";
| string [] split = tokenString.Split(new Char [] {' '});
| bool result = Decimal.TryParse(split[7], NumberStyles.Currency,
null,
| out decVal);
| if(result)
| Console.WriteLine("Sub-total: {0:c}", decVal);
| >
| Not really tricky IMO.
| >
| Willy.
| >
| >
|
| grr, that's not my point. The OP requested similar functionality to
sscanf.
| The closest he can get is by using Regex...sure, you can parse it
yourself
| into an array and access the individual elements, but that's not what
the
OP
| was originally asking AFAIK (even though, it should work for the OP).
| Anywho :)
|
| Mythran
|
Sorry, but I'm affraid we'll have to agree to disagree. I don't see how a
simple C library 'function' like sscanf compares to Regex, a 'library' and
a
complex engine on it's own, it's too heavy weight compared to sscanf.
I know you can achieve the same using RegEx, but I can do exactly that
using
some minimal code arround the individual type's Parse and TryParse
methods.
Notice, that the OP asks about sscanf, this means he has a C background,
chances are that he know little/nothing about RegEx, maybe he will prefer
to
use Parse and TryParse, the choice will be on him.
Willy.
|
I do see where you are coming from. And yes, I will continue to disagree as
we have previously agreed to allow :) On second thought, maybe I will agree
with you about parsing out manually depending on the amount of data the OP
needs to parse. If it is a larger amount of data, and performance isn't an
issue, then I would then go with Regex for this.
:)
Mythran
Also, theres this qualifier (3), which is the max number to read, in
the following that I would have to deal with.
sscanf(strdata[linepos], "%3x", blkout[dataframelen]);
I appreciate EVERONES help with this.
AMP wrote:
Hello,
I am the OP.
I am beginning to understand but I have the following:
sscanf(strdata[1], "%lx\n", currentAddr);
currentAddr is an unsigned long in c(which is a uint in c#) 4 bytes,
correct?
I am trying to get the hang of this, but I could use an example with
something I'm using.
I have to convert about 8 of these to dfferent formats, so its
important I can understand what I;m doing.
Thanks
Mike
Mythran wrote:
"Willy Denoyette [MVP]" <wi*************@telenet.bewrote in message
news:ew**************@TK2MSFTNGP02.phx.gbl...
>
"Mythran" <ki********@hotmail.comwrote in message
news:%2****************@TK2MSFTNGP02.phx.gbl...
|
| "Willy Denoyette [MVP]" <wi*************@telenet.bewrote in message
| news:Ow****************@TK2MSFTNGP02.phx.gbl...
| >
| "Mythran" <ki********@hotmail.comwrote in message
| news:uS**************@TK2MSFTNGP06.phx.gbl...
| |
| | "Willy Denoyette [MVP]" <wi*************@telenet.bewrote in
message
| | news:eQ**************@TK2MSFTNGP05.phx.gbl...
| | >
| | "AMP" <am******@gmail.comwrote in message
| | news:11**********************@k70g2000cwa.googlegr oups.com...
| | | Hello,
| | | Anybody know if anything exists like sscanf in c.
| | | I found a few things OL but most were pretty old. Maybe
something
| has
| | | come along since 2004?
| | | Thanks
| | | Mike
| | |
| | >
| | Ignore my previous post.
| | Using Parse and TryParse methods you can achieve the same (and
more)
| | results
| | as sscanf in C.
| | Consider following sample....
| | >
| | static void Main()
| | {
| | string tokenString = "12 25 56 4";
| | string [] split = tokenString.Split(new Char [] {' '});
| | int Int32Val;
| | char charVal;
| | float floatVal;
| | bool result = Int32.TryParse(split[0], NumberStyles.Integer,
| null,
| | out
| | Int32Val);
| | if(result)
| | Console.WriteLine(Int32Val);
| | result = Char.TryParse(split[1][0].ToString(), out charVal);
| | if(result)
| | Console.WriteLine(charVal);
| | result = Single.TryParse(split[2], NumberStyles.Float, null,
out
| | floatVal);
| | if(result)
| | Console.WriteLine("{0:f}", floatVal);
| | }
| | >
| | >
| | This should output:
| | >
| | 12
| | 2
| | 56,00
| | >
| | Willy.
| | >
| | >
| | >
| | >
| |
| | Well, suppose you have the following string:
| |
| | "Item #1: $32.53 Item #2: $32.54 Sub-Total: $65.07"
| |
| | With sscanf, I believe you can do something like:
| |
| |
| | sscanf(buff, "Item #1: $%d Item #2: $%d Sub-Total: $%d", value1,
value2,
| | value3);
| | printf("Sub-Total: %d", value3);
| |
| |
| | Using regex, you can do something similar...and parsing out yourself
| would
| | be more trickier...
| |
| | HTH,
| | Mythran
| |
| >
| I prefer using TryParse over RegEx, just a matter of taste, and quite
| faster
| ;-)
| >
| // suppose the current culture is en-US...
| Decimal decVal;
| string tokenString = "Item #1: $32.53 Item #2: $32.54 Sub-Total:
| $65.07";
| string [] split = tokenString.Split(new Char [] {' '});
| bool result = Decimal.TryParse(split[7], NumberStyles.Currency,
null,
| out decVal);
| if(result)
| Console.WriteLine("Sub-total: {0:c}", decVal);
| >
| Not really tricky IMO.
| >
| Willy.
| >
| >
|
| grr, that's not my point. The OP requested similar functionality to
sscanf.
| The closest he can get is by using Regex...sure, you can parse it
yourself
| into an array and access the individual elements, but that's not what
the
OP
| was originally asking AFAIK (even though, it should work for the OP).
| Anywho :)
|
| Mythran
|
>
Sorry, but I'm affraid we'll have to agree to disagree. I don't see how a
simple C library 'function' like sscanf compares to Regex, a 'library' and
a
complex engine on it's own, it's too heavy weight compared to sscanf.
>
I know you can achieve the same using RegEx, but I can do exactly that
using
some minimal code arround the individual type's Parse and TryParse
methods.
Notice, that the OP asks about sscanf, this means he has a C background,
chances are that he know little/nothing about RegEx, maybe he will prefer
to
use Parse and TryParse, the choice will be on him.
>
>
Willy.
>
|
>
>
I do see where you are coming from. And yes, I will continue to disagree as
we have previously agreed to allow :) On second thought, maybe I will agree
with you about parsing out manually depending on the amount of data the OP
needs to parse. If it is a larger amount of data, and performance isn't an
issue, then I would then go with Regex for this.
:)
Mythran
For the following:
sscanf(strdata[linepos], "%3x", blkout[dataframelen]);
What it looks like to me, is we are taking (strdata[linepos],
formatting it and storing it in blkout[dataframelen]. So were not just
checking something, we are moving the values to another Array and
formatting them at the same time.Am I correct?
And no I'm not a c programmer, I'm trying to convert a c program to c#,
so I'm learning c at the same time, so Im looking to do the same exact
thing in c# that has already been implemented in the c version.
And with everyones help I have learned a great deal along the way. I am
about 90% done.
Thanks Mike
AMP wrote:
Also, theres this qualifier (3), which is the max number to read, in
the following that I would have to deal with.
> sscanf(strdata[linepos], "%3x", blkout[dataframelen]);
I appreciate EVERONES help with this.
AMP wrote:
Hello,
I am the OP.
I am beginning to understand but I have the following:
sscanf(strdata[1], "%lx\n", currentAddr);
currentAddr is an unsigned long in c(which is a uint in c#) 4 bytes,
correct?
I am trying to get the hang of this, but I could use an example with
something I'm using.
I have to convert about 8 of these to dfferent formats, so its
important I can understand what I;m doing.
Thanks
Mike
Mythran wrote:
"Willy Denoyette [MVP]" <wi*************@telenet.bewrote in message
news:ew**************@TK2MSFTNGP02.phx.gbl...
"Mythran" <ki********@hotmail.comwrote in message
news:%2****************@TK2MSFTNGP02.phx.gbl...
|
| "Willy Denoyette [MVP]" <wi*************@telenet.bewrote in message
| news:Ow****************@TK2MSFTNGP02.phx.gbl...
| >
| "Mythran" <ki********@hotmail.comwrote in message
| news:uS**************@TK2MSFTNGP06.phx.gbl...
| |
| | "Willy Denoyette [MVP]" <wi*************@telenet.bewrote in
message
| | news:eQ**************@TK2MSFTNGP05.phx.gbl...
| | >
| | "AMP" <am******@gmail.comwrote in message
| | news:11**********************@k70g2000cwa.googlegr oups.com...
| | | Hello,
| | | Anybody know if anything exists like sscanf in c.
| | | I found a few things OL but most were pretty old. Maybe
something
| has
| | | come along since 2004?
| | | Thanks
| | | Mike
| | |
| | >
| | Ignore my previous post.
| | Using Parse and TryParse methods you can achieve the same (and
more)
| | results
| | as sscanf in C.
| | Consider following sample....
| | >
| | static void Main()
| | {
| | string tokenString = "12 25 56 4";
| | string [] split = tokenString.Split(new Char [] {' '});
| | int Int32Val;
| | char charVal;
| | float floatVal;
| | bool result = Int32.TryParse(split[0], NumberStyles.Integer,
| null,
| | out
| | Int32Val);
| | if(result)
| | Console.WriteLine(Int32Val);
| | result = Char.TryParse(split[1][0].ToString(), out charVal);
| | if(result)
| | Console.WriteLine(charVal);
| | result = Single.TryParse(split[2], NumberStyles.Float, null,
out
| | floatVal);
| | if(result)
| | Console.WriteLine("{0:f}", floatVal);
| | }
| | >
| | >
| | This should output:
| | >
| | 12
| | 2
| | 56,00
| | >
| | Willy.
| | >
| | >
| | >
| | >
| |
| | Well, suppose you have the following string:
| |
| | "Item #1: $32.53 Item #2: $32.54 Sub-Total: $65.07"
| |
| | With sscanf, I believe you can do something like:
| |
| |
| | sscanf(buff, "Item #1: $%d Item #2: $%d Sub-Total: $%d", value1,
value2,
| | value3);
| | printf("Sub-Total: %d", value3);
| |
| |
| | Using regex, you can do something similar...and parsing out yourself
| would
| | be more trickier...
| |
| | HTH,
| | Mythran
| |
| >
| I prefer using TryParse over RegEx, just a matter of taste, and quite
| faster
| ;-)
| >
| // suppose the current culture is en-US...
| Decimal decVal;
| string tokenString = "Item #1: $32.53 Item #2: $32.54 Sub-Total:
| $65.07";
| string [] split = tokenString.Split(new Char [] {' '});
| bool result = Decimal.TryParse(split[7], NumberStyles.Currency,
null,
| out decVal);
| if(result)
| Console.WriteLine("Sub-total: {0:c}", decVal);
| >
| Not really tricky IMO.
| >
| Willy.
| >
| >
|
| grr, that's not my point. The OP requested similar functionality to
sscanf.
| The closest he can get is by using Regex...sure, you can parse it
yourself
| into an array and access the individual elements, but that's not what
the
OP
| was originally asking AFAIK (even though, it should work for the OP).
| Anywho :)
|
| Mythran
|
Sorry, but I'm affraid we'll have to agree to disagree. I don't see how a
simple C library 'function' like sscanf compares to Regex, a 'library' and
a
complex engine on it's own, it's too heavy weight compared to sscanf.
I know you can achieve the same using RegEx, but I can do exactly that
using
some minimal code arround the individual type's Parse and TryParse
methods.
Notice, that the OP asks about sscanf, this means he has a C background,
chances are that he know little/nothing about RegEx, maybe he will prefer
to
use Parse and TryParse, the choice will be on him.
Willy.
|
>
I do see where you are coming from. And yes, I will continue to disagree as
we have previously agreed to allow :) On second thought, maybe I will agree
with you about parsing out manually depending on the amount of data the OP
needs to parse. If it is a larger amount of data, and performance isn't an
issue, then I would then go with Regex for this.
>
:)
>
Mythran
"AMP" <am******@gmail.comwrote in message
news:11**********************@k70g2000cwa.googlegr oups.com...
| Hello,
| I am the OP.
| I am beginning to understand but I have the following:
| sscanf(strdata[1], "%lx\n", currentAddr);
|
| currentAddr is an unsigned long in c(which is a uint in c#) 4 bytes,
| correct?
Yep.
| I am trying to get the hang of this, but I could use an example with
| something I'm using.
as per my previous sample...
uint currentAddr;
string strData = " ff12fffe ";
bool result = UInt32.TryParse(strData.SubString(1), NumberStyles.HexNumber,
null, out currentAddr);
if(result)
// parsed correctly.
else
// failed to parse.
or, you can use the Parse method.
try {
hexVal = UInt32.Parse(installResult.Substring(1),
NumberStyles.HexNumber);
}
Willy.
"AMP" <am******@gmail.comwrote in message
news:11**********************@i3g2000cwc.googlegro ups.com...
| Also, theres this qualifier (3), which is the max number to read, in
| the following that I would have to deal with.
| sscanf(strdata[linepos], "%3x", blkout[dataframelen]);
|
| I appreciate EVERONES help with this.
|
|
string strdata = " ffc2fffe Hello ";
uint hexVal;
UInt32.TryParse(installResult.Substring(1, 3), NumberStyles.HexNumber, null,
out hexVal);
hexVal will contain 000000ffc;
But why don't you read the docs and try yourself?, it takes 5 minutes to
test all your cases, waiting for an answer may take hours.
Willy.
I have been trying, but there is a problem with the type conversions
also
sscanf(strdata[linepos], "%3x", blkout[dataframelen]);
strdata[linepos] is a char Array
%3x is "Read a Max of 3 Chars and format it as an int."
blkout[dataframelen]); is a byte Array
So to me I see:Read a max of 3 chars from strdata, format it as an int
and store it in blkout[dataframelen](a byte) I dont know how to do
that.
The entire section of code:
/* Transfer data in line into blkout: */
for(linepos= 0;
linepos < linelen-3; linepos+= 3, dataframelen++)
{
sscanf(&strdata[linepos], "%3x", &blkout[dataframelen]);
/* (Max 16 bytes per line!) */
}
Thanks
Mike
Willy Denoyette [MVP] wrote:
"AMP" <am******@gmail.comwrote in message
news:11**********************@i3g2000cwc.googlegro ups.com...
| Also, theres this qualifier (3), which is the max number to read, in
| the following that I would have to deal with.
| sscanf(strdata[linepos], "%3x", blkout[dataframelen]);
|
| I appreciate EVERONES help with this.
|
|
string strdata = " ffc2fffe Hello ";
uint hexVal;
UInt32.TryParse(installResult.Substring(1, 3), NumberStyles.HexNumber, null,
out hexVal);
hexVal will contain 000000ffc;
But why don't you read the docs and try yourself?, it takes 5 minutes to
test all your cases, waiting for an answer may take hours.
Willy.
"AMP" <am******@gmail.comwrote in message
news:11*********************@k70g2000cwa.googlegro ups.com...
|I have been trying, but there is a problem with the type conversions
| also
| sscanf(strdata[linepos], "%3x", blkout[dataframelen]);
|
| strdata[linepos] is a char Array
| %3x is "Read a Max of 3 Chars and format it as an int."
| blkout[dataframelen]); is a byte Array
|
| So to me I see:Read a max of 3 chars from strdata, format it as an int
| and store it in blkout[dataframelen](a byte) I dont know how to do
| that.
|
| The entire section of code:
| /* Transfer data in line into blkout: */
| for(linepos= 0;
| linepos < linelen-3; linepos+= 3, dataframelen++)
| {
| sscanf(&strdata[linepos], "%3x", &blkout[dataframelen]);
| /* (Max 16 bytes per line!) */
| }
|
Well, consider following sample...here I assume that the input buffer looks
like:
buffer = " ff c2 ff fe de de ba ba cc 12 25 66 9a 63 55 87";
....
byte[] ahexVal = new byte[16];
installResult = " ff c2 ff fe de de ba ba cc 12 25 66 9a 63 55 87";
for(int n = 0, m = 0; n < 48; n+=3, m++)
result = Byte.TryParse(installResult.Substring(n, 3),
NumberStyles.HexNumber, null, out ahexVal[m]);
foreach(Byte b in ahexVal)
Console.Write("{0:x}", b);
So what I'm doing is parsing the buffer, checking for a valid hex number
sequences (every third character starting from 0 with a width of 3
characters)). Every valid hex value will be stored as a byte value in an
array of bytes.
But, I would urge you to start thinking in terms of C# and the framework.
While both C# and C share some common grounds as a language, the C library
and the FCL on the other hand do not, that means that you should not try to
mimic C contructs in C#, it's a waste of time.
Also don't think you can learn both C and C# at the same time, you'll have
to make a choice, and because you are here, your choice should be C#.
Start with C# and spend most of your time with the FCL, it offers a much
richer set of API's than the C library.
Willy.
Willy and all
Thanks so much for all your help.
My problem was I didnt understand the function.
I had a couple "c" guys take the time to explain it.
>From there I used your example and it worked great.
Mike
Willy Denoyette [MVP] wrote:
"AMP" <am******@gmail.comwrote in message
news:11*********************@k70g2000cwa.googlegro ups.com...
|I have been trying, but there is a problem with the type conversions
| also
| sscanf(strdata[linepos], "%3x", blkout[dataframelen]);
|
| strdata[linepos] is a char Array
| %3x is "Read a Max of 3 Chars and format it as an int."
| blkout[dataframelen]); is a byte Array
|
| So to me I see:Read a max of 3 chars from strdata, format it as an int
| and store it in blkout[dataframelen](a byte) I dont know how to do
| that.
|
| The entire section of code:
| /* Transfer data in line into blkout: */
| for(linepos= 0;
| linepos < linelen-3; linepos+= 3, dataframelen++)
| {
| sscanf(&strdata[linepos], "%3x", &blkout[dataframelen]);
| /* (Max 16 bytes per line!) */
| }
|
Well, consider following sample...here I assume that the input buffer looks
like:
buffer = " ff c2 ff fe de de ba ba cc 12 25 66 9a 63 55 87";
...
byte[] ahexVal = new byte[16];
installResult = " ff c2 ff fe de de ba ba cc 12 25 66 9a 63 55 87";
for(int n = 0, m = 0; n < 48; n+=3, m++)
result = Byte.TryParse(installResult.Substring(n, 3),
NumberStyles.HexNumber, null, out ahexVal[m]);
foreach(Byte b in ahexVal)
Console.Write("{0:x}", b);
So what I'm doing is parsing the buffer, checking for a valid hex number
sequences (every third character starting from 0 with a width of 3
characters)). Every valid hex value will be stored as a byte value in an
array of bytes.
But, I would urge you to start thinking in terms of C# and the framework.
While both C# and C share some common grounds as a language, the C library
and the FCL on the other hand do not, that means that you should not try to
mimic C contructs in C#, it's a waste of time.
Also don't think you can learn both C and C# at the same time, you'll have
to make a choice, and because you are here, your choice should be C#.
Start with C# and spend most of your time with the FCL, it offers a much
richer set of API's than the C library.
Willy.
This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics
by: Allan Bruce |
last post by:
If I have
sscanf("FL:%s:%d:%s\n", lGuid, &lID, lFileName);
and the last string contains spaces, e.g. my complete string
"FL:1234ABCD:3:FileName...
|
by: smshahriar |
last post by:
Hi,
I want to scan from the following string all the hex numbers and
populate an array of integers:
0x27 0x00
0x30 0x00
0x33 0x00
0x36 0x00
|
by: baumann |
last post by:
hi,
1) first test program code
#include <stdio.h>
int main(void)
{
char * file = "aaa 23 32 m 2.23 ammasd";
int i2,i3;
|
by: baumann |
last post by:
hi all
there has 2 program
1) the first test program code
#include <stdio.h>
int main(void)
{
|
by: jchludzinski |
last post by:
I'm using strtok() to parse thru a line and read different numbers:
float value;
char *token;
token = strtok( line, " " );
....
sscanf(...
|
by: Superfox il Volpone |
last post by:
Hello
I have some problem with sscanf, I tryed this code but it doesn't works
:
char* stringa = "18/2005"
char mese; char anno;
int...
|
by: Artemio |
last post by:
Dear folks,
I need some help with using the sscanf() function. I need to parse a
string which has several parameters given in a "A=... B=......
|
by: Alex Mathieu |
last post by:
Hi,
using sscanf, I'm trying to retrieve something, but nothing seems to
work.
Here's the pattern: SS%*sþ0þ%6s
Heres the data:...
|
by: gio |
last post by:
suppose I have:
....
char str1;
char str2;
int ret;
fgets(str1, LEN, stdin); //str1 can contain just '\n' and '\0'
ret=sscanf(str1, "%s",...
|
by: tammygombez |
last post by:
Hey fellow JavaFX developers,
I'm currently working on a project that involves using a ComboBox in JavaFX, and I've run into a bit of an issue....
|
by: concettolabs |
last post by:
In today's business world, businesses are increasingly turning to PowerApps to develop custom business applications. PowerApps is a powerful tool...
|
by: teenabhardwaj |
last post by:
How would one discover a valid source for learning news, comfort, and help for engineering designs? Covering through piles of books takes a lot of...
|
by: Kemmylinns12 |
last post by:
Blockchain technology has emerged as a transformative force in the business world, offering unprecedented opportunities for innovation and...
|
by: CD Tom |
last post by:
This happens in runtime 2013 and 2016. When a report is run and then closed a toolbar shows up and the only way to get it to go away is to right...
|
by: CD Tom |
last post by:
This only shows up in access runtime. When a user select a report from my report menu when they close the report they get a menu I've called Add-ins...
|
by: Naresh1 |
last post by:
What is WebLogic Admin Training?
WebLogic Admin Training is a specialized program designed to equip individuals with the skills and knowledge...
|
by: antdb |
last post by:
Ⅰ. Advantage of AntDB: hyper-convergence + streaming processing engine
In the overall architecture, a new "hyper-convergence" concept was...
|
by: Matthew3360 |
last post by:
Hi there. I have been struggling to find out how to use a variable as my location in my header redirect function.
Here is my code.
...
| |