<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Problem beim Vergleichen vom Inhalt einer Datei]]></title><description><![CDATA[<p>Hi,<br />
ich habe eine Fkt. mit der ich gerne den Inhalt zwier Dateien vergleichen moechte und falls er uebereinstimmt soll er einen Text ausgeben.</p>
<p>ps. Die Ueberpruefung soll zeilenweise stattfinden.</p>
<pre><code class="language-cpp">void lineOut( fstream&amp; stream, fstream&amp; stream2 ) {
	char buffer1[200];
	char buffer2[200];

	while( stream.getline( buffer1, sizeof(buffer1) ) ) {
		if( stream.fail() ) {
			cout &lt;&lt; &quot;  Unknown Error&quot;;
			break;
		}
		while( stream2.getline( buffer2, sizeof(buffer2) ) ) {
			if( stream2.fail() ) {
				cout &lt;&lt; &quot;  Unknown Error&quot;;
				break;
			}
		cout &lt;&lt; buffer1;
		cout &lt;&lt; buffer2;
      			if(memcmp(buffer1, buffer2, sizeof(buffer1)) == 0 )
      				cout &lt;&lt; &quot;  Eintrag existierts bereits&quot;;
		}
      }
}
</code></pre>
<p>Und aufrufen tuhe ich sie so:</p>
<pre><code class="language-cpp">temp_sid.open( &quot;db/temp_sid.txt&quot;, ios_base::out );
				temp_sid &lt;&lt; sid;
				temp_sid.close();

				temp_sid.open( &quot;db/temp_sid.txt&quot; );
				students.open( &quot;db/students.txt&quot; );
				lineOut( temp_sid, students );
				students.close();
				temp_sid.close();
</code></pre>
<p>Ich glaube es liegt an dem Vergleich buffer1 == buffer2, denn wenn ich mir den Inhalt mit:<br />
cout &lt;&lt; buffer1;<br />
cout &lt;&lt; buffer2;<br />
ausgeben lasse, erhalte ich an manschen stellen eine Uebereinstimmung der Zeilen.</p>
<p>wobei ich glaube memcmp is nur fuer int. och menno</p>
<p>Ich weiss einfach net mehr weiter, hoffe mir kann jemand helfen.</p>
<p>Rgds<br />
Coda</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/199331/problem-beim-vergleichen-vom-inhalt-einer-datei</link><generator>RSS for Node</generator><lastBuildDate>Sat, 03 Oct 2026 12:52:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/199331.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 01 Dec 2007 14:26:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem beim Vergleichen vom Inhalt einer Datei on Sat, 01 Dec 2007 14:33:54 GMT]]></title><description><![CDATA[<p>Hi,<br />
ich habe eine Fkt. mit der ich gerne den Inhalt zwier Dateien vergleichen moechte und falls er uebereinstimmt soll er einen Text ausgeben.</p>
<p>ps. Die Ueberpruefung soll zeilenweise stattfinden.</p>
<pre><code class="language-cpp">void lineOut( fstream&amp; stream, fstream&amp; stream2 ) {
	char buffer1[200];
	char buffer2[200];

	while( stream.getline( buffer1, sizeof(buffer1) ) ) {
		if( stream.fail() ) {
			cout &lt;&lt; &quot;  Unknown Error&quot;;
			break;
		}
		while( stream2.getline( buffer2, sizeof(buffer2) ) ) {
			if( stream2.fail() ) {
				cout &lt;&lt; &quot;  Unknown Error&quot;;
				break;
			}
		cout &lt;&lt; buffer1;
		cout &lt;&lt; buffer2;
      			if(memcmp(buffer1, buffer2, sizeof(buffer1)) == 0 )
      				cout &lt;&lt; &quot;  Eintrag existierts bereits&quot;;
		}
      }
}
</code></pre>
<p>Und aufrufen tuhe ich sie so:</p>
<pre><code class="language-cpp">temp_sid.open( &quot;db/temp_sid.txt&quot;, ios_base::out );
				temp_sid &lt;&lt; sid;
				temp_sid.close();

				temp_sid.open( &quot;db/temp_sid.txt&quot; );
				students.open( &quot;db/students.txt&quot; );
				lineOut( temp_sid, students );
				students.close();
				temp_sid.close();
</code></pre>
<p>Ich glaube es liegt an dem Vergleich buffer1 == buffer2, denn wenn ich mir den Inhalt mit:<br />
cout &lt;&lt; buffer1;<br />
cout &lt;&lt; buffer2;<br />
ausgeben lasse, erhalte ich an manschen stellen eine Uebereinstimmung der Zeilen.</p>
<p>wobei ich glaube memcmp is nur fuer int. och menno</p>
<p>Ich weiss einfach net mehr weiter, hoffe mir kann jemand helfen.</p>
<p>Rgds<br />
Coda</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1413378</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1413378</guid><dc:creator><![CDATA[Coda*linux.PrayLoad]]></dc:creator><pubDate>Sat, 01 Dec 2007 14:33:54 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Vergleichen vom Inhalt einer Datei on Sat, 01 Dec 2007 14:47:33 GMT]]></title><description><![CDATA[<p>Buffer1 und Buffer2 sind vom Typ char*<br />
Wenn du jetzt Buffer1==Buffer2 benutzt werden nicht der Inhalt sondern die Pointer überprüft die normalerweise ungleich sind<br />
Du kannst es so machen</p>
<pre><code class="language-cpp">bool foo(const char* A,const char *B)
{
    if(strlen(A)!=strlen(B))
        return(false);
    if(strcmp(A,B))
        return(false);
    return(true);
}
...
char *Buffer1=&quot;Hallo&quot;, *Buffer2=&quot;Welt&quot;, *Buffer3=&quot;Hallo&quot;;
foo(Buffer1,Buffer2); //0
foo(Buffer2,Buffer3); //1
foo(Buffer1,Buffer3); //0
foo(Buffer1,Buffer1); //1
</code></pre>
<p>Benutze strcmp um 2 char Buffer mit einander zu vergleichen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1413387</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1413387</guid><dc:creator><![CDATA[Blaze]]></dc:creator><pubDate>Sat, 01 Dec 2007 14:47:33 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Vergleichen vom Inhalt einer Datei on Sat, 01 Dec 2007 15:19:53 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">//! compare lines of two files for equality
/*! The compare-function reads line by line the content of the both input-streams and compare each lines.
\param first First input-stream
\param second Second input-stream
\return Count of equal lines in both input-streams */
std::size_t compare(std::istream&amp; first, std::istream&amp; second) 
{
	std::string tmp_first, tmp_second;
	std::size_t equal_lines(0);
	while ( std::getline(first, tmp_first) &amp;&amp; std::getline(second, tmp_second);)
		if (tmp_first == tmp_second) ++equal_lines;
	return equal_lines;
}
</code></pre>
<p>wäre doch viel einfacher <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>@Blazer:</p>
<pre><code class="language-cpp">bool foo(const char* A,const char *B)
{
    if(strlen(A)!=strlen(B))
        return(false);
    if(strcmp(A,B))
        return(false);
    return(true);
}
</code></pre>
<p>Das ist ja murks. std::strlen geht jedes einzelle Zeichen durch bis es auf ein '\0'. Das reicht auch direkt ein std::strcmp aus. Wenn die beiden gleich lang sind, ist es dann performanter:</p>
<pre><code class="language-cpp">bool compare(const char* first, const char* second) { return std::strcmp(first, second) == 0; }
</code></pre>
<p>Wäre höchstens snike, wenn de das machst:</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
bool compare(T const&amp; first, T const&amp; second) { return first == second; }
template&lt;&gt;
bool compare(const char* first, const char* second) { return std::strcmp(first, second) == 0); }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1413393</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1413393</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sat, 01 Dec 2007 15:19:53 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Vergleichen vom Inhalt einer Datei on Sat, 01 Dec 2007 16:15:15 GMT]]></title><description><![CDATA[<p>(D)Evil schrieb:</p>
<blockquote>
<pre><code class="language-cpp">//! compare lines of two files for equality
/*! The compare-function reads line by line the content of the both input-streams and compare each lines.
\param first First input-stream
\param second Second input-stream
\return Count of equal lines in both input-streams */
std::size_t compare(std::istream&amp; first, std::istream&amp; second) 
{
	std::string tmp_first, tmp_second;
	std::size_t equal_lines(0);
	while ( std::getline(first, tmp_first) &amp;&amp; std::getline(second, tmp_second);)
		if (tmp_first == tmp_second) ++equal_lines;
	return equal_lines;
}
</code></pre>
<p>wäre doch viel einfacher <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
</blockquote>
<p>Du bist mein Retter, grosses thx.</p>
<p>Rgds<br />
Coda</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1413432</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1413432</guid><dc:creator><![CDATA[Coda*linux.PrayLoad]]></dc:creator><pubDate>Sat, 01 Dec 2007 16:15:15 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Vergleichen vom Inhalt einer Datei on Sun, 02 Dec 2007 10:48:28 GMT]]></title><description><![CDATA[<p>Sry fuer Doppelpost aber, bin noch mal auf ein Problem gestossen.</p>
<p>Deine Fkt. hat immer nur z.B. Zeile 3 mit Zeile 3 der anderen Datei verglichen und nie Zeile 2 mit Zeile 5, weshalb ich es noch mal etwas umgeschrieben habe.</p>
<pre><code class="language-cpp">size_t compare( fstream&amp; stream, fstream&amp; stream2 )
{
	string tmp_first, tmp_second;
	size_t equal_lines(0);

	while( getline(stream, tmp_first) ) {
		while( getline(stream2, tmp_second) ) {
	        	if(tmp_first == tmp_second) {
				++equal_lines;
			}
		}
	}
return equal_lines;
}
</code></pre>
<p>Das Problem ist allerdings, dass der Rueckgabewert von der Fkt. immer 0 ist, jedoch wenn es eine Uebereinstimmung gibt, sollte equal_lines den Wert 1 oder hoeher haben, je nachdem wieviele Uebereinstimmungen es gibt.</p>
<p>Ist sicher nur ein dummer Fehler.</p>
<p>Rgds<br />
Coda</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1413720</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1413720</guid><dc:creator><![CDATA[Coda*linux.PrayLoad]]></dc:creator><pubDate>Sun, 02 Dec 2007 10:48:28 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Vergleichen vom Inhalt einer Datei on Sun, 02 Dec 2007 10:51:12 GMT]]></title><description><![CDATA[<p>Gibt bestimmt zich Libs die fertige Filehashing Funktionenen implementiert haben... so als Tipp.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1413725</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1413725</guid><dc:creator><![CDATA[Lars]]></dc:creator><pubDate>Sun, 02 Dec 2007 10:51:12 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Vergleichen vom Inhalt einer Datei on Sun, 02 Dec 2007 12:07:44 GMT]]></title><description><![CDATA[<p>Coda@linux.PrayLoad: du mußt in der Schleife den Streamzeiger natürlich jedesmal wieder auf den Anfang setzen: seekg(0) (diesen Fehler hattest du auch in deinem Originalpost).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1413748</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1413748</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Sun, 02 Dec 2007 12:07:44 GMT</pubDate></item></channel></rss>