|
jhwurmbach wrote: But that definitely is the slowest alternative...
Nowhere did I imply that it was optimal. I was just giving the OP another option, that's all. If the string is only going to be processed once or twice, less efficient but easier-to-read code is sometimes the way to go.
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
I know that you know.
But the casual reader might take this idiom as "Recommended by David Crow"!
Let's think the unthinkable, let's do the undoable, let's prepare to grapple with the ineffable itself, and see if we may not eff it after all. Douglas Adams, "Dirk Gently's Holistic Detective Agency"
|
|
|
|
|
Hi, I had a problem in reading a particular string of a text file in C++.
For example, I had a text file that looks like the one below:
Variable = .iso.org.dod.internet.private.enterprises.9.9.273.1.3.1.1.3.1.8.105.118.116.108.95.97.112.49.0.2.45.4.155.81<br />
Value = Integer32 -44<br />
<br />
End of MIB subtree.<br />
<br />
I only wanted to read the integer "-44" from the text file in the C++ prog, but I donno how to read it without reading the "Variable = .iso.org.dod.internet.private.enterprises.9.9.273.1.3.1.1.3.1.8.105.118.116.108.95.97.112.49.0.2.45.4.155.81
Value = Integer32 " strings.
My partially written code to read the file is given as below:
apfile=fopen("ap1.txt","r+");<br />
<br />
if (apfile==NULL)<br />
{<br />
cout<<"Error opening file ap1.txt"<<endl;<br />
fclose (apfile);<br />
return -1;<br />
}<br />
<br />
else<br />
{<br />
while (!feof(apfile)) <br />
{<br />
<br />
}<br />
}
Anyone can help me to get only the integer value of "-44" from the ap1.txt in the C++ programming? Thanks!
|
|
|
|
|
You have to read everything before the thing you seek. You just have to skip it.
This means that you have to parse the file -- which means to to read the contents and interpret it...
Without knowing the format of the file, I can't help you. But you should start by understanding the format of the file you are reading....
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br />
Peter Weyzen<br />
Staff Engineer<br />
<a href="http://www.soonr.com">SoonR Inc -- PC Power delivered to your phone</a>
|
|
|
|
|
first of all, thanks for ur reply. I tried another method to open and read the whole txt file using the getline method as below.
#include <fstream><br />
#include <string><br />
#include<iostream><br />
using namespace std;<br />
<br />
int main()<br />
{<br />
string str;<br />
<br />
ifstream myFile("ap1.txt");<br />
if(! myFile)<br />
{<br />
cout<<"Error!"<<endl;<br />
return -1;<br />
}<br />
while(! myFile.eof())<br />
{<br />
<br />
getline(myFile, str);<br />
str; <br />
cout<<str<<endl;<br />
<br />
}<br />
myFile.close();<br />
return 0;<br />
}
Sorry that I don't really quite understand what do you mean by the format of the file? I thought the format of the file is a text file? Sorry for my blurness
|
|
|
|
|
Not that simple. The format includes how the text is laid out.
Is each line the same length? Will it always be Variable= then Value=?
Will you have gaps in between sometimes? Chapter headings?
Lot's of things you can trip up on!
Iain.
|
|
|
|
|
As for whether it's the same length or not, I'm not sure as I'm using snmputil to read the mibs of the signal strength of a particular AP. The length may change if on different AP? But the format of the output will always be "Varible=" on the first line and the second line is "Value= " when all written to a .txt file.
|
|
|
|
|
If the lengths are not guaranteed, then you're just going to have to read in all the information, and just only bother to keep the bits you care about.
Iain.
|
|
|
|
|
So I have to search for the string "value=" and frm there to extract the -44 value? Is tht wad u mean by keeping the bits?
My prog now is currently reading all the info but I donno how to screen away the first line, and read the -44 frm the second line.
Thanks alot for ur valuable reply though. Appreciate tht.
|
|
|
|
|
Sort of...
What I mean is that you read in every line.
Read a Line;
Does it start with Value = ?
Yes...
Does it have Integer32 next?
Yes...
Grab the -44 part, and keep it somehow. A list, email it to your best friend, whatever you want.
No...
Move on to the next line!
By "keeping the bits", I mean "do whatever you like with the information". You must be interested in it for some reason. That will influence what you do with the information.
I did notice on rereading your question that there is a phrase "Integer32". Are they all the same type?
Iain.
|
|
|
|
|
sorry for the very very late reply...
ya, there's always a Integer32 whenever I run the prog and saved it to a text file. Tht's the format of the output.
What if I had 2 lines tht have Integer32 but different values? how am I supposed to extract the values? Fo e.g. like the one below:
Variable = .iso.org.dod.internet.private.enterprises.9.9.273.1.3.1.1.3.1.8.105.118.116.108.95.97.112.49.0.2.45.4.155.81<br />
Value = Integer32 -39<br />
<br />
Variable = .iso.org.dod.internet.private.enterprises.9.9.273.1.3.1.1.3.1.8.105.118.116.108.95.97.112.49.0.32.166.80.182.220<br />
Value = Integer32 -39<br />
<br />
End of MIB subtree.<br />
<br />
|
|
|
|
|
In the example you give, the Value is the same for each.
You're doing the same thing... Just loop through the file, reading one string at a time.
If it's blank, move on.
Then take turns making sure the line starts with variable , or value , then interpret the rest of the line as you want.
I'm guessing you're meant to store the Variable name, matched against the Value value in some sort of map, or even a database, then look up pairs later on in your program.
Or,
If you just want a list of values, read each line, and if it doesn't start with Value, then move on to the next line.
How you handle the imput as it comes really depends on the job you're doing - and that question can be solved by reading your spec sheet, talking to yout customer or manager?
From the Variable names, this doesn't look like a hobby project. I'm sure there's someone who can tell you what they want done / kept from this input. From there, just write the code (with test cases, etc).
At the moment, it sounds like you're not sure what you're meant to do with this data - and that's something we can't help with.
Good luck,
Iain/
|
|
|
|
|
I appreciate ur help, I hope I could solve the prob soon...
|
|
|
|
|
Hi Cabomba,
Can you tell me:
if the "Variable =" and "Value = " are on the same line or on different lines.
Is there only onw variable or are there multiple variables.
If multiple, do you need the value of each of them (like reading them into memory for later usage in your program) or only of a specific variable
Can you use MFC?
Knowing this, the problem should not be very difficult.
William
|
|
|
|
|
the "variable =" and the "value =" are not on the same lines. To say the the truth, I'm using snmputil to get the MIBS of the signal strength of an AP. And the signal strength is "-44". so I was trying to extract the signal strength and put it into another file for reading.
but I'm not sure how to get rid of the first line which is the "variable =" line.
Currently, there's only one integer variable in the text file, it's such a pity tht I cannot attach the text file here but it's the same as the one coded.
sorry, I don think I'll use MFC, but to stick with C/C++ prog. Thanks for any help!
|
|
|
|
|
When you read a line from the file containing "Value =", just skip to the 19th position of that line and read the remainder of it as an int .
Another option might be to skip to the end of the file, go backward 3 bytes, and read the integer from there.
Of course these will fail in many different ways, but since you did not provide any other requirements or constraints, better solutions were withheld.
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
Do u mean tht I should try to use a method to find "value =" then frm there read the integer value of -44? I'm not sure if this works but I'm gonna try and I'm not even sure if I can try successfully or not cos I nv tried it b4 and my prog skills sux..haha! But thanks for ur reply!
|
|
|
|
|
Cabomba wrote: Do u mean tht I should try to use a method to find "value ="...
Well, if there are only two lines of text in your file, you don't even need to do that. The first line can be read and just discarded.
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
Thanks for ur reply but how do I "ignore" the first line after it is being read? Or how do I discard it?
|
|
|
|
|
How do you ignore any value/variable? Just don't use it. Read the first line from the file. Read the next line from the file. Voila! The firt line has been ignored.
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
Tried downloading a file on a specific location in a Non-proxy environment using InternetOpenURL() and InternetReadFile() API's. This worked fine.
But when i try the same in Proxy Environment it fails. I tried doing HttpQueryInfo() and then checking the status for HTTP_PROXY_AUTH_REQD. This is successful but when i set the username and password for Proxy Authentication and retry, it still gives me status as HTTP_PROXY_AUTH_REQD. If I continue downloading the file then junk characters are downloaded and written to the file.
Need help to make InternetOpenURL work in a Proxy Environment. (Please note that Proxy Server Details are not present with my application and i cannot bypass the Proxy Server)
Thanks in advance.
Ravi.
|
|
|
|
|
Hi all,
May I know how to calculate the number of times a character occurs in a string? Are there any function returns the number of times a character occurs in the string?
Thanks.
Regards,
littlecheer
|
|
|
|
|
Made function, no AFAIK. But you can code it quite easy. Take the String as a vector and make a for with an if and a counter. When you find the character... +1, when not... next element.
Greetings.
--------
M.D.V.
If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about?
Help me to understand what I'm saying, and I'll explain it better to you
“The First Rule of Program Optimization: Don't do it. The Second Rule of Program Optimization (for experts only!): Don't do it yet.” - Michael A. Jackson
|
|
|
|
|
Like this:
std::string str("this is a test string only");
int num = std::count(str.begin(),str.end(),'a');
Remember:
#include <string>
#include <algorithm>
|
|
|
|
|
Like this:
std::string str("this is a test string only");
int num = std::count(str.begin(),str.end(),'a');
Remember to include string and algorithm
|
|
|
|