Extracting Numbers From A String

I am trying to write a parser program. In this program it will read a string similar to.

#46 = IFCCARTESIANPOINT ( (0.0000000000000000000,0.0000000000000000000,1.000000000000000000 ) ) ;

I am trying to extract the three numbers as x,y,z values, only they sometimes vary in length. The code I have below converts the string into a char array, and then prints the three numbers.

Is there a way to specify which points in an array or string to store values from?

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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
  #include <iostream>
#include <fstream>
#include <string>
using namespace std;

main()
{
	int i=0,n=0,temp,b;
	float ix,iy,iz;
	char cline[100],ctemp;
	string fileloc,line,line2="IFCCARTESIANPOINT";
	cout << "Please Enter The File Name: ";
	cin >> fileloc;
	ifstream myfile((fileloc).c_str());
	if (myfile.is_open())
	{
		while ( myfile.good() )
		{
            getline (myfile,line);
            if (line.find(line2) != string::npos)
            {
                if(i<3)
                {
                    i++;
                }
                else
                {
                    temp=line.size();
                    char cline[100];
                    for (int a=0;a<=temp;a++)
                    {
                        cline[a]=line[a];
                    }
                    if (cline[23]=='(')
                    {
                        for(b=26;cline[b]!=',';b++)
                        {
                            cout << cline[b];
                        }
                        b++;
                        cout << " ";
                        for(b;cline[b]!=',';b++)
                        {
                            cout << cline[b];
                        }
                        b++;
                        cout << " ";
                        for(b;cline[b]!=' ';b++)
                        {
                            cout << cline[b];
                        }
                    }
                    else if (cline[24]=='(')
                    {
                        for(b=27;cline[b]!=',';b++)
                        {
                            cout << cline[b];
                        }
                        b++;
                        cout << " ";
                        for(b;cline[b]!=',';b++)
                        {
                            cout << cline[b];
                        }
                        b++;
                        cout << " ";
                        for(b;cline[b]!=' ';b++)
                        {
                            cout << cline[b];
                        }
                    }
                    else
                    {
                        break;
                    }
                    cout << endl;
                    i++;
                    n++;
                }
            }
		}
	myfile.close();
	}
	return 0;
}
Last edited on
Ehhh, I'll write to a temp file and extract the cleaned up numbers from there, unless someone can come up with a better solution.
Last edited on
You can make a std::istringstream from a string (the number in string form) and read into number data types from it like any other stream. You still have to figure out where the numbers are yourself, but your format looks simple enough.
Topic archived. No new replies allowed.