<?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 zeileneise auslesen]]></title><description><![CDATA[<p>Hej,</p>
<p>ich bin noch ein ziemlicher C++ Neuling und kämpfe gerade mit dem folgenden Problem rum: Ich möchte ein Programm schreiben, welches eine (Log)Datei zeilenweise ausliest und die Zeilen nach einem bestimmten Muster durchsucht.<br />
Im ersten Schritt wollte ich einfach mal ein Programm schreiben, dass überhaupt mal eine Textdatei öffnet und sie zeilenweise durchgeht und dann die Zeilen in die Konsole schreibt.<br />
Nach ein bisschen googlen habe ich mir folgenden Code zusammengeklaut:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;istream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;

using namespace std;

int main() {

	char line[256];

	  ifstream infile (&quot;D:\\Logs\\log.txt&quot;, ios::in);

	  if (!infile)
	    {
	      cout &lt;&lt; &quot;Kein File :-(&quot; &lt;&lt; endl;
	      return 1;
	    }

	  while (infile.getline (line, 256))
	    {
	      // mach was mit der zeile
	      cout &lt;&lt; line &lt;&lt; endl;
	    }
	  cout &lt;&lt; endl;

	  return 0;
	}
</code></pre>
<p>Das Programm tut es auch mehr odre weniger, allerdings geht es nicht die gesamte Logdatei durch, sondern bricht einfach irgendwann ab. Dazu sollte man vllt anmerken, dass die Logs sehr groß werden können und ich vermute, dass es vllt Speichermäßig nicht ausreicht.<br />
Kann mir da jmd auf die Sprünge helfen, ob ich in dem Code was vergessen habe oder Ansatz mit ifstream nicht der Richtige ist und es besser Alternativen für dieses Problem gibt?<br />
So nebenbei gefragt (für meine nächste Ausbaustufe schon mal): Wenn ich in Dateien nach Zeilen suche, die einem bestimmten Muster entsprechen, soll ich da regex nehmen oder gibt es was simpleres? Am besten std-Bib? Oder was würdet ihr mir da empfehlen?</p>
<p>Viele grüße und danke schonmal im vorraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/307634/datei-zeileneise-auslesen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 06 Aug 2026 15:59:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/307634.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 31 Aug 2012 15:00:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Datei zeileneise auslesen on Fri, 31 Aug 2012 15:00:42 GMT]]></title><description><![CDATA[<p>Hej,</p>
<p>ich bin noch ein ziemlicher C++ Neuling und kämpfe gerade mit dem folgenden Problem rum: Ich möchte ein Programm schreiben, welches eine (Log)Datei zeilenweise ausliest und die Zeilen nach einem bestimmten Muster durchsucht.<br />
Im ersten Schritt wollte ich einfach mal ein Programm schreiben, dass überhaupt mal eine Textdatei öffnet und sie zeilenweise durchgeht und dann die Zeilen in die Konsole schreibt.<br />
Nach ein bisschen googlen habe ich mir folgenden Code zusammengeklaut:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;istream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;

using namespace std;

int main() {

	char line[256];

	  ifstream infile (&quot;D:\\Logs\\log.txt&quot;, ios::in);

	  if (!infile)
	    {
	      cout &lt;&lt; &quot;Kein File :-(&quot; &lt;&lt; endl;
	      return 1;
	    }

	  while (infile.getline (line, 256))
	    {
	      // mach was mit der zeile
	      cout &lt;&lt; line &lt;&lt; endl;
	    }
	  cout &lt;&lt; endl;

	  return 0;
	}
</code></pre>
<p>Das Programm tut es auch mehr odre weniger, allerdings geht es nicht die gesamte Logdatei durch, sondern bricht einfach irgendwann ab. Dazu sollte man vllt anmerken, dass die Logs sehr groß werden können und ich vermute, dass es vllt Speichermäßig nicht ausreicht.<br />
Kann mir da jmd auf die Sprünge helfen, ob ich in dem Code was vergessen habe oder Ansatz mit ifstream nicht der Richtige ist und es besser Alternativen für dieses Problem gibt?<br />
So nebenbei gefragt (für meine nächste Ausbaustufe schon mal): Wenn ich in Dateien nach Zeilen suche, die einem bestimmten Muster entsprechen, soll ich da regex nehmen oder gibt es was simpleres? Am besten std-Bib? Oder was würdet ihr mir da empfehlen?</p>
<p>Viele grüße und danke schonmal im vorraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247406</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247406</guid><dc:creator><![CDATA[mo9ua]]></dc:creator><pubDate>Fri, 31 Aug 2012 15:00:42 GMT</pubDate></item><item><title><![CDATA[Reply to Datei zeileneise auslesen on Fri, 31 Aug 2012 15:06:40 GMT]]></title><description><![CDATA[<p>Zeig mal den Aufbau der Logdatei und welches Muster, also was genau, du dann habe willst...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247411</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247411</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 31 Aug 2012 15:06:40 GMT</pubDate></item><item><title><![CDATA[Reply to Datei zeileneise auslesen on Fri, 31 Aug 2012 15:23:31 GMT]]></title><description><![CDATA[<p>Ich tippe mal darauf, dass eine Zeile &gt; 256 Zeichen hat. Kann das sein?<br />
Wie auch immer, warum nicht ein std::string?</p>
<pre><code class="language-cpp">ifstream is(&quot;D:/Logs/log.txt&quot;); // Wir nehmen immer Slashes.

if(!is)
{
    ...
}

for(string line; getline(is, line);)
{
    cout &lt;&lt; line &lt;&lt; '\n';
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2247417</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247417</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Fri, 31 Aug 2012 15:23:31 GMT</pubDate></item><item><title><![CDATA[Reply to Datei zeileneise auslesen on Fri, 31 Aug 2012 16:05:18 GMT]]></title><description><![CDATA[<p>Kellerautomat schrieb:</p>
<blockquote>
<pre><code class="language-cpp">ifstream is(&quot;D:/Logs/log.txt&quot;); // Wir nehmen immer Slashes.
</code></pre>
</blockquote>
<p>Wozu? Pfade sind sowieso plattformabhängig.<br />
Bei relativen Pfaden würde es noch sinn machen, damit diese unter Windows und Linux funktionieren.<br />
Bei absoluten Pfaden wie diesem hier... der funktioniert sowieso nur unter Windows.<br />
Und dem Standard ist es egal.</p>
<p>(Bei #include machen fwd.-slashes mMn. wirklich Sinn, vor allem wenn der Code plattformunabhängig oder zumindest leicht portierbar ist.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247427</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247427</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 31 Aug 2012 16:05:18 GMT</pubDate></item><item><title><![CDATA[Reply to Datei zeileneise auslesen on Fri, 31 Aug 2012 16:05:06 GMT]]></title><description><![CDATA[<p>mo9ua schrieb:</p>
<blockquote>
<p>Dazu sollte man vllt anmerken, dass die Logs sehr groß werden können und ich vermute, dass es vllt Speichermäßig nicht ausreicht.</p>
</blockquote>
<p>Das sollte egal sein, da du die Datei ja zeilenweise einliest.</p>
<blockquote>
<p>Kann mir da jmd auf die Sprünge helfen, ob ich in dem Code was vergessen habe oder Ansatz mit ifstream nicht der Richtige ist und es besser Alternativen für dieses Problem gibt?</p>
</blockquote>
<p>Probier es mal mit std::string wie im Beispiel von Kellerautomat.</p>
<blockquote>
<p>So nebenbei gefragt (für meine nächste Ausbaustufe schon mal): Wenn ich in Dateien nach Zeilen suche, die einem bestimmten Muster entsprechen, soll ich da regex nehmen oder gibt es was simpleres? Am besten std-Bib? Oder was würdet ihr mir da empfehlen?</p>
</blockquote>
<p>Das kommt wirklich auf das Muster drauf an, und darauf was du unter &quot;was simpleres&quot; verstehst. Viel einfacher zu programmieren als mit Regexen wird es wohl in den wenigsten Fällen. Einfacher für die CPU (=weniger Rechenzeit) kann dagegen leicht sein -- manche Muster lassen sich mit Regexen nicht wirklich performant suchen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247428</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247428</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 31 Aug 2012 16:05:06 GMT</pubDate></item><item><title><![CDATA[Reply to Datei zeileneise auslesen on Fri, 31 Aug 2012 16:07:46 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Kellerautomat schrieb:</p>
<blockquote>
<pre><code class="language-cpp">ifstream is(&quot;D:/Logs/log.txt&quot;); // Wir nehmen immer Slashes.
</code></pre>
</blockquote>
<p>Wozu? Pfade sind sowieso plattformabhängig.</p>
</blockquote>
<p>backslashes sind fehle\ra\nfällig</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247430</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247430</guid><dc:creator><![CDATA[rückhieb]]></dc:creator><pubDate>Fri, 31 Aug 2012 16:07:46 GMT</pubDate></item><item><title><![CDATA[Reply to Datei zeileneise auslesen on Fri, 31 Aug 2012 16:18:59 GMT]]></title><description><![CDATA[<p>rückhieb schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Kellerautomat schrieb:</p>
<blockquote>
<pre><code class="language-cpp">ifstream is(&quot;D:/Logs/log.txt&quot;); // Wir nehmen immer Slashes.
</code></pre>
</blockquote>
<p>Wozu? Pfade sind sowieso plattformabhängig.</p>
</blockquote>
<p>backslashes sind fehle\ra\nfällig</p>
</blockquote>
<p>Was hat das damit zu tun?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247434</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247434</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Fri, 31 Aug 2012 16:18:59 GMT</pubDate></item><item><title><![CDATA[Reply to Datei zeileneise auslesen on Fri, 31 Aug 2012 16:34:13 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>rückhieb schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Kellerautomat schrieb:</p>
<blockquote>
<pre><code class="language-cpp">ifstream is(&quot;D:/Logs/log.txt&quot;); // Wir nehmen immer Slashes.
</code></pre>
</blockquote>
<p>Wozu? Pfade sind sowieso plattformabhängig.</p>
</blockquote>
<p>backslashes sind fehle\ra\nfällig</p>
</blockquote>
<p>Was hat das damit zu tun?</p>
</blockquote>
<p>Die Nötigkeit Backlashes zu escapen macht sie unnötig fehleranfälliger in der Anwendung als Slashes.</p>
<p>// edit: Deutsches Sprache...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247436</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247436</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Fri, 31 Aug 2012 16:34:13 GMT</pubDate></item><item><title><![CDATA[Reply to Datei zeileneise auslesen on Fri, 31 Aug 2012 16:59:03 GMT]]></title><description><![CDATA[<p>Swordfish schrieb:</p>
<blockquote>
<p>Sone schrieb:</p>
<blockquote>
<p>rückhieb schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Kellerautomat schrieb:</p>
<blockquote>
<pre><code class="language-cpp">ifstream is(&quot;D:/Logs/log.txt&quot;); // Wir nehmen immer Slashes.
</code></pre>
</blockquote>
<p>Wozu? Pfade sind sowieso plattformabhängig.</p>
</blockquote>
<p>backslashes sind fehle\ra\nfällig</p>
</blockquote>
<p>Was hat das damit zu tun?</p>
</blockquote>
<p>Die Nötigkeit Backlashes zu escapen macht sie unnötig fehleranfälliger in der Anwendung als Slashes.</p>
<p>// edit: Deutsches Sprache...</p>
</blockquote>
<p>Nein nein nein... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Ich meinte hustbaers Aussage, dass Pfade vom Standard gar nicht berücksichtigt werden.</p>
<p>Das mit Backslashes sollte doch nun wirklich <strong>jeder</strong> kennen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247444</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247444</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Fri, 31 Aug 2012 16:59:03 GMT</pubDate></item><item><title><![CDATA[Reply to Datei zeileneise auslesen on Fri, 31 Aug 2012 17:09:58 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>Swordfish schrieb:</p>
<blockquote>
<p>Sone schrieb:</p>
<blockquote>
<p>rückhieb schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Kellerautomat schrieb:</p>
<blockquote>
<pre><code class="language-cpp">ifstream is(&quot;D:/Logs/log.txt&quot;); // Wir nehmen immer Slashes.
</code></pre>
</blockquote>
<p>Wozu? Pfade sind sowieso plattformabhängig.</p>
</blockquote>
<p>backslashes sind fehle\ra\nfällig</p>
</blockquote>
<p>Was hat das damit zu tun?</p>
</blockquote>
<p>Die Nötigkeit Backlashes zu escapen macht sie unnötig fehleranfälliger in der Anwendung als Slashes.</p>
</blockquote>
<p>Ich meinte hustbaers Aussage, dass Pfade vom Standard gar nicht berücksichtigt werden.</p>
</blockquote>
<p>Bei relativen Pfaden bleibt - wie schon oben angemerkt - der Vorteil, daß den Slash mehr Betriebssysteme verstehen als den Backlash.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247449</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247449</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Fri, 31 Aug 2012 17:09:58 GMT</pubDate></item><item><title><![CDATA[Reply to Datei zeileneise auslesen on Fri, 31 Aug 2012 17:28:38 GMT]]></title><description><![CDATA[<p>Ja und lustig wird es dann wenn der Pfad an irgendeine Komponente (DLL, Commandline-Programm, was auch immer) übergeben wird die dummerweise mit / nix anfangen kann weil sie \ erwartet. Unter Windows sind solche Komponenten nicht gerade selten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247458</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247458</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 31 Aug 2012 17:28:38 GMT</pubDate></item><item><title><![CDATA[Reply to Datei zeileneise auslesen on Fri, 31 Aug 2012 18:14:56 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Ja und lustig wird es dann wenn der Pfad an irgendeine Komponente (DLL, Commandline-Programm, was auch immer) übergeben wird die dummerweise mit / nix anfangen kann weil sie \ erwartet. Unter Windows sind solche Komponenten nicht gerade selten.</p>
</blockquote>
<p>Sollte man nicht immer einfach std::replace drüberlaufen lassen? Wie man auch die Line-Endings immer ersetzt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247468</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247468</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Fri, 31 Aug 2012 18:14:56 GMT</pubDate></item><item><title><![CDATA[Reply to Datei zeileneise auslesen on Fri, 31 Aug 2012 22:48:01 GMT]]></title><description><![CDATA[<p>Was hilft das wenn es die Komponente/das externe Programm nicht tut?<br />
Weiss du, man hat nicht für alles nen Source, Freund Hacker.</p>
<p>Und wenns im eigenen Programm ist... ich kann mir grad nix sinnloseres vorstellen als Pfade in String-Konstanten mit / reinschreiben und dann mittels replace auf \ zu ersetzen. Kannst du?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247530</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247530</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 31 Aug 2012 22:48:01 GMT</pubDate></item><item><title><![CDATA[Reply to Datei zeileneise auslesen on Fri, 31 Aug 2012 23:35:48 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>[...] lustig wird es dann wenn der Pfad an irgendeine Komponente [...] übergeben wird die dummerweise mit / nix anfangen kann weil sie \ erwartet. [...]</p>
</blockquote>
<p>Jo, donn is' oha ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247535</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247535</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Fri, 31 Aug 2012 23:35:48 GMT</pubDate></item><item><title><![CDATA[Reply to Datei zeileneise auslesen on Sat, 01 Sep 2012 07:04:24 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Was hilft das wenn es die Komponente/das externe Programm nicht tut?<br />
Weiss du, man hat nicht für alles nen Source, Freund Hacker.</p>
<p>Und wenns im eigenen Programm ist... ich kann mir grad nix sinnloseres vorstellen als Pfade in String-Konstanten mit / reinschreiben und dann mittels replace auf \ zu ersetzen. Kannst du?</p>
</blockquote>
<p>Nö. Das ist ehrlich gesagt doof, wenn diese &quot;Komponente&quot; von solchen Kleinigkeiten abhängig ist... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247561</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247561</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sat, 01 Sep 2012 07:04:24 GMT</pubDate></item><item><title><![CDATA[Reply to Datei zeileneise auslesen on Sat, 01 Sep 2012 19:07:36 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Was hilft das wenn es die Komponente/das externe Programm nicht tut?<br />
Weiss du, man hat nicht für alles nen Source, Freund Hacker.</p>
<p>Und wenns im eigenen Programm ist... ich kann mir grad nix sinnloseres vorstellen als Pfade in String-Konstanten mit / reinschreiben und dann mittels replace auf \ zu ersetzen. Kannst du?</p>
</blockquote>
<p>Nö. Das ist ehrlich gesagt doof, wenn diese &quot;Komponente&quot; von solchen Kleinigkeiten abhängig ist... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
</blockquote>
<p>Und die Realität zu verleugnen ist schlau?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247727</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247727</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 01 Sep 2012 19:07:36 GMT</pubDate></item><item><title><![CDATA[Reply to Datei zeileneise auslesen on Mon, 03 Sep 2012 08:09:49 GMT]]></title><description><![CDATA[<p>Also erstmal danke für die ganzen Antworten <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 />
Das mit den Backslashes hab ich mir jetzt hinter die Ohren geschrieben, dass ich die nicht in diesem Kontext benutzen soll.<br />
Die Logdatei kann, wie erwähnt, groß sein =&gt; &gt;256 kb.<br />
Die Zeile, nach der ich suche schaut ca. so aus:</p>
<pre><code>2012/07/03 02:17:25.267 INFO  Unwichter Text: { XXXX XXXX XXXX XXXX XXXX XXXX }
</code></pre>
<p>Ich muss nun auf die Elemente in der geschweiften Klammer zugreifen können bzw. sie zählen in der gesamten Datei.</p>
<p>Ergo meine Idee war, dass ich die Log zeilenweise durchgehe und immer wenn ich so eine Zeile finde, dann die Elemente in einen Hash einfüge. Wobei die Elemente (XXXX) wären die Schlüssel des Hashs und die Anzahl der Vorkommen des jeweiligen Elements ist dann der Wert des Hashs (Wert -&gt; Anzahl).<br />
Ich glaube, statt Hash nimmt man bei C++ map oder sowas.</p>
<p><strong>Nachtrag:</strong> Ob die Zeile größer oder kleiner 256 ist dürfte ja eigentliche egal sein. Das schlimmste was dann passieren mmüsste, ist dass eine Zeile nicht richtig dargestellt wird, sonst nicht. Das Problem ist aber, dass nicht alle zeilen eingelesen werden aus irgend einem Grund.</p>
<p><strong>Nachtrag2:</strong> Hab die char-Variable &quot;line&quot; auf 1024 vergrößert, jetzt gehts. Jetzt bleibt nur noch die Frage nach dem suchen der richtigen Zeilen und dem extrahieren der richtigen Zeilen daraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2248017</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2248017</guid><dc:creator><![CDATA[mo9ua]]></dc:creator><pubDate>Mon, 03 Sep 2012 08:09:49 GMT</pubDate></item><item><title><![CDATA[Reply to Datei zeileneise auslesen on Mon, 03 Sep 2012 08:55:50 GMT]]></title><description><![CDATA[<p>mo9ua schrieb:</p>
<blockquote>
<p><strong>Nachtrag:</strong> [...]<br />
<strong>Nachtrag2:</strong> [...]</p>
</blockquote>
<p>Kellerautomat schrieb:</p>
<blockquote>
<p>[...] Wie auch immer, warum nicht ein std::string?</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2248042</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2248042</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Mon, 03 Sep 2012 08:55:50 GMT</pubDate></item><item><title><![CDATA[Reply to Datei zeileneise auslesen on Tue, 04 Sep 2012 06:50:08 GMT]]></title><description><![CDATA[<p>mo9ua schrieb:</p>
<blockquote>
<p>Die Logdatei kann, wie erwähnt, groß sein =&gt; &gt;256 kb.<br />
Die Zeile, nach der ich suche schaut ca. so aus:</p>
<pre><code>2012/07/03 02:17:25.267 INFO  Unwichter Text: { XXXX XXXX XXXX XXXX XXXX XXXX }
</code></pre>
<p>Ich muss nun auf die Elemente in der geschweiften Klammer zugreifen können bzw. sie zählen in der gesamten Datei.</p>
<p>Ergo meine Idee war, dass ich die Log zeilenweise durchgehe und immer wenn ich so eine Zeile finde, dann die Elemente in einen Hash einfüge. Wobei die Elemente (XXXX) wären die Schlüssel des Hashs und die Anzahl der Vorkommen des jeweiligen Elements ist dann der Wert des Hashs (Wert -&gt; Anzahl).<br />
Ich glaube, statt Hash nimmt man bei C++ map oder sowas.</p>
</blockquote>
<p>Hallo mo9ua,</p>
<p>ja - hier wäre eine std::map angebracht.<br />
Du solltest uns noch sagen, inwiefern sich so eine Zeile mit den Schlüsseln von allen anderen Zeilen unterscheidet. Ist z.B. das Vorkommen von '{' bereits exklusiv?<br />
Dann ist es einfach. Man lese alles bis man auf ein '{' trifft und anschließend lese man die Worte bis ein '}' auftaucht.<br />
Oder ist das Wort 'INFO' das, was den entscheidenden Unterschied zu den anderen Zeilen ausmacht?</p>
<p>Anbei eine Code-Skizze für den Fall mit exklusivem '{':</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
#include &lt;map&gt;
#include &lt;limits&gt; // std::numeric_limits&lt;&gt;

int main()
{
    using namespace std;
    map&lt; string, int &gt; keys;
    {
        ifstream logdatei(&quot;D:/Logs/log.txt&quot;);
        if( !logdatei.is_open() )
        {
            cerr &lt;&lt; &quot;Fehler beim Oeffnen der Datei&quot; &lt;&lt; endl;
            return 0;
        }
        for( ; logdatei.ignore( numeric_limits&lt; streamsize &gt;::max(), '{' ); )
        {
            for( string token; logdatei &gt;&gt; token &amp;&amp; token != &quot;}&quot;; )
                ++keys[token] ;
        }
    }
    cout &lt;&lt; &quot;Haeufigkeit der Schluessel:&quot; &lt;&lt; endl;
    for( map&lt; string, int &gt;::iterator i = keys.begin(); i != keys.end(); ++i )
        cout &lt;&lt; i-&gt;first &lt;&lt; &quot;: &quot; &lt;&lt; i-&gt;second &lt;&lt; endl;
    return 0;
}
</code></pre>
<p>Dabei ist wichtig, dass zwischen dem letzten Schlüssel einer Zeile und dem '}' noch mindestens ein Leerzeichen(oder Tab) stehen muss, sonst wird das Ende nicht erkannt!</p>
<p>Gruß<br />
Werner</p>
<p>@Edit: Tippfehler beseitigt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2248197</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2248197</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Tue, 04 Sep 2012 06:50:08 GMT</pubDate></item></channel></rss>