can you please suggest how I can read a line containing many strings,parse it and obtain an array of strings(word by word) and number of strings as return.
Thanks
Printable View
can you please suggest how I can read a line containing many strings,parse it and obtain an array of strings(word by word) and number of strings as return.
Thanks
One way would be to read line by line into string,
then use that string as input to a stringstream.
Read from the stringstream to get the fields on that line.
Code:#include <iostream>
#include <sstream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
int main()
{
ifstream in("test.txt");
if (!in)
{
cout << "problem with file open" << endl;
return 0;
}
string line;
string field;
while (std::getline(in,line))
{
vector<string> vS; // the array of words on the current line
istringstream iss(line);
while (iss >> field)
{
vS.push_back(field);
}
cout << "Number of fields in the line = " << vS.size() << endl;
}
return 0;
}
I have written following program in C and getting error in line N1030 and in between.The charecter J is missing.Can you please locate the error.
Thanks
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#define MAXLEN 1000
#define MAX_TOKS 200
#define DELIMITERS " \t"
#define MAX_STRING_LENGTH 255
int parseString(char* line, char*** argv) {
char* buffer;
int argc;
buffer = (char*) malloc(strlen(line) * sizeof(char)+1);
strcpy(buffer,line);
printf("buffer is %s\n",buffer);
(*argv) = (char**) malloc(MAX_TOKS * sizeof(char**));
argc = 0;
(*argv)[argc++] = strtok(buffer, DELIMITERS);
while ((((*argv)[argc] = strtok(NULL, DELIMITERS)) != NULL) &&
(argc < MAX_TOKS)) ++argc;
buffer = NULL;
printf("buffer after free is %s\n",buffer);
return argc;
}
int main(void)
{ int count=0,count1=0;
FILE *fp1,*fp2;
char readline [MAXLEN],write [MAXLEN]="";
char **A;
char input_file_name [50] ;
double xt,yt,zt,it,jt,kt,tempX=0,tempY=0,tempZ=0;
char X1[22],Y1[22],Z1[22],I1[22],J1[22],K1[22];
int n,i;
/* printf ( "Give the name of your input file : " ) ;
gets ( input_file_name ) ;
fp1 = fopen ( input_file_name, "r" ) ;*/
fp1 = fopen ("CNCProgram.rtf","r");
/* Check we got the file open */
fp2 = fopen("CNCProgramH.rtf","w");
if(fp1 == NULL)
{printf("Reading file unsuccessful\n");
return -1; /* exit the program */
}
else
{printf("File reading suceessful\n");
}
while ( fgets(readline, MAXLEN, fp1) != NULL)
{ n=0;
write[0]=0;
/* Do something with readline here */
count++;
printf("Line count is %d %s\n",count,readline);
/* splits the input line into separate words */
n = parseString(readline, &A);
printf("strings read:\t%d\n",n);
for (i = 0; i < n; ++i)
{
printf("A[%d] = %s\n",i,A[i]);
printf("A[i][0] = %c\n",A[i][0]);
if((A[i][0]==('X')) || (A[i][0]==('x')))
{
strcpy(X1,A[i]);
printf("String X1 is = %s\n", X1);
xt = atof( X1+1);
printf("xt is = %3.3f\n", xt );
}
if((A[i][0]==('Y')) || (A[i][0]==('y')))
{
strcpy(Y1,A[i]);
printf("String Y1 is = %s\n", Y1);
yt = atof( Y1+1);
printf("yt is = %3.3f\n", yt );
}
if((A[i][0]==('Z')) || (A[i][0]==('z')))
{
strcpy(Z1,A[i]);
printf("String Z1 is = %s\n", Z1);
zt = atof( Z1+1);
printf("zt is = %3.3f\n", zt );
}
if((A[i][0]==('I')) || (A[i][0]==('i')))
{
strcpy(I1,A[i]);
printf("String I1 is = %s\n", I1);
it = atof( I1+1);
printf("it is = %3.3f\n", it );
it=it+tempX;
printf("it after addition is = %3.3f\n", it );
sprintf (A[i],"I%3.3f",it);
printf("$$$$$$$$$$$ %s\n",A[i]);
}
if((A[i][0]==('J')) || (A[i][0]==('j')))
{
strcpy(J1,A[i]);
printf("String J1 is = %s\n", J1);
jt = atof( J1+1);
printf("jt is = %3.3f\n", jt );
jt=jt+tempY;
printf("jt after addition is = %3.3f\n", jt );
sprintf (A[i],"J%3.3f\n",jt);
printf("$$$$$$$$$$$ %s\n",A[i]);
}
if((A[i][0]==('K')) || (A[i][0]==('k')))
{
strcpy(K1,A[i]);
printf("String K1 is = %s\n", K1);
kt = atof( K1+1);
printf("kt is = %3.3f\n", kt );
kt=kt+tempZ;
printf("kt after addition is = %3.3f\n", kt );
sprintf (A[i],"K%3.3f\n",kt);
printf("$$$$$$$$$$$ %s\n",A[i]);
}
strcat(write,A[i]);
strcat(write," ");
}
tempX=xt;
printf("tempX is = %3.3f\n", tempX );
tempY=yt;
printf("tempY is = %3.3f\n", tempY );
tempZ=zt;
printf("tempZ is = %3.3f\n", tempZ );
printf("Writeline is %s \n",write);
fprintf(fp2,"%s",write);
}
fclose(fp1);
fclose(fp2);
return 0;
}
To be saved as CNCProgram.rtf
TEST G71
N10 T35
N20 G00 G90 X20.0 Y20.0 M03 S500
N30 G01 G43 Z10.0 F4000
N40 G01 X16.182 Y16.182 Z-11.000
N50 G02 X17.115 Y13.929 I13.929 J13.929
N60 G01 X17.115 Y-13.929
N70 G02 X16.182 Y-16.182 I13.929 J-13.929
N80 G02 X13.929 Y-17.115 I13.929 J-13.929
N90 G01 X-13.929 Y-17.115
N100 G02 X-16.182 Y-16.182 I-13.929 J-13.929
N110 G02 X-17.115 Y-13.929 I-13.929 J-13.929
N120 G01 X-17.115 Y13.929
N130 G02 X-16.182 Y16.182 I-13.929 J13.929
N140 G02 X-13.929 Y17.115 I-13.929 J13.929
N150 G01 X13.929 Y17.115
N160 G02 X16.182 Y16.182 I13.929 J13.929
N180 G01 X21.311 Y21.311 Z-22.000
N190 G02 X22.244 Y19.059 I19.059 J19.059
N200 G01 X22.244 Y-19.059
N210 G02 X21.311 Y-21.311 I19.059 J-19.059
N220 G02 X19.059 Y-22.244 I19.059 J-19.059
N230 G01 X-19.059 Y-22.244
N240 G02 X-21.311 Y-21.311 I-19.059 J-19.059
N250 G02 X-22.244 Y-19.059 I-19.059 J-19.059
N260 G01 X-22.244 Y19.059
N270 G02 X-21.311 Y21.311 I-19.059 J19.059
N280 G02 X-19.059 Y22.244 I-19.059 J19.059
N290 G01 X19.059 Y22.244
N300 G02 X21.311 Y21.311 I19.059 J19.059
N320 G01 X26.441 Y26.441 Z-33.000
N330 G02 X27.374 Y24.188 I24.188 J24.188
N340 G01 X27.374 Y-24.188
N350 G02 X26.441 Y-26.441 I24.188 J-24.188
N360 G02 X24.188 Y-27.374 I24.188 J-24.188
N370 G01 X-24.188 Y-27.374
N380 G02 X-26.441 Y-26.441 I-24.188 J-24.188
N390 G02 X-27.374 Y-24.188 I-24.188 J-24.188
N400 G01 X-27.374 Y24.188
N410 G02 X-26.441 Y26.441 I-24.188 J24.188
N420 G02 X-24.188 Y27.374 I-24.188 J24.188
N430 G01 X24.188 Y27.374
N440 G02 X26.441 Y26.441 I24.188 J24.188
N460 G01 X31.570 Y31.570 Z-44.000
N470 G02 X32.503 Y29.318 I29.318 J29.318
N480 G01 X32.503 Y-29.318
N490 G02 X31.570 Y-31.570 I29.318 J-29.318
N500 G02 X29.318 Y-32.503 I29.318 J-29.318
N510 G01 X-29.318 Y-32.503
N520 G02 X-31.570 Y-31.570 I-29.318 J-29.318
N530 G02 X-32.503 Y-29.318 I-29.318 J-29.318
N540 G01 X-32.503 Y29.318
N550 G02 X-31.570 Y31.570 I-29.318 J29.318
N560 G02 X-29.318 Y32.503 I-29.318 J29.318
N570 G01 X29.318 Y32.503
N580 G02 X31.570 Y31.570 I29.318 J29.318
N600 G01 X36.699 Y36.699 Z-55.000
N610 G02 X37.632 Y34.447 I34.447 J34.447
N620 G01 X37.632 Y-34.447
N630 G02 X36.699 Y-36.699 I34.447 J-34.447
N640 G02 X34.447 Y-37.632 I34.447 J-34.447
N650 G01 X-34.447 Y-37.632
N660 G02 X-36.699 Y-36.699 I-34.447 J-34.447
N670 G02 X-37.632 Y-34.447 I-34.447 J-34.447
N680 G01 X-37.632 Y34.447
N690 G02 X-36.699 Y36.699 I-34.447 J34.447
N700 G02 X-34.447 Y37.632 I-34.447 J34.447
N710 G01 X34.447 Y37.632
N720 G02 X36.699 Y36.699 I34.447 J34.447
N740 G01 X41.829 Y41.829 Z-66.000
N750 G02 X42.762 Y39.576 I39.576 J39.576
N760 G01 X42.762 Y-39.576
N770 G02 X41.829 Y-41.829 I39.576 J-39.576
N780 G02 X39.576 Y-42.762 I39.576 J-39.576
N790 G01 X-39.576 Y-42.762
N800 G02 X-41.829 Y-41.829 I-39.576 J-39.576
N810 G02 X-42.762 Y-39.576 I-39.576 J-39.576
N820 G01 X-42.762 Y39.576
N830 G02 X-41.829 Y41.829 I-39.576 J39.576
N840 G02 X-39.576 Y42.762 I-39.576 J39.576
N850 G01 X39.576 Y42.762
N860 G02 X41.829 Y41.829 I39.576 J39.576
N880 G01 X46.958 Y46.958 Z-77.000
N890 G02 X47.891 Y44.706 I44.706 J44.706
N900 G01 X47.891 Y-44.706
N910 G02 X46.958 Y-46.958 I44.706 J-44.706
N920 G02 X44.706 Y-47.891 I44.706 J-44.706
N930 G01 X-44.706 Y-47.891
N940 G02 X-46.958 Y-46.958 I-44.706 J-44.706
N950 G02 X-47.891 Y-44.706 I-44.706 J-44.706
N960 G01 X-47.891 Y44.706
N970 G02 X-46.958 Y46.958 I-44.706 J44.706
N980 G02 X-44.706 Y47.891 I-44.706 J44.706
N990 G01 X44.706 Y47.891
N1000 G02 X46.958 Y46.958 I44.706 J44.706
N1020 G01 X52.087 Y52.087 Z-88.000
N1030 G02 X53.020 Y49.835 I49.835 J49.835
N1040 G01 X53.020 Y-49.835
N1050 G02 X52.087 Y-52.087 I49.835 J-49.835
N1060 G02 X49.835 Y-53.020 I49.835 J-49.835
N1070 G01 X-49.835 Y-53.020
N1080 G02 X-52.087 Y-52.087 I-49.835 J-49.835
N1090 G02 X-53.020 Y-49.835 I-49.835 J-49.835
N1100 G01 X-53.020 Y49.835
N1110 G02 X-52.087 Y52.087 I-49.835 J49.835
N1120 G02 X-49.835 Y53.020 I-49.835 J49.835
N1130 G01 X49.835 Y53.020
N1140 G02 X52.087 Y52.087 I49.835 J49.835
N1160 G01 X57.217 Y57.217 Z-99.000
N1170 G02 X58.150 Y54.964 I54.964 J54.964
N1180 G01 X58.150 Y-54.964
N1190 G02 X57.217 Y-57.217 I54.964 J-54.964
N1200 G02 X54.964 Y-58.150 I54.964 J-54.964
N1210 G01 X-54.964 Y-58.150
N1220 G02 X-57.217 Y-57.217 I-54.964 J-54.964
N1230 G02 X-58.150 Y-54.964 I-54.964 J-54.964
N1240 G01 X-58.150 Y54.964
N1250 G02 X-57.217 Y57.217 I-54.964 J54.964
N1260 G02 X-54.964 Y58.150 I-54.964 J54.964
N1270 G01 X54.964 Y58.150
N1280 G02 X57.217 Y57.217 I54.964 J54.964
N1300 G01 X62.346 Y62.346 Z-110.000
N1310 G02 X63.279 Y60.094 I60.094 J60.094
N1320 G01 X63.279 Y-60.094
N1330 G02 X62.346 Y-62.346 I60.094 J-60.094
N1340 G02 X60.094 Y-63.279 I60.094 J-60.094
N1350 G01 X-60.094 Y-63.279
N1360 G02 X-62.346 Y-62.346 I-60.094 J-60.094
N1370 G02 X-63.279 Y-60.094 I-60.094 J-60.094
N1380 G01 X-63.279 Y60.094
N1390 G02 X-62.346 Y62.346 I-60.094 J60.094
N1400 G02 X-60.094 Y63.279 I-60.094 J60.094
N1410 G01 X60.094 Y63.279
N1420 G02 X62.346 Y62.346 I60.094 J60.094
N1440 G01 X67.476 Y67.476 Z-121.000
N1450 G02 X68.409 Y65.223 I65.223 J65.223
N1460 G01 X68.409 Y-65.223
N1470 G02 X67.476 Y-67.476 I65.223 J-65.223
N1480 G02 X65.223 Y-68.409 I65.223 J-65.223
N1490 G01 X-65.223 Y-68.409
N1500 G02 X-67.476 Y-67.476 I-65.223 J-65.223
N1510 G02 X-68.409 Y-65.223 I-65.223 J-65.223
N1520 G01 X-68.409 Y65.223
N1530 G02 X-67.476 Y67.476 I-65.223 J65.223
N1540 G02 X-65.223 Y68.409 I-65.223 J65.223
N1550 G01 X65.223 Y68.409
N1560 G02 X67.476 Y67.476 I65.223 J65.223
N1580 G01 Z10.0
N1590 M02
fcone1403 G71