CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 4 of 4
  1. #1
    Join Date
    Sep 2008
    Posts
    70

    Post Change Code To Loop

    Hello, i am attempting to change this code into a loop. I realized that i coded it very badly. I do not have to keep adding to my linedone if i just reset it to 0 each time.

    Either way i am having trouble turning this code into a loop:

    Code:
    stringstream ss(gtile[3]); while (ss >> value && linedone < 20) { ss >> comma; linedone ++; data[linedone] = value; }
    stringstream ss1(gtile[4]); while (ss1 >> value && linedone < 40 && linedone > 19) { ss1 >> comma; linedone ++; data[linedone] = value;}
    stringstream ss2(gtile[5]); while (ss2 >> value && linedone < 60 && linedone > 39) { ss2 >> comma; linedone ++; data[linedone] = value;}
    stringstream ss3(gtile[6]); while (ss3 >> value && linedone < 80 && linedone > 59) { ss3 >> comma; linedone ++; data[linedone] = value;}
    stringstream ss4(gtile[7]); while (ss4 >> value && linedone < 100 && linedone > 79) { ss4 >> comma; linedone ++; data[linedone] = value;}
    stringstream ss5(gtile[8]); while (ss5 >> value && linedone < 120 && linedone > 99) { ss5 >> comma; linedone ++; data[linedone] = value;}
    stringstream ss6(gtile[9]); while (ss6 >> value && linedone < 140 && linedone > 119) { ss6 >> comma; linedone ++; data[linedone] = value;}
    stringstream ss7(gtile[10]); while (ss7 >> value && linedone < 160 && linedone > 139) { ss7 >> comma; linedone ++; data[linedone] = value;}
    stringstream ss8(gtile[11]); while (ss8 >> value && linedone < 180 && linedone > 159) { ss8 >> comma; linedone ++; data[linedone] = value;}
    stringstream ss9(gtile[12]); while (ss9 >> value && linedone < 200 && linedone > 179) { ss9 >> comma; linedone ++; data[linedone] = value;}
    stringstream ss10(gtile[13]); while (ss10 >> value && linedone < 220 && linedone > 199) { ss10 >> comma; linedone ++; data[linedone] = value;}
    stringstream ss11(gtile[14]); while (ss11 >> value && linedone < 240 && linedone > 219) { ss11 >> comma; linedone ++; data[linedone] = value;}
    stringstream ss12(gtile[15]); while (ss12 >> value && linedone < 260 && linedone > 239) { ss12 >> comma; linedone ++; data[linedone] = value;}
    stringstream ss13(gtile[16]); while (ss13 >> value && linedone < 280 && linedone > 259) { ss13 >> comma; linedone ++; data[linedone] = value;}
    stringstream ss14(gtile[17]); while (ss14 >> value && linedone < 300 && linedone > 279) { ss14 >> comma; linedone ++; data[linedone] = value;}
    Here is my attempt, which crashes

    Code:
    while (loopnum < 15)
    {
    	stringstream ss(gtile[linedone + 3]);
    	while (ss >> value)
    	{
    		ss >> comma;
    		linedone ++;
    		data[linedone] = value;
    
    	}
    	value = 0;
    }
    Here is a picture of the error

    Thanks for any help i may recieve.
    Last edited by marsh; December 16th, 2009 at 03:34 PM.

  2. #2
    Join Date
    Jan 2002
    Location
    Houston, TX
    Posts
    1,421

    Re: Change Code To Loop

    Looking at your original code, it appears that your gtile is an array of 15 elements:
    Code:
    stringstream ss(gtile[3]);
    stringstream ss1(gtile[4]);
    stringstream ss2(gtile[5]);
    stringstream ss3(gtile[6]);
    stringstream ss4(gtile[7]);
    stringstream ss5(gtile[8]);
    stringstream ss6(gtile[9]);
    stringstream ss7(gtile[10]);
    stringstream ss8(gtile[11]);
    stringstream ss9(gtile[12]);
    stringstream ss10(gtile[13]);
    stringstream ss11(gtile[14]);
    stringstream ss12(gtile[15]);
    stringstream ss13(gtile[16]);
    stringstream ss14(gtile[17]);
    However, in the while loop, your addressing much more than that:
    Code:
    stringstream ss(gtile[linedone + 3]);
    since linedone is continuously incremented and appears that it could reach a value of 299!

    Hope that helps.
    Be sure to rate those who help!
    -------------------------------------------------------------
    Karl - WK5M
    PP-ASEL-IA (N43CS)
    PGP Key: 0xDB02E193
    PGP Key Fingerprint: 8F06 5A2E 2735 892B 821C 871A 0411 94EA DB02 E193

  3. #3
    Join Date
    Sep 2008
    Posts
    70

    Re: Change Code To Loop

    Thanks for the help.

    Got it working with this code

    Code:
    linedone2 = 3;
    linedone = 0;
    while (linedone < 300)
    {
    	stringstream ss(gtile[linedone2]);
    	while (ss >> value)
    	{
    		ss >> comma;
    		linedone ++;
    		data[linedone] = value;
    
    	}
    	if (linedone > 14)
    	{
    	linedone2++;
    	}
    	value = 0;
    }
    linedone = 0;
    linedone2 = 0;

  4. #4
    Join Date
    Oct 2002
    Location
    Timisoara, Romania
    Posts
    14,360

    Re: Change Code To Loop

    Code:
    stringstream ss6(gtile[9]); while (ss6 >> value && linedone < 140 && linedone > 119) 
    { ss6 >> comma; linedone ++; data[linedone] = value;}
    Let's try to generalize. If instead of 9 you'd have i, then the code above could look like this:
    Code:
    stringstream ssi(gtile[i+3]); while (ssi >> value && linedone < (i+1)*20 && linedone > i*20-1) 
    { ssi >> comma; linedone ++; data[linedone] = value;}
    But you need 15 stringstreams, so
    Code:
    stringstream ss[15];
    for(int i = 0; i < 15; ++i)
    {
       ss[i] = stringstream(gtile[i+3]);
       while (ssi >> value && linedone < (i+1)*20 && linedone > i*20-1) 
       { ssi >> comma; linedone ++; data[linedone] = value; }
    }
    Marius Bancila
    Home Page
    My CodeGuru articles

    I do not offer technical support via PM or e-mail. Please use vbBulletin codes.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured