<?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[Datei durchsuchen]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich habe folgendes Problem.<br />
Ich möchte eine Logdatei durchsuchen nach einem bestimmten string von oben nach unten.<br />
Dies stellt kein Problem dar, nun ist es aber so, dass ich ab diesem gefundenen string nach oben weitersuchen muss.<br />
Wie kann getline dazu bewegen um zurück zu springen?</p>
<p>Anbei der bereits vorhandene Code:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;

int main()
{
    std::ifstream infile(&quot;input.txt&quot;);
	std::string strUPOC = &quot;1&quot;;
	int found;

    //std::ofstream outfile(&quot;output.txt&quot;);

    if( infile.is_open() /*&amp;&amp; outfile.is_open()*/ )
    {
        std::string strLine;

        while( std::getline(infile, strLine) )
        {
			found=strLine.find(strUPOC);
			if (found!=std::string::npos)

			{
				std::cout &lt;&lt; strLine &lt;&lt; std::endl;
			}

        }

        infile.close();
        //outfile.close();
    }
	system(&quot;PAUSE &gt; NUL&quot;);
    return 0;
}[e]upsilon[/e]
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/258280/datei-durchsuchen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 09 Sep 2026 10:35:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/258280.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 08 Jan 2010 16:53:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Datei durchsuchen on Fri, 08 Jan 2010 16:53:52 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich habe folgendes Problem.<br />
Ich möchte eine Logdatei durchsuchen nach einem bestimmten string von oben nach unten.<br />
Dies stellt kein Problem dar, nun ist es aber so, dass ich ab diesem gefundenen string nach oben weitersuchen muss.<br />
Wie kann getline dazu bewegen um zurück zu springen?</p>
<p>Anbei der bereits vorhandene Code:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;

int main()
{
    std::ifstream infile(&quot;input.txt&quot;);
	std::string strUPOC = &quot;1&quot;;
	int found;

    //std::ofstream outfile(&quot;output.txt&quot;);

    if( infile.is_open() /*&amp;&amp; outfile.is_open()*/ )
    {
        std::string strLine;

        while( std::getline(infile, strLine) )
        {
			found=strLine.find(strUPOC);
			if (found!=std::string::npos)

			{
				std::cout &lt;&lt; strLine &lt;&lt; std::endl;
			}

        }

        infile.close();
        //outfile.close();
    }
	system(&quot;PAUSE &gt; NUL&quot;);
    return 0;
}[e]upsilon[/e]
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1835143</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1835143</guid><dc:creator><![CDATA[Pardalis]]></dc:creator><pubDate>Fri, 08 Jan 2010 16:53:52 GMT</pubDate></item><item><title><![CDATA[Reply to Datei durchsuchen on Fri, 08 Jan 2010 17:09:57 GMT]]></title><description><![CDATA[<p><a href="http://www.cplusplus.com/reference/iostream/istream/seekg/" rel="nofollow">http://www.cplusplus.com/reference/iostream/istream/seekg/</a></p>
<p>Oder merk dir den Inhalt der Datei, den du vorher gelesen hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1835157</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1835157</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 08 Jan 2010 17:09:57 GMT</pubDate></item><item><title><![CDATA[Reply to Datei durchsuchen on Fri, 08 Jan 2010 17:42:54 GMT]]></title><description><![CDATA[<p>Besten Dank für die schnelle Antwort.<br />
Das mit dem Inhalt merken ist ein guter Ansatz, die Datei an sich schwankt zwischen 200 und 300 MB aber von dem gefundenen String brauche ich nur ca. 20 Zeilen davor.<br />
Aber geht das ganze so nicht in die Knie, bei einem so grossen File, wenn ich mir jeweils 20 Zeilen merken würde?</p>
<p>Gruss</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1835189</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1835189</guid><dc:creator><![CDATA[Pardalis]]></dc:creator><pubDate>Fri, 08 Jan 2010 17:42:54 GMT</pubDate></item><item><title><![CDATA[Reply to Datei durchsuchen on Fri, 08 Jan 2010 17:48:32 GMT]]></title><description><![CDATA[<p>Nö, du cache'st (sorry für die Ausdrucksweise^^) jedes getline() in einer Liste und schmeißt bei jedem Durchgang die älteste Zeile raus, sobald du eben mehr als 20 hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1835193</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1835193</guid><dc:creator><![CDATA[Icematix]]></dc:creator><pubDate>Fri, 08 Jan 2010 17:48:32 GMT</pubDate></item><item><title><![CDATA[Reply to Datei durchsuchen on Fri, 08 Jan 2010 20:49:34 GMT]]></title><description><![CDATA[<p>Ja das klappt ja wunderbar<br />
um ne 200 MB Datei zu durchsuchen dauert es ca. genau 30 sec.<br />
wenn ich die letzten 20 Zeilen zwischenspeichere geht das ganze nur eine sec länger.</p>
<p>So habe ich dies gelöst, gibt es eine bessere Variante?</p>
<pre><code class="language-cpp">std::string strLineBefore[20];
int CountLines = 0; 

				if (CountLines &gt; 19)
					{
						CountLines = 0;
						strLineBefore[CountLines] = strLine;

					}
				else
					{

						strLineBefore[CountLines] = strLine;
						CountLines++;
					}
</code></pre>
<p>Gruess</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1835315</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1835315</guid><dc:creator><![CDATA[Pardalis]]></dc:creator><pubDate>Fri, 08 Jan 2010 20:49:34 GMT</pubDate></item><item><title><![CDATA[Reply to Datei durchsuchen on Fri, 08 Jan 2010 21:21:06 GMT]]></title><description><![CDATA[<p>Pardalis schrieb:</p>
<blockquote>
<p>Ja das klappt ja wunderbar<br />
um ne 200 MB Datei zu durchsuchen dauert es ca. genau 30 sec.<br />
wenn ich die letzten 20 Zeilen zwischenspeichere geht das ganze nur eine sec länger.</p>
<p>So habe ich dies gelöst, gibt es eine bessere Variante?</p>
<pre><code class="language-cpp">std::string strLineBefore[20];
int CountLines = 0; 

				if (CountLines &gt; 19)
					{
						CountLines = 0;
						strLineBefore[CountLines] = strLine;
					
					}
				else
					{
					
						strLineBefore[CountLines] = strLine;
						CountLines++;
					}
</code></pre>
<p>Gruess</p>
</blockquote>
<p>Wüsste jetzt keine bessere Lösung. Natürlich kann man auch einen Vector nehmen und vorne pushen und hinten poppen, aber der kann Geschwindigkeitstechnisch natürlich nicht mit einem rohem Array nicht mithalten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1835330</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1835330</guid><dc:creator><![CDATA[jkljkl]]></dc:creator><pubDate>Fri, 08 Jan 2010 21:21:06 GMT</pubDate></item><item><title><![CDATA[Reply to Datei durchsuchen on Fri, 08 Jan 2010 21:30:30 GMT]]></title><description><![CDATA[<p>Mit Vector kenne ich mich sowieso nicht aus <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="🙂"
    /><br />
Ich Poste dann mal den kompletten code wenn ich fertig bin, vielleicht kanns ja jemand gebrauchen. <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>kann man die Vektoren ähnlich wie ein Schieberegister (Digitalrechnik) brauchen?</p>
<p>Gruss</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1835334</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1835334</guid><dc:creator><![CDATA[Pardalis]]></dc:creator><pubDate>Fri, 08 Jan 2010 21:30:30 GMT</pubDate></item><item><title><![CDATA[Reply to Datei durchsuchen on Fri, 08 Jan 2010 21:38:51 GMT]]></title><description><![CDATA[<p>Du kannst dir auch mit tellg nur die Positionen merken und dann zurückspringen. Das müsste nochmal deutlich schneller gehen als das viele Stringkopieren. Aber wie du sagst, macht es ja geschwindigkeitsmäßig ohnehin wenig aus. Dann lohnt es sich nicht unbedingt, etwas Funktionierendes nochmal umzuschreiben.</p>
<p>P.S.: 30 s für 200 MB? Kommst mir irgendwie viel vor. Machst du da sehr aufwändige Sachen beim Einlesen oder hast du so einen langsamen Datenträger?</p>
<p>edit:</p>
<blockquote>
<p>kann man die Vektoren ähnlich wie ein Schieberegister (Digitalrechnik) brauchen?</p>
</blockquote>
<p>Vektoren sind denkbar ungeeignet für Schieberegister. Im Standard kommen da am ehesten die Datenstrukturen deque und list dran, besser ist aber eine eigene Klasse dafür. Das nennt man dann Ringpuffer. Gibt's natürlich auch schon fertig, beispielsweise in der 'boost' bibliothekssammlung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1835341</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1835341</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 08 Jan 2010 21:38:51 GMT</pubDate></item><item><title><![CDATA[Reply to Datei durchsuchen on Fri, 08 Jan 2010 22:24:03 GMT]]></title><description><![CDATA[<p>Was ich genau mache..</p>
<p>Ich habe eine Datei, hier ein Auschnitt:</p>
<pre><code>04.01.2010 06:45:54:187	2	RS232Communicator	0x69C CxFrame MainThread	Info: Steuer Modul: strBarcode = 0100140226581691,lFPSyncID=9,lDruckenEin = 1,lUseStempelversatz=0,lPrintStempelVersatz = 0,lPrintPorto = 1,lPrintDate = 0,strKlische = ,strSI1=04,strSI2=05,strSI3=2,lLeistungNr=0 ()	578C1AA9-89EC-413E-B9EF-DBC225B90384
04.01.2010 06:45:54:187	2	RS232Communicator	0x7BC ---	&lt;&lt;Data Received: Frankier Modul: Frankier Modul, Lenght 8: NO END	578C1AA9-89EC-413E-B9EF-DBC225B90384
04.01.2010 06:45:54:203	2	RS232Communicator	0x7BC ---	&lt;&lt;Data Received: Frankier Modul: Frankier Modul, Lenght 14:0x04 0x02 0x01 0x04 0x00 0x00 0x06 0x00 0x37 0x3b 0x30 0x3b 0x07 0x03 )	578C1AA9-89EC-413E-B9EF-DBC225B90384
</code></pre>
<p>in dieser Datei sind ungefähr 1.2 Mio Zeilen.</p>
<p>Ich suche in der Datei eigentlich nur nach dem string &quot;strBarcode =&quot;</p>
<p>Dies geschieht folgendermassen:</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;fstream&gt;
#include &lt;time.h&gt;

.....
...

std::ifstream infile(&quot;input.txt&quot;);

	if( infile.is_open()/*&amp;&amp; outfile.is_open()*/ )
    {

        std::string strLine;

		std::cout &lt;&lt; &quot;searching...&quot; &lt;&lt; std::endl &lt;&lt; std::endl;
		time (&amp;start);

		while( std::getline(infile, strLine) )
        {

			if (strLine.find(strSearchStringUPOC)!=std::string::npos)

            {
</code></pre>
<p>Dies dauerte 30s.</p>
<p>Ich war mit den 30s eigentlich recht zufrieden ach ja und die Harddisk ist eigentlich recht flott. Gibt es denn noch was schnelleres als getline/find?</p>
<p>Edit: Das mit den 30 s war Debug Code, mit dem Release Code geht nur noch 9 s <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
<p>Gruss</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1835346</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1835346</guid><dc:creator><![CDATA[Pardalis]]></dc:creator><pubDate>Fri, 08 Jan 2010 22:24:03 GMT</pubDate></item></channel></rss>