473,413 Members | 1,802 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,413 software developers and data experts.

Why isn't the operator<< found?

Hi everyone,
I'm trying to use istream_iterators to read a file consisting of pairs
of numbers. To do this, I wrote the following:

#include <fstream>
#include <vector>
#include <iterator>

using namespace std;

typedef std::pair<double, double> float_pair;

std::istream& operator>> (std::istream& s,
std::pair<double, double>& p)
{
s >> p.first;
s >> p.second;
return s;
}

main(){
ifstream file ("filename");

float_pair p;
file >> p; // this works

std::vector<float_pair> positions // but this doesn't
(istream_iterator<float_pair> (file),
(istream_iterator<float_pair> ()));
}

This used to work under my old compiler (KCC) but GCC 4.0 says it can't
find the operator<< (I think...) The full error message is below.
However, the operator works because when I try to read an individual
pair it works. Is there some magic that needs to be performed for the
istream_iterator to find the operator<<?

Thanks,

/Patrik Jonsson
[patrik@governator src]$ g++ optest.cc
/usr/lib/gcc/x86_64-redhat-linux/4.0.0/../../../../include/c++/4.0.0/bits/stream_iterator.h:
In member function 'void std::istream_iterator<_Tp, _CharT, _Traits,
_Dist>::_M_read() [with _Tp = float_pair, _CharT = char, _Traits =
std::char_traits<char>, _Dist = ptrdiff_t]':
/usr/lib/gcc/x86_64-redhat-linux/4.0.0/../../../../include/c++/4.0.0/bits/stream_iterator.h:68:
instantiated from 'std::istream_iterator<_Tp, _CharT, _Traits,
_Dist>::istream_iterator(std::basic_istream<_CharT , _Traits>&) [with
_Tp = float_pair, _CharT = char, _Traits = std::char_traits<char>,
_Dist = ptrdiff_t]'
optest.cc:24: instantiated from here
/usr/lib/gcc/x86_64-redhat-linux/4.0.0/../../../../include/c++/4.0.0/bits/stream_iterator.h:119:
error: no match for 'operator>>' in
'*((std::istream_iterator<float_pair, char, std::char_traits<char>,
ptrdiff_t>*)this)->std::istream_iterator<float_pair, char,
std::char_traits<char>, ptrdiff_t>::_M_stream >>
((std::istream_iterator<float_pair, char, std::char_traits<char>,
ptrdiff_t>*)this)->std::istream_iterator<float_pair, char,
std::char_traits<char>, ptrdiff_t>::_M_value'
/usr/lib/gcc/x86_64-redhat-linux/4.0.0/../../../../include/c++/4.0.0/istream:131:
note: candidates are: std::basic_istream<_CharT, _Traits>&
std::basic_istream<_CharT,
_Traits>::operator>>(std::basic_istream<_CharT, _Traits>&
(*)(std::basic_istream<_CharT, _Traits>&)) [with _CharT = char, _Traits
= std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.0.0/../../../../include/c++/4.0.0/istream:134:
note: std::basic_istream<_CharT, _Traits>&
std::basic_istream<_CharT, _Traits>::operator>>(std::basic_ios<_CharT,
_Traits>& (*)(std::basic_ios<_CharT, _Traits>&)) [with _CharT = char,
_Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.0.0/../../../../include/c++/4.0.0/istream:137:
note: std::basic_istream<_CharT, _Traits>&
std::basic_istream<_CharT, _Traits>::operator>>(std::ios_base&
(*)(std::ios_base&)) [with _CharT = char, _Traits =
std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.0.0/../../../../include/c++/4.0.0/istream:169:
note: std::basic_istream<_CharT, _Traits>&
std::basic_istream<_CharT, _Traits>::operator>>(bool&) [with _CharT =
char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.0.0/../../../../include/c++/4.0.0/istream:172:
note: std::basic_istream<_CharT, _Traits>&
std::basic_istream<_CharT, _Traits>::operator>>(short int&) [with
_CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.0.0/../../../../include/c++/4.0.0/istream:175:
note: std::basic_istream<_CharT, _Traits>&
std::basic_istream<_CharT, _Traits>::operator>>(short unsigned int&)
[with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.0.0/../../../../include/c++/4.0.0/istream:178:
note: std::basic_istream<_CharT, _Traits>&
std::basic_istream<_CharT, _Traits>::operator>>(int&) [with _CharT =
char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.0.0/../../../../include/c++/4.0.0/istream:181:
note: std::basic_istream<_CharT, _Traits>&
std::basic_istream<_CharT, _Traits>::operator>>(unsigned int&) [with
_CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.0.0/../../../../include/c++/4.0.0/istream:184:
note: std::basic_istream<_CharT, _Traits>&
std::basic_istream<_CharT, _Traits>::operator>>(long int&) [with _CharT
= char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.0.0/../../../../include/c++/4.0.0/istream:187:
note: std::basic_istream<_CharT, _Traits>&
std::basic_istream<_CharT, _Traits>::operator>>(long unsigned int&)
[with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.0.0/../../../../include/c++/4.0.0/istream:191:
note: std::basic_istream<_CharT, _Traits>&
std::basic_istream<_CharT, _Traits>::operator>>(long long int&) [with
_CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.0.0/../../../../include/c++/4.0.0/istream:194:
note: std::basic_istream<_CharT, _Traits>&
std::basic_istream<_CharT, _Traits>::operator>>(long long unsigned
int&) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.0.0/../../../../include/c++/4.0.0/istream:198:
note: std::basic_istream<_CharT, _Traits>&
std::basic_istream<_CharT, _Traits>::operator>>(float&) [with _CharT =
char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.0.0/../../../../include/c++/4.0.0/istream:201:
note: std::basic_istream<_CharT, _Traits>&
std::basic_istream<_CharT, _Traits>::operator>>(double&) [with _CharT =
char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.0.0/../../../../include/c++/4.0.0/istream:204:
note: std::basic_istream<_CharT, _Traits>&
std::basic_istream<_CharT, _Traits>::operator>>(long double&) [with
_CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.0.0/../../../../include/c++/4.0.0/istream:207:
note: std::basic_istream<_CharT, _Traits>&
std::basic_istream<_CharT, _Traits>::operator>>(void*&) [with _CharT =
char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.0.0/../../../../include/c++/4.0.0/istream:230:
note: std::basic_istream<_CharT, _Traits>&
std::basic_istream<_CharT,
_Traits>::operator>>(std::basic_streambuf<_CharT, _Traits>*) [with
_CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.0.0/../../../../include/c++/4.0.0/istream:688:
note: std::basic_istream<char, _Traits>&
std::operator>>(std::basic_istream<char, _Traits>&, unsigned char&)
[with _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.0.0/../../../../include/c++/4.0.0/istream:693:
note: std::basic_istream<char, _Traits>&
std::operator>>(std::basic_istream<char, _Traits>&, signed char&) [with
_Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.0.0/../../../../include/c++/4.0.0/istream:729:
note: std::basic_istream<char, _Traits>&
std::operator>>(std::basic_istream<char, _Traits>&, unsigned char*)
[with _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.0.0/../../../../include/c++/4.0.0/istream:734:
note: std::basic_istream<char, _Traits>&
std::operator>>(std::basic_istream<char, _Traits>&, signed char*) [with
_Traits = std::char_traits<char>]

Jul 28 '05 #1
14 2304
lutorm wrote:
Hi everyone,
I'm trying to use istream_iterators to read a file consisting of pairs
of numbers. To do this, I wrote the following:

#include <fstream>
#include <vector>
#include <iterator> ....

I don't know if you copied the code incorrectly, or the code you intended to
post had a parenthesis in the wrong place. Note that I used both GCC 3.3.5
and GCC 4.0.1. You may want to get the latest minor version.

$cat main.cpp
#include <fstream>
#include <vector>
#include <iterator>
#include <istream>

using namespace std;

typedef std::pair<double, double> float_pair;

std::istream& operator>> (std::istream& s,
std::pair<double, double>& p)
{
s >> p.first;
s >> p.second;
return s;
}

main(){
ifstream file ("filename");

float_pair p;
file >> p; // this works

std::vector<float_pair> positions // but this doesn't
(istream_iterator<float_pair> (file),istream_iterator<float_pair> ());
}
$gcc --version
gcc (GCC) 4.0.1
Copyright (C) 2005 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ g++ -otest main.cpp
$
--
If our hypothesis is about anything and not about some one or more
particular things, then our deductions constitute mathematics. Thus
mathematics may be defined as the subject in which we never know what we
are talking about, nor whether what we are saying is true.-Bertrand Russell
Jul 28 '05 #2
Ian
lutorm wrote:
Hi everyone,
I'm trying to use istream_iterators to read a file consisting of pairs
of numbers. To do this, I wrote the following:

#include <fstream>
#include <vector>
#include <iterator>

using namespace std;

typedef std::pair<double, double> float_pair;

std::istream& operator>> (std::istream& s,
std::pair<double, double>& p)
{
s >> p.first;
s >> p.second;
return s;
}

main(){
ifstream file ("filename");

float_pair p;
file >> p; // this works

std::vector<float_pair> positions // but this doesn't
(istream_iterator<float_pair> (file),
(istream_iterator<float_pair> ()));
}

It's not << (must be all the template <) that can't be found, this
should compile OK.

Ian
Jul 28 '05 #3
lutorm wrote:
Hi everyone,
I'm trying to use istream_iterators to read a file consisting of pairs
of numbers. To do this, I wrote the following:

#include <fstream>
#include <vector>
#include <iterator>

using namespace std;

typedef std::pair<double, double> float_pair;

std::istream& operator>> (std::istream& s,
std::pair<double, double>& p)
Shouldn't this line be:
std::istream& operator<< (std::istream& s, std::pair<double, double>& p)
^^^
{
s >> p.first;
s >> p.second;
return s;
}

main(){
ifstream file ("filename");

float_pair p;
file >> p; // this works

std::vector<float_pair> positions // but this doesn't
(istream_iterator<float_pair> (file),
(istream_iterator<float_pair> ()));
}

This used to work under my old compiler (KCC) but GCC 4.0 says it can't
find the operator<< (I think...) The full error message is below.
However, the operator works because when I try to read an individual
pair it works. Is there some magic that needs to be performed for the
istream_iterator to find the operator<<?


You haven't defined operator<< (see above).

Manfred
Jul 28 '05 #4
Please ignore my previous post.
Next time i'll think before i write :(

Manfred
Jul 28 '05 #5

lutorm wrote:
Hi everyone,
I'm trying to use istream_iterators to read a file consisting of pairs
of numbers. To do this, I wrote the following:
using namespace std;

typedef std::pair<double, double> float_pair;

std::istream& operator>> (std::istream& s,
std::pair<double, double>& p)
{
s >> p.first;
s >> p.second;
return s;
}

main(){
ifstream file ("filename");

float_pair p;
file >> p; // this works

std::vector<float_pair> positions // but this doesn't
(istream_iterator<float_pair> (file),
(istream_iterator<float_pair> ()));
}

This used to work under my old compiler (KCC) but GCC 4.0 says it can't
find the operator<< (I think...) The full error message is below.
However, the operator works because when I try to read an individual
pair it works. Is there some magic that needs to be performed for the
istream_iterator to find the operator<<?


The problem is that pair is declared in namespace std and the code for
istream_iterator as well the code for vector also are in namespace std.
istream_iterator uses operator>> for extraction. When it does this it
first searches for a most inner scope containing operator>>. The scope
happens to be namespace std, and none of the overloaded operator>>
declared there takes a pair. Second, it does an argument dependent name
lookup for operator>>. Since both of its arguments come from namespace
std the lookup never finds your global operator>>.

To workaround you may screw the standard and declare your operator>> in
namespace std. Be aware that this might lead to hard to track bugs if
some other smart guy does the same thing in one of the other
translation units your binary is comprised of.

The most portable solution is to use your own type instead of std::pair
and overload operator>> for it.

Jul 28 '05 #6
Steven T. Hatton wrote:
I don't know if you copied the code incorrectly, or the code you intended to
post had a parenthesis in the wrong place. Note that I used both GCC 3.3.5
and GCC 4.0.1. You may want to get the latest minor version.


No, it was copied correctly. The extra parentheses around one of the
istream_iterators are necessary because otherwise you don't create a
vector, you declare a function. Or at least so Item 6 (C++'s most
vexing parse) of Scott Myers' "Effective STL" says.

But after browsing a little more, I found the solution: The operator
apparently has to be declared in namespace std. I'm not sure why,
because I thought that lookup included the namespace of the caller, but
clearly I'm wrong. If anyone can offer an explanation of this, I'd be
all ears! :-)

/Patrik

Jul 28 '05 #7
lutorm wrote:
Steven T. Hatton wrote:
I don't know if you copied the code incorrectly, or the code you intended
to post had a parenthesis in the wrong place. Note that I used both GCC
3.3.5
and GCC 4.0.1. You may want to get the latest minor version.
No, it was copied correctly. The extra parentheses around one of the
istream_iterators are necessary because otherwise you don't create a
vector, you declare a function. Or at least so Item 6 (C++'s most
vexing parse) of Scott Myers' "Effective STL" says.


Sorry. I realized that's what was going on after I sent the message. For
some strange reason only one of the parentheses was copied into the Emacs
buffer. (there's something broken in my beta version of KNode). When the
code didn't compile, I just removed the one parenthesis.
But after browsing a little more, I found the solution: The operator
apparently has to be declared in namespace std. I'm not sure why,
because I thought that lookup included the namespace of the caller, but
clearly I'm wrong. If anyone can offer an explanation of this, I'd be
all ears! :-)

/Patrik


Can you provide the source where you found someone saying the operator needs
to be declared in namespace std, or are you talking about Maxim's post
here?
--
If our hypothesis is about anything and not about some one or more
particular things, then our deductions constitute mathematics. Thus
mathematics may be defined as the subject in which we never know what we
are talking about, nor whether what we are saying is true.-Bertrand Russell
Jul 28 '05 #8
lutorm wrote:
Hi everyone,
I'm trying to use istream_iterators to read a file consisting of pairs
of numbers. To do this, I wrote the following:


What about this kludge?
struct float_pair: public pair<double, double>{};
--
If our hypothesis is about anything and not about some one or more
particular things, then our deductions constitute mathematics. Thus
mathematics may be defined as the subject in which we never know what we
are talking about, nor whether what we are saying is true.-Bertrand Russell
Jul 28 '05 #9
Steven T. Hatton wrote:
lutorm wrote:
Hi everyone,
I'm trying to use istream_iterators to read a file consisting of pairs
of numbers. To do this, I wrote the following:


What about this kludge?
struct float_pair: public pair<double, double>{};


You lose pair's constructors - all the functions it provides.

Jul 28 '05 #10
Ian
Maxim Yegorushkin wrote:
lutorm wrote:
Hi everyone,
I'm trying to use istream_iterators to read a file consisting of pairs
of numbers. To do this, I wrote the following:
using namespace std;

typedef std::pair<double, double> float_pair;

std::istream& operator>> (std::istream& s,
std::pair<double, double>& p)
{
s >> p.first;
s >> p.second;
return s;
}

main(){
ifstream file ("filename");

float_pair p;
file >> p; // this works

std::vector<float_pair> positions // but this doesn't
(istream_iterator<float_pair> (file),
(istream_iterator<float_pair> ()));
}

This used to work under my old compiler (KCC) but GCC 4.0 says it can't
find the operator<< (I think...) The full error message is below.
However, the operator works because when I try to read an individual
pair it works. Is there some magic that needs to be performed for the
istream_iterator to find the operator<<?

The problem is that pair is declared in namespace std and the code for
istream_iterator as well the code for vector also are in namespace std.
istream_iterator uses operator>> for extraction. When it does this it
first searches for a most inner scope containing operator>>. The scope
happens to be namespace std, and none of the overloaded operator>>
declared there takes a pair. Second, it does an argument dependent name
lookup for operator>>. Since both of its arguments come from namespace
std the lookup never finds your global operator>>.

Are you sure? Even when all the types are fully qualified as in this
example?

Ian
Jul 28 '05 #11
[]
Are you sure?
Yes, I am.
Even when all the types are fully qualified as in this example?


file >> p; // this works

The call here works because it finds operator>> using ordinary lookup
because this is no template code. The set of viable functions for call
is comprised of the global operator>> and those found by ADL. The
latter set is empty.

istream_iterator<float_pair> does not work because it's a template, so
it searches for an operator>> in the second phase of name lookup using
ADL only, because the call is argument dependent. Since the operator>>
is not in the same namespace as any of its arguments, it can never be
found by ADL.

Jul 28 '05 #12


Maxim Yegorushkin wrote:
Steven T. Hatton wrote:
lutorm wrote:
Hi everyone,
I'm trying to use istream_iterators to read a file consisting of pairs
of numbers. To do this, I wrote the following:


What about this kludge?
struct float_pair: public pair<double, double>{};


You lose pair's constructors - all the functions it provides.


Even more significantly for me, vector<float_pair> is then not
convertible to vector<pair<float, float> >, which I'm compelled to pass
later on.

Jul 28 '05 #13
lutorm wrote:
Hi everyone,
I'm trying to use istream_iterators to read a file consisting of pairs
of numbers. To do this, I wrote the following:

#include <fstream>
#include <vector>
#include <iterator>

using namespace std;

typedef std::pair<double, double> float_pair;

std::istream& operator>> (std::istream& s,
std::pair<double, double>& p)
{
s >> p.first;
s >> p.second;
return s;
}

main(){
ifstream file ("filename");

float_pair p;
file >> p; // this works

std::vector<float_pair> positions // but this doesn't
(istream_iterator<float_pair> (file),
(istream_iterator<float_pair> ()));
}

This used to work under my old compiler (KCC) but GCC 4.0 says it can't
find the operator<< (I think...) The full error message is below.
However, the operator works because when I try to read an individual
pair it works. Is there some magic that needs to be performed for the
istream_iterator to find the operator<<?

Thanks,

/Patrik Jonsson


I haven't been able to make anything work, but I've been trying to create a
wrapper similar to an I/O manipulator that would serve no other real
function in life other than to bring the namespace into scope. I wonder if
someone else can find a way to accomplish that.
--
If our hypothesis is about anything and not about some one or more
particular things, then our deductions constitute mathematics. Thus
mathematics may be defined as the subject in which we never know what we
are talking about, nor whether what we are saying is true.-Bertrand Russell
Jul 29 '05 #14
lutorm wrote:
Maxim Yegorushkin wrote:
Steven T. Hatton wrote:
lutorm wrote:

> Hi everyone,
> I'm trying to use istream_iterators to read a file consisting of pairs
> of numbers. To do this, I wrote the following:

What about this kludge?
struct float_pair: public pair<double, double>{};


You lose pair's constructors - all the functions it provides.


Even more significantly for me, vector<float_pair> is then not
convertible to vector<pair<float, float> >, which I'm compelled to pass
later on.


You can still make it convertible, though it makes you copy:

#include <vector>
#include <algorithm>

struct S
{
float a, b;
operator std::pair<float, float>() const { return std::make_pair(a,
b); }
};

int main()
{
using namespace std;
vector<S> p;
vector<pair<float, float> > q(p.begin(), p.end());
}

Jul 29 '05 #15

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

3
by: Carlo Capelli | last post by:
I found a change in the following code, that behaved correctly in VC++ 6. #include <strstream> using namespace std; void main() { char x; ostrstream(x, 100) << "pippo" << "pluto" << ends;...
4
by: rjd | last post by:
Does anybody else see this in VS.NET 2003? When I get a genuine C++ compiler error (could be anything, usually innocuous) it's regularly followed by a slew of these spurious and completely...
4
by: homsan toft | last post by:
I've tried the below code with MSVC and Comeau online compiler. Both complain that operator<< for Outer<part<size_t> >::inner is not defined. So how do I declare it without doing full...
11
by: fungus | last post by:
I have some classes which have a "writeTo()" function but no operator<<. I want to fix it so that they all have an operator<< (for consistency). Can I do something like this: template <class...
5
by: krzysztof.konopko | last post by:
I cannot compile the code which defines a std::map type consisting of built in types and operator<< overload for std::map::value_type. See the code below - I attach a full example. Note: if I...
29
by: aarthi28 | last post by:
Hi, I have written this code, and at the end, I am trying to write a vector of strings into a text file. However, my program is nor compiling, and it gives me the following error when I try to...
3
by: subramanian100in | last post by:
Consider the code: #include <iostream> using namespace std; int main( ) { cout << "test string "; cout.operator<<(10).operator<<(endl);
1
by: raan | last post by:
All were working well until I decided to add a copy constructor. Please see the program. I am getting "c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include \functional(139) : error...
2
by: soy.hohe | last post by:
Hi all I have a class StreamLogger which implements operator << in this way: template <class TStreamLogger& operator<<(const T& t) { <print the stuff using fstream, etc.> return *this; }
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...
0
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.