<?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[Text aus Datei auslesen]]></title><description><![CDATA[<p>Hi,<br />
ich habe ein Problem und zwar muss ich einen Text in einer Datei suchen, ist kein Problem, dass bekomme ich auch noch hin.</p>
<p>Jetzt soll aber nicht nur diese Zeile ausgeben bei der die Uebereinstimmung vor liegt, sondern eine Zeile vor der Uebereinstimmungen und dann die nachsten 8 nachfolgenden Zeilen auch.</p>
<p>Bsp der gespeicherten Datei:</p>
<p>asdf<br />
ff<br />
aa<br />
as<br />
da<br />
kdla<br />
kdal<br />
ied<br />
kk<br />
pp<br />
ww<br />
ea<br />
rr<br />
yy</p>
<p>So, ich suche jetzt nach &quot;da&quot; und die Funktion die ich geschrieben habe, findet dann in der 5. Zeile eine uebereinstimmung. Jetzt moechte ich die Zeile vor &quot;da&quot; ausgeben und die 8 folgenden Zeilen, so dass die Ausgabe in der Konsole dann wie fogt aussieht:</p>
<p>as<br />
da<br />
kdla<br />
kdal<br />
ied<br />
kk<br />
pp<br />
ww</p>
<p>Ich weiss nicht wie ich angeben kann, welche Zeilen in einer Datei ausgegeben werden sollen. Ich habe mir gedacht ich koennte die Courserposition feststellen lassen, wenn eine Uebereinstimmung zutrifft, jedoch ist dann immer noch das Problem, dass ich von dieser Position eine Zeile nach oben springen muss um anschliessend die naechsten 8 Zeilen auszugeben.</p>
<p>Hoffe ich konnte mein Problem einigermasse erklaeren.</p>
<p>Der eine oder ander fragt sich vllt warum ich nicht gleich nach &quot;as&quot; suche, die Courserposition speichere und dann noch einmal &quot;ww&quot; suche und auch diese Courserposition speichere um diesen Bereich als Block ausgeben lasse. Die Antwort ist einfach, &quot;as&quot; und &quot;ww&quot; sind nicht bekannt, es ist aber bekannt, dass ab &quot;as&quot; nur noch 8 Zeilen bis zu &quot;ww&quot; gibt, die wichtig sind.</p>
<p>Rgds<br />
Coda</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/200475/text-aus-datei-auslesen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 04 Oct 2026 21:46:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/200475.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 15 Dec 2007 15:00:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Text aus Datei auslesen on Sat, 15 Dec 2007 15:00:54 GMT]]></title><description><![CDATA[<p>Hi,<br />
ich habe ein Problem und zwar muss ich einen Text in einer Datei suchen, ist kein Problem, dass bekomme ich auch noch hin.</p>
<p>Jetzt soll aber nicht nur diese Zeile ausgeben bei der die Uebereinstimmung vor liegt, sondern eine Zeile vor der Uebereinstimmungen und dann die nachsten 8 nachfolgenden Zeilen auch.</p>
<p>Bsp der gespeicherten Datei:</p>
<p>asdf<br />
ff<br />
aa<br />
as<br />
da<br />
kdla<br />
kdal<br />
ied<br />
kk<br />
pp<br />
ww<br />
ea<br />
rr<br />
yy</p>
<p>So, ich suche jetzt nach &quot;da&quot; und die Funktion die ich geschrieben habe, findet dann in der 5. Zeile eine uebereinstimmung. Jetzt moechte ich die Zeile vor &quot;da&quot; ausgeben und die 8 folgenden Zeilen, so dass die Ausgabe in der Konsole dann wie fogt aussieht:</p>
<p>as<br />
da<br />
kdla<br />
kdal<br />
ied<br />
kk<br />
pp<br />
ww</p>
<p>Ich weiss nicht wie ich angeben kann, welche Zeilen in einer Datei ausgegeben werden sollen. Ich habe mir gedacht ich koennte die Courserposition feststellen lassen, wenn eine Uebereinstimmung zutrifft, jedoch ist dann immer noch das Problem, dass ich von dieser Position eine Zeile nach oben springen muss um anschliessend die naechsten 8 Zeilen auszugeben.</p>
<p>Hoffe ich konnte mein Problem einigermasse erklaeren.</p>
<p>Der eine oder ander fragt sich vllt warum ich nicht gleich nach &quot;as&quot; suche, die Courserposition speichere und dann noch einmal &quot;ww&quot; suche und auch diese Courserposition speichere um diesen Bereich als Block ausgeben lasse. Die Antwort ist einfach, &quot;as&quot; und &quot;ww&quot; sind nicht bekannt, es ist aber bekannt, dass ab &quot;as&quot; nur noch 8 Zeilen bis zu &quot;ww&quot; gibt, die wichtig sind.</p>
<p>Rgds<br />
Coda</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1420983</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1420983</guid><dc:creator><![CDATA[Coda*linux.PrayLoad]]></dc:creator><pubDate>Sat, 15 Dec 2007 15:00:54 GMT</pubDate></item><item><title><![CDATA[Reply to Text aus Datei auslesen on Sat, 15 Dec 2007 17:43:45 GMT]]></title><description><![CDATA[<p>ja was hällt dich davon ab jede zeile zu speichern und dann von der gefunden zeile z , z-1 bi z+7 auszugeben?<br />
ev. hab ich das problem falsch verstanden</p>
<p>lg spjoe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1421067</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1421067</guid><dc:creator><![CDATA[spjoe]]></dc:creator><pubDate>Sat, 15 Dec 2007 17:43:45 GMT</pubDate></item><item><title><![CDATA[Reply to Text aus Datei auslesen on Sat, 15 Dec 2007 17:59:08 GMT]]></title><description><![CDATA[<p>Wenn ich wuesste, wie ich feststellen kann in welcher Zeile ich mich befinde waehre das moeglich, jedoch weiss ich bis jetzt nur wie ich die Position des aktuellen Byte-Offset des get-Zeigers relativ zum Dateianfang bekommen kann.</p>
<p>istream.tellg();</p>
<p>wie ich jedoch die Zeile ermitteln kann weiss ich nicht.</p>
<p>Wenn du meinst, dass ich erst alle Zeilen des Dokuments in ein Array einlesen soll und dann die Position im Array ermitteln soll wo die Uebereinstimmung ist und von der dan z-1 bis z+7 ausgeben soll, kann ich gleich sage, dass das zu viel speicher verbraucht.</p>
<p>Rgds<br />
Coda</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1421074</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1421074</guid><dc:creator><![CDATA[Coda*linux.PrayLoad]]></dc:creator><pubDate>Sat, 15 Dec 2007 17:59:08 GMT</pubDate></item><item><title><![CDATA[Reply to Text aus Datei auslesen on Sat, 15 Dec 2007 17:54:04 GMT]]></title><description><![CDATA[<p>Wenn du in einer Schleife die Zeilen ausliest, kannst du dir doch ganz einfach die Zeilennummer merken...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1421076</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1421076</guid><dc:creator><![CDATA[The-Kenny]]></dc:creator><pubDate>Sat, 15 Dec 2007 17:54:04 GMT</pubDate></item><item><title><![CDATA[Reply to Text aus Datei auslesen on Sat, 15 Dec 2007 18:06:34 GMT]]></title><description><![CDATA[<p>Wie soll ich mir die Zeilennummer merken? er durchsucht das Dokument zeile fuer zeile auf eine Uebereinstuemmung, woher soll ich dann wissen in welcher zeile die Uebereinstiumm war?</p>
<p>Ok, ich koennte einfach einen counter neben her laufen lassen fuer jede Zeile die er ueberprueft, es bleibt jedoch immer noch das Problem wie ich in z.B. Zeile 15 springen kann.</p>
<p>Rgds<br />
Coda</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1421080</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1421080</guid><dc:creator><![CDATA[Coda*linux.PrayLoad]]></dc:creator><pubDate>Sat, 15 Dec 2007 18:06:34 GMT</pubDate></item><item><title><![CDATA[Reply to Text aus Datei auslesen on Sat, 15 Dec 2007 18:40:22 GMT]]></title><description><![CDATA[<p>das beispiel liest alle zeilen in einen vector, geht diesen dann durch und überprüft wo &quot;da&quot; steht, gibt sogar die zeilennummer aus (du siehst, es ist möglich sich diese zu merken <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
gibt die zeile vor &quot;da&quot; sowie die folgenden 6 (wie in deinem beispiel) aus</p>
<pre><code class="language-cpp">std::vector&lt;std::string&gt; zeilen;
	while(! file.eof())
	{
		std::string z;
		// zeile einlesen
		file &gt;&gt; z;
		// und in den vector schreiben
		zeilen.push_back(z);
	}
	for(size_t i=0; i&lt;zeilen.size(); ++i)
	{
		if(zeilen[i] == &quot;da&quot;)
		{
			// vorherige zeile ausgeben
			std::cout &lt;&lt; &quot;Zeile &quot; &lt;&lt; i &lt;&lt; &quot;: &quot; &lt;&lt; zeilen[i-1] &lt;&lt; std::endl;
			// die 6 folgenden
			for(int j=1; j&lt;=6; j++)
			{
				std::cout &lt;&lt; &quot;Zeile &quot; &lt;&lt; i+j &lt;&lt; &quot;: &quot; &lt;&lt; zeilen[i+j] &lt;&lt; std::endl;
			}
		}
	}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1421098</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1421098</guid><dc:creator><![CDATA[hey]]></dc:creator><pubDate>Sat, 15 Dec 2007 18:40:22 GMT</pubDate></item><item><title><![CDATA[Reply to Text aus Datei auslesen on Sat, 15 Dec 2007 18:41:54 GMT]]></title><description><![CDATA[<p>kein gewähr, dass es läuft,<br />
vergiss die abbruchbedingung nicht (die ich vergessen hab)<br />
und guck, ob die indices stimmen, sonst gibtsn laufzeitfehler</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1421100</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1421100</guid><dc:creator><![CDATA[hey]]></dc:creator><pubDate>Sat, 15 Dec 2007 18:41:54 GMT</pubDate></item><item><title><![CDATA[Reply to Text aus Datei auslesen on Sun, 16 Dec 2007 08:21:53 GMT]]></title><description><![CDATA[<p>Sieht ganz gut aus, jedoch verstehe ich noch nicht so ganz:</p>
<p>vector&lt;string&gt; zeilen;</p>
<p>ich muss die ja noch initialisieren...</p>
<pre><code>test.cpp:11: Fehler: »vector« wurde in diesem Gültigkeitsbereich nicht definiert
test.cpp:11: Fehler: expected primary-expression before »&gt;« token
test.cpp:11: Fehler: »zeilen« wurde in diesem Gültigkeitsbereich nicht definiert
</code></pre>
<p>Des Weiteren werden jetzt wirklich alle Zeilen eingelesen und bei einem groesseren Dokument wird das einiges an Speicher verbrauchen, aber wenn es nicht anders geht werde ich es wohl so machen muessen.</p>
<p>Rgds<br />
Coda</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1421243</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1421243</guid><dc:creator><![CDATA[Coda*linux.PrayLoad]]></dc:creator><pubDate>Sun, 16 Dec 2007 08:21:53 GMT</pubDate></item><item><title><![CDATA[Reply to Text aus Datei auslesen on Sun, 16 Dec 2007 09:04:57 GMT]]></title><description><![CDATA[<p>Hmm also für std::vector brauchst du den HEader &lt;vector&gt;.<br />
Du kannst es auch direkt beim Auslesen machen ... kommt nur darauf an, ob er <strong>alle</strong> Vorkommen des Strings raussuchen soll, oder nur eine.</p>
<pre><code class="language-cpp">std::ifstream file_stream(&quot;test.dat&quot;);
if (!file_stream) throw std::runtime_error(&quot;\&quot;test.dat\&quot; could not be opened!&quot;);

std::string string_temp;
while (std::getline(file_stream, string_temp))
{
    if (string_temp == &quot;da&quot;)
    {
        const std::streampos old_pos(file_stream.tellg());
        for (std::size_t i(0); i &lt; 6; ++i, std::getline(file_stream, string_temp)) 
            std::cout &lt;&lt; string_temp &lt;&lt; std::endl;
        file_stream.seekg(old_pos);
    }
}
</code></pre>
<p>... wenn er nur einmal finden soll, mach hinter dem file_stream.seekg (wenn du es in eine Funktion auslagerst) dein return oder break (wenn du es nicht in eine Funktion auslagerst).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1421253</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1421253</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sun, 16 Dec 2007 09:04:57 GMT</pubDate></item><item><title><![CDATA[Reply to Text aus Datei auslesen on Sun, 16 Dec 2007 14:06:11 GMT]]></title><description><![CDATA[<p>Super, ich danke euch hey &amp; (D)Evil.</p>
<p>Rgds<br />
Coda</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1421371</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1421371</guid><dc:creator><![CDATA[Coda*linux.PrayLoad]]></dc:creator><pubDate>Sun, 16 Dec 2007 14:06:11 GMT</pubDate></item></channel></rss>