943,876 Members | Top Members by Rank

Ad:
  • C Discussion Thread
  • Unsolved
  • Views: 1271
  • C RSS
Jul 16th, 2009
0

fgets/puts creates weird output

Expand Post »
Dear all,

I have a weird problem reading a file using fgets. The code below should read the first line of the file "F:\\filename.csv". It works for all sorts of files that I create myself, but it does NOT work for certain files that I download from the internet.

More precisely, I download a csv file from Google Insight (see http://www.google.com/insights/search/#q=London&cmpt=q), and when I try the code on the downloaded file, I don't get the first line but the string has the following value: "ÿþW", which displays as a little square, followed by a capital "W".

Any ideas what's going wrong?
This is the code that I'm using:

  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main ()
  5. {
  6. FILE *in=fopen("F:\\filename.csv","r");
  7. char mystring [100];
  8. fgets (mystring , 100 , in);
  9. puts (mystring);
  10. fclose (in);
  11. return 0;
  12. }

I appreciate any help!
Thanks a lot,
Anne
Last edited by anne_1000; Jul 16th, 2009 at 5:56 am.
Similar Threads
Reputation Points: 26
Solved Threads: 0
Newbie Poster
anne_1000 is offline Offline
4 posts
since Jul 2009
Jul 16th, 2009
0

Re: fgets/puts creates weird output

Welcome anne_1000,
Google csv is unicode text file.
Last edited by adatapost; Jul 16th, 2009 at 7:39 am.
Moderator
Reputation Points: 2136
Solved Threads: 1228
Posting Genius
adatapost is offline Offline
6,527 posts
since Oct 2008
Jul 16th, 2009
0

Re: fgets/puts creates weird output

Hi adatapost!
Thanks a lot for the useful hint. Do you know of any straightforward way of either converting theGoogle csv file to ASCII, or reading a Unicode file in C/C++? I tried googleing how to do that, but the answers seem to be extremely complicated...

Thnx,
Anne
Reputation Points: 26
Solved Threads: 0
Newbie Poster
anne_1000 is offline Offline
4 posts
since Jul 2009
Jul 16th, 2009
0

Re: fgets/puts creates weird output

Moderator
Reputation Points: 2136
Solved Threads: 1228
Posting Genius
adatapost is offline Offline
6,527 posts
since Oct 2008
Jul 16th, 2009
0

Re: fgets/puts creates weird output

Hi adatapost,
thanks again. I tried using wstring, but the following code does not even compile, and I can't quite figure out why.

  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8.  
  9. ifstream myfile("F:\\filename.txt");
  10. wstring line;
  11.  
  12. if (myfile.is_open())
  13. {
  14. while (! myfile.eof() )
  15. {
  16. getline(myfile,line);
  17. wcout << line << endl;
  18. }
  19.  
  20. myfile.close();
  21. }
  22.  
  23. return 0;
  24. }

Any ideas what's going wrong?
The first error message referes to line 16; it says

Quote ...
error C2784: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &,std::basic_string<_Elem,_Traits,_Alloc> &)' : could not deduce template argument for 'std::basic_istream<_Elem,_Traits> &' from 'std::ifstream'
1> c:\program files\microsoft visual studio 8\vc\include\string(528) : see declaration of 'std::getline'
But this doesn't help me in any ways..
Sorry I might be being stupid but I have just started using C/C++.

Thanks,
Anne
Reputation Points: 26
Solved Threads: 0
Newbie Poster
anne_1000 is offline Offline
4 posts
since Jul 2009
Jul 16th, 2009
0

Re: fgets/puts creates weird output

You might want to read this thread -- lots of good info about unicode files and how to read them.
Sponsor
Team Colleague
Featured Poster
Reputation Points: 5608
Solved Threads: 2282
Retired and Enjoying Life
Ancient Dragon is offline Offline
21,952 posts
since Aug 2005
Jul 16th, 2009
1

Re: fgets/puts creates weird output

Thanks a lot. I have been trying all sorts of code from the internet to convert unicode strings to ascii strings, but so far nothing works. Most of the stuff that I find online is pretty long, and impossible to understand for me as a beginner.

The following code should do it, but I get an error when compiling.

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <iostream>
  5. using namespace std;
  6.  
  7. int main()
  8. {
  9. wchar_t WideStr[] = L"Unicode!";
  10. char x[] = "longlongstring";
  11. wcstombs(&x, WideStr, 1024);
  12. return 0;
  13. }

The error is
Quote ...
error C2664: 'wcstombs' : cannot convert parameter 1 from 'char (*__w64 )[15]' to 'char *'
1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
1>myCOnverter.cpp
Could someone tell me what that means, or how I can find out myself what the error is?
Thanks,
Anne
Reputation Points: 26
Solved Threads: 0
Newbie Poster
anne_1000 is offline Offline
4 posts
since Jul 2009
Jul 16th, 2009
0

Re: fgets/puts creates weird output

wcstombs - convert unicode to multibytes.
  1. wcstombs(x, WideStr, 1024);
Moderator
Reputation Points: 2136
Solved Threads: 1228
Posting Genius
adatapost is offline Offline
6,527 posts
since Oct 2008
Jul 16th, 2009
1

Re: fgets/puts creates weird output

where did the "C++" forum go?
Reputation Points: 2143
Solved Threads: 178
Posting Maven
jephthah is offline Offline
2,567 posts
since Feb 2008
Jul 16th, 2009
0

Re: fgets/puts creates weird output

if u can do some manual work then
1)Open your Unicode file with notepad and save as ANSI.
Then read that file it using C
or else
in DOS use
command:type filename > filename1
Then read the filename1 using C

-----------

If your want to develop a Unicode reading tool using C then
You can go by Ancient Dragon or adatapost.

Thanks,
DP
Reputation Points: 22
Solved Threads: 12
Junior Poster
Dream2code is offline Offline
144 posts
since Jun 2009

This thread is more than three months old

No one has posted to this discussion for at least three months. Please let old threads die and do not reply to them unless you feel you have something new and valuable to contribute that absolutely must be added to make the discussion complete. Otherwise, please start a new thread in this forum instead.
Message:
Previous Thread in C Forum Timeline: Find array placement
Next Thread in C Forum Timeline: Airline Ticket Reservations System





About Us | Contact Us | Advertise | Acceptable Use Policy
Forum Index | Build Custom RSS Feed


Follow us on Twitter


© 2011 DaniWeb® LLC