Parsing Problem.....

W

Wallace

Hai all,

In VC++,

CString str = " 4 76 1";
int nNo = atoi(str.Mid(0,8));

it returns nNo = 4 as output.... it returns the first integer
occurence and neglects the remaining character....


Similarly, In C#.NET I do the same as following....

string str = " 4 76 1";
int nNo = int.Parse(str.Substring(0, 8));

it is throwing the exception as "Input string is not in correct
format....."

How can i get the output as 4(i.e nNo = 4) in c#.net ????
Is there any other function other than parse, to fulfil this??

Please help... Thanx in advance...
Urgent..... Looking forward for the ur response....
 
J

Jon Skeet [C# MVP]

Wallace wrote:

How can i get the output as 4(i.e nNo = 4) in c#.net ????
Is there any other function other than parse, to fulfil this??

Well, you could split the string on spaces. Look at the docs for
String.Split.

Jon
 
A

Ajith

Hi Wallace,

string str = " 4 76 1";
int i=0;
string str_new;

while(str != ' ')
str_new = str;

int nNo = int.Parse(str_new);


you will get the output
nNo=4


Regards,
Ajith
 
J

Jon Skeet [C# MVP]

Ajith said:
string str = " 4 76 1";
int i=0;
string str_new;

while(str != ' ')
str_new = str;

int nNo = int.Parse(str_new);


Did you try this code?

1) If str doesn't start with a space, it will tight-loop
2) str_new is never assigned
3) The string indexer is read-only.

I assume you meant code more like:
using System;
using System.Text;

class Test
{
static void Main()
{
string str = " 4 76 1";

StringBuilder builder = new StringBuilder();

int i=0;
// Get past leading spaces
while (str==' ')
{
i++;
}
// Copy non-spaces
while (str!=' ')
{
builder.Append(str);
i++;
}

int nNo = int.Parse(builder.ToString());
Console.WriteLine (nNo);
}
}

It's still probably not the code I'd use, but it does at least work.

Jon
 
W

Wallace

thanx for ur suggestions and this one works fine....

string strInput1 = " 4 73 5 ");

int i1 = 0;
string strTemp1 = "";
string [] strArr1 = strInput1.Split(' ');
int Len1 = strArr1.Length;
for(i1 = 0; i1 < Len1; i1++)
{
strTemp1 = strArr1.GetValue(i1).ToString();
if( strTemp1 != "")
break;
}
if( i1 == Len1 )
{
nNoOfRecs = 0;
}
else
{
nNoOfRecs = Convert.ToInt32(strTemp1);
}
 
J

Jon Skeet [C# MVP]

Wallace said:
thanx for ur suggestions and this one works fine....

string strInput1 = " 4 73 5 ");

int i1 = 0;
string strTemp1 = "";
string [] strArr1 = strInput1.Split(' ');
int Len1 = strArr1.Length;
for(i1 = 0; i1 < Len1; i1++)
{
strTemp1 = strArr1.GetValue(i1).ToString();
if( strTemp1 != "")
break;
}
if( i1 == Len1 )
{
nNoOfRecs = 0;
}
else
{
nNoOfRecs = Convert.ToInt32(strTemp1);
}

Here's a slightly more compact version which does the same thing:

nNoOfRecs = 0;

foreach (string x in strInput1.Split(' '))
{
if (x != "")
{
nNoOfRecs = int.Parse(x);
break;
}
}

Jon
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top