hey all
well i have been facing this problem for days ...i have written a program where i am suppose to read a specific number of lines within different intervals and count the number of occurance of r and s and then divide r by s. The program is running correctly but the problem takes place in such a case where s line is at the end of the interval and r line is received at the begining of the second interval giving me a % higher than 100 therefore i need to remove the last line of the interval and the first line of the second interval
plz help
WolfPack 491 Posting Virtuoso Team Colleague
Please post the code.
Schol-R-LEA 1,446 Commie Mutant Traitor Featured Poster
Yes, it should allow you to paste code; what browser are you using?
If you look at the editing window, you should see a button marked 'Code'. If you click on that, it will come up with a pop-up window for editing the code in. If you have pop-ups blocked, or are using NoScript or a similar script blocker, that could be the cause of the problem.
Note also that you may not need to paste the whole program, if there is a specific function or section that you know is the source of the issue.
Edited by Schol-R-LEA
dododero 0 Newbie Poster
thank u here 's the code
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cmath>
#include <string>
#include <sstream>
#include <vector>
using namespace std;
int main()
{
ofstream fout("TPDR[3-4-30].tr");
ifstream fin("TTEST.tr");// if u use this as ur input file u will always get ur num as 6 because the range stops at 50 therefore u will get the throughputs calculated as 0z
ofstream fOut("TPDR30(3-4).tr");
ofstream MYFILE("TPDR(3-4).tr");
if (!fin)
{
cout << "input file not open" << endl;
return 1;
}
fout << fixed << setprecision(9);
fOut << fixed << setprecision(9);
cout << fixed << setprecision(9);
MYFILE << fixed << setprecision(9);
double timelimit = 0.0; // ending time of first block of data
double timeincr = 10.0; // duration of each block of data
string s1, s2, s3, sequenceno1,sequenceno2, s4, s5; // dummy variables to hold unwanted data
string line,oldline;
char type;
double time;
int bytes;
int num = 0;
istringstream ss;
double received[21] = {0.0};
double send[21] = {0.0};
int drop[21] = {0};
double Re[21]= {0.0};
double Se[21] = {0.0};
double De[21] = {0.0};
int R = 0;
int S = 0;
double PDR =0.0;
double PDRR[21] = {0.0};
int Range;
//------- Priming read. Get first line.
getline(fin, line);
ss.str(line);
ss >> type >> time;
while (fin)
{
while (ss && time <= timelimit)
{
//------------- process the line here ------------------
// ss >> s1 >> s2 >> s3 >> s4 >> s5 ;
if (type == 's') {
ss >> s1 >> s2 >> s3 >> sequenceno1 >> s4 >> s5;
oldline = line;
send[num]++;
S = send[num];
Se[num] = S;
}
if (type =='r') {
ss >> s1 >> s2 >> s3 >> sequenceno2 >> s4 >> s5;
if ((time < timelimit)&&(sequenceno1 == sequenceno2)) {
cout << sequenceno1 << " " << sequenceno2 << " " << time << " " << timelimit << ".\n";
received[num]++;
R = received[num];
Re[num] = R;
PDR = Re[num]/ Se[num];
PDRR[num] = PDR*100;
fout << "Received = " << Re[num] <<" " << time <<" " << "Send= " << Se[num] << " " << "Packet Delivery Ratio" << PDRR[num] << " "<< "sequenceno1 =" << sequenceno1 << " "<< "sequenceno2 =" << sequenceno2 << ".\n";
}
}
//------------- end of process, now read the next line -----
if (getline(fin, line))
{
ss.clear(); // clear all flags
ss.str(line);
ss >> type >> time;
}
else
{
ss.clear(ios::failbit); // set the fail flag
}
}
timelimit += timeincr; // increment limit to next value
cout << timelimit << ".\n\n";
num++;
fout << "\n------------------\n";
fout << "time limit: " << timelimit << endl;
cout << "num = " << num << ".\n";
}
// ..... Writting the Range and PDR within each Range in a separate File .....
for (Range = 10,num =1; Range <= 200, num <=20; Range+=10, num++) {
fOut << Range << " " << PDRR[num] << ".\n";
}
double average = 0.0;
double TPDR = 0.0;
for (num = 1; num <=20 ; num++) { // For loop to compute the Total PDR within each Range
TPDR += PDRR[num];
// cout << "TPDR" << TPDR << "%" << ".\n";
}
average = TPDR /(num-1);
cout << "average = " << average << "%" << ".\n";// Compute Average PDR
cout << "Done" << endl;
return 0;
}
dododero 0 Newbie Poster
here's the file i am using
s 167.204369958 7 MAC --- 29867 tcp 630 [13a 8 7 800] ------- [7:2 8:1 32 8] [330 0] 0 1..
r 167.209410087 8 MAC --- 29867 tcp 572 [13a 8 7 800] ------- [7:2 8:1 32 8] [330 0] 1 1..
s 167.212674795 7 MAC --- 29868 tcp 630 [13a 8 7 800] ------- [7:2 8:1 32 8] [331 0] 0 1..
r 167.217714923 8 MAC --- 29868 tcp 572 [13a 8 7 800] ------- [7:2 8:1 32 8] [331 0] 1 1..
s 169.998902881 7 MAC --- 30344 tcp 630 [13a 8 7 800] ------- [7:3 9:0 32 8] [147 0] 0 1..
r 170.00392963 8 MAC --- 30344 tcp 572 [13a 8 7 800] ------- [7:3 9:0 32 8] [147 0] 1 1..
s 170.162989092 7 MAC --- 30466 tcp 630 [13a 8 7 800] ------- [7:2 8:1 32 8] [334 0] 0 1..
r 170.168029172 8 MAC --- 30466 tcp 572 [13a 8 7 800] ------- [7:2 8:1 32 8] [334 0] 1 1..
s 170.181482383 7 MAC --- 30467 tcp 630 [13a 8 7 800] ------- [7:2 8:1 32 8] [335 0] 0 1..
r 170.186522463 8 MAC --- 30467 tcp 572 [13a 8 7 800] ------- [7:2 8:1 32 8] [335 0] 1 1..
s 178.013133357 7 MAC --- 32131 tcp 630 [13a 8 7 800] ------- [7:2 8:1 32 8] [340 0] 0 1..
r 180.725285180 8 MAC --- 32716 tcp 572 [13a 8 7 800] ------- [7:2 8:1 32 8] [341 0] 1 1..
The problem takes place in such case where the s lines comes at the end of my range and the r lines comes at the begining of the second range leading to an increase in the number of the received lines than the send which gives a % higher than 100%
in this snapshot example i want to delete these two lines
s 169.998902881 7 MAC --- 30344 tcp 630 [13a 8 7 800] ------- [7:3 9:0 32 8] [147 0] 0 1..
r 170.00392963 8 MAC --- 30344 tcp 572 [13a 8 7 800] ------- [7:3 9:0 32 8] [147 0] 1 1..
plz help me out its annoying me for days
thanx in advance
Edited by dododero
David W 131 Practically a Posting Shark
The first step in solving a problem is a clear statement of what is required.
You wrote this at the top:
... been facing this problem for days ... have written a program where ... suppose to read a specific number of lines
within different intervals
What does this
within different intervals
mean?
Does it mean, as you read a file, line by line, counting the lines, from say line 1 as the first line ...
that you are take some (user specified) 'sample of lines' ... say lines n to line (n+size-1)
(You could copy these lines into a tmp vector of lines ... and pause your file scanning while you process that tmp vector ...)
and count the number of occurance of r and s
Ok ... process that tmp vector of lines, and report
and then divide r by s.
If that is 'your problem' ... can you see now that it is easy to handle it this way?
Edited by David W
dododero 0 Newbie Poster
thank u 4 ur reply .... well what i meant by interval is the range of time say for example i have a file of 200s i should read my lines every 10s (in the ex above my first interval is from 160-170 and my second interval is from 170-180 and so on. The problem takes place when the s line comes at the end of the first interval and the r line comes at the begining of the second interval ...This will lead to incorrect counting as the number of r lines are suppose to be less than the s lines
i need to check if the s line comes at the end of the interval and is not followed by the r within the same interval if so delete
In the second interval i need to check if the interval starts with the r line and not s if so delete it
These lines are not at the end of my file therefore any ideas how can i do putting in consideration that my file is big
thanx in advance
David W 131 Practically a Posting Shark
Ok ...
still not clear what you are trying to do ...
suppose you have lines in a big file that look like this:
sxxxxxxxxxxxxxx...
rxxxxxxxxxxxxx...
rxxxxxxxxxxxxxx....
sxxxxxxxxxx............
sxxxxxxxxxxxxxx............
r............
to 100,000,000 + lines
ok ... suppose you are taking 2 successive samples for the intervals of 0.001 seconds each
you could read in all the lines into a list of lines ...for 0.002 secs ....
then process that list ... 1st half & 2nd half
Be a part of the DaniWeb community
We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.