<?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[Parser für Textdateien]]></title><description><![CDATA[<p>Hallo Allersetis!</p>
<p>Vor kurzem habe ich eine CD mit einigen alten MS-DOS Spielen, Programmen etc. gefunden,<br />
aber leider ist so gut wie Nichts davon mehr brauchbar, da auf der CD keine Images von<br />
den Disketten sind, sondern sich die gesamten Dateien &quot;lose&quot; in Ordnern befinden.<br />
Bei fast allen Proggrammen sind inf-Dateien dabei, womit man die einzelnen Dateien<br />
den Disketten zuordnen könnte, jedoch würde das eine ganze Weile dauern und ist auch nicht<br />
allzu effektiv. Ich habe bereits nach einen Programm gesucht welches mir diese Arbeit<br />
abnehmen könnte, aber leider ohne Erfolg.</p>
<p>Deshalb würde ich gerne ein Programm schreiben, welches die inf-Dateien einliest und dann<br />
&quot;sortiert&quot;. Da in diesen Dateien noch etlicher anderer Kram steht und sie ziemlich lang sind,<br />
soll das Programm nach X:YYYYY.ZZZ suchen (X ist das Diskettenlaufwerk, YYYYY der Dateiname<br />
und ZZZ die Dateiendung) und alle Ergebnisse in einer Datei speichern.</p>
<p>Ein kurzes Beispiel:</p>
<p>So sieht die zu durchsuchende inf-Datei aus:</p>
<pre><code>[win.readme]
   4:leiame.wri,   &quot;Leiame Geral&quot;           , 104064, readme
   4:redes.wri, &quot;Leiame Redes&quot;          ,  65920
   1:winini.txt,   &quot;Leiame Win.ini&quot;           ,  32384
   2:sysini.wri,   &quot;Leiame System.ini&quot;        ,  57600
   4:impress.exe, &quot;Leiame Impress&quot;          ,  44544
   diskspace=304512

; The [*.groups] sections maps a group section to the group name used in
; Program Manager.
</code></pre>
<p>Und das soll letztendlich in der Textdatei stehen:</p>
<pre><code>4:leiame.wri
4:redes.wri
2:winini.txt
2:sysini.wri
4:impress.exe
</code></pre>
<p>Es wäre schön, wenn mir jemand sagen könnte wie ich das machen kann, ist schon eine Weile her,<br />
dass ich das letzte mal in C++ gecodet habe.</p>
<p>Vielen Dank im Voraus!</p>
<p>- Daniel</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/239685/parser-für-textdateien</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 08:00:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/239685.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 26 Apr 2009 17:23:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Parser für Textdateien on Sun, 26 Apr 2009 17:23:57 GMT]]></title><description><![CDATA[<p>Hallo Allersetis!</p>
<p>Vor kurzem habe ich eine CD mit einigen alten MS-DOS Spielen, Programmen etc. gefunden,<br />
aber leider ist so gut wie Nichts davon mehr brauchbar, da auf der CD keine Images von<br />
den Disketten sind, sondern sich die gesamten Dateien &quot;lose&quot; in Ordnern befinden.<br />
Bei fast allen Proggrammen sind inf-Dateien dabei, womit man die einzelnen Dateien<br />
den Disketten zuordnen könnte, jedoch würde das eine ganze Weile dauern und ist auch nicht<br />
allzu effektiv. Ich habe bereits nach einen Programm gesucht welches mir diese Arbeit<br />
abnehmen könnte, aber leider ohne Erfolg.</p>
<p>Deshalb würde ich gerne ein Programm schreiben, welches die inf-Dateien einliest und dann<br />
&quot;sortiert&quot;. Da in diesen Dateien noch etlicher anderer Kram steht und sie ziemlich lang sind,<br />
soll das Programm nach X:YYYYY.ZZZ suchen (X ist das Diskettenlaufwerk, YYYYY der Dateiname<br />
und ZZZ die Dateiendung) und alle Ergebnisse in einer Datei speichern.</p>
<p>Ein kurzes Beispiel:</p>
<p>So sieht die zu durchsuchende inf-Datei aus:</p>
<pre><code>[win.readme]
   4:leiame.wri,   &quot;Leiame Geral&quot;           , 104064, readme
   4:redes.wri, &quot;Leiame Redes&quot;          ,  65920
   1:winini.txt,   &quot;Leiame Win.ini&quot;           ,  32384
   2:sysini.wri,   &quot;Leiame System.ini&quot;        ,  57600
   4:impress.exe, &quot;Leiame Impress&quot;          ,  44544
   diskspace=304512

; The [*.groups] sections maps a group section to the group name used in
; Program Manager.
</code></pre>
<p>Und das soll letztendlich in der Textdatei stehen:</p>
<pre><code>4:leiame.wri
4:redes.wri
2:winini.txt
2:sysini.wri
4:impress.exe
</code></pre>
<p>Es wäre schön, wenn mir jemand sagen könnte wie ich das machen kann, ist schon eine Weile her,<br />
dass ich das letzte mal in C++ gecodet habe.</p>
<p>Vielen Dank im Voraus!</p>
<p>- Daniel</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1701604</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1701604</guid><dc:creator><![CDATA[Daniel89]]></dc:creator><pubDate>Sun, 26 Apr 2009 17:23:57 GMT</pubDate></item><item><title><![CDATA[Reply to Parser für Textdateien on Sun, 26 Apr 2009 17:43:59 GMT]]></title><description><![CDATA[<p>Da schnappst du dir am besten etwas, mit dem du durch das Filesystem kommst. z.B<a href="http://www.boost.org/doc/libs/1_37_0/libs/filesystem/doc/index.htm" rel="nofollow"> <code>boost::filesystem</code> </a>und gehst alle Dateien durch und liest das ein.<br />
Um den gewünschten Wert zu finden, empfiehlt es sich regular expressions zu nutzen, wie z.B<a href="http://www.boost.org/doc/libs/1_37_0/libs/regex/doc/html/index.html" rel="nofollow"> <code>boost::regex</code> </a>.</p>
<p>Und dann kannst du das ganze einfach speichern und am Ende in eine gewünschte Datei ausgeben. So einfach ist das.</p>
<p>btw:<br />
Für solche banalen Aufgaben würde ich aber eher eine dynamische Skriptsprache empfehlen, wie z.b Python, die das übernimmt, da das unter umständen einfacher zu lösen ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1701614</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1701614</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 26 Apr 2009 17:43:59 GMT</pubDate></item><item><title><![CDATA[Reply to Parser für Textdateien on Sun, 26 Apr 2009 21:43:44 GMT]]></title><description><![CDATA[<p>Danke für den Tipp, klappt wunderbar <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>Aber jetzt stehe ich vor einem weiterem Problem: ich habe die Dateinamen in einer seperaten Datei<br />
gespeichert, aber leider sind viele Dateien doppelt aufgelistet, da sie in der ursprünglichen Datei<br />
auch mehrmals vorkommen. Wie kann ich die Duplikate in der neuen Textdatei finden und löschen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1701731</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1701731</guid><dc:creator><![CDATA[Daniel89]]></dc:creator><pubDate>Sun, 26 Apr 2009 21:43:44 GMT</pubDate></item><item><title><![CDATA[Reply to Parser für Textdateien on Mon, 27 Apr 2009 06:10:09 GMT]]></title><description><![CDATA[<p>Wiederum auslesen, am besten in einem std::vector<a href="std::string" rel="nofollow">std::string</a> speichern. Nach doppelten Werten suchen, diese aus dem vector rauslöschen und dann wieder in die Datei zurückschreiben. Hier sind beispiele für <a href="http://www.cplusplus.com/reference/stl/vector/vector/" rel="nofollow">std::vector&lt;T&gt;</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1701781</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1701781</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Mon, 27 Apr 2009 06:10:09 GMT</pubDate></item><item><title><![CDATA[Reply to Parser für Textdateien on Mon, 27 Apr 2009 06:40:57 GMT]]></title><description><![CDATA[<p>So z. B.:</p>
<pre><code class="language-cpp">fstream                  FileList (&quot;MyList.ini&quot;, fstream::in | fstream::out);
vector &lt;string&gt;          TempOldFileContents;
vector &lt;string&gt;          TempNewFileContents;
string                   TempLine;
vector&lt;string&gt;::iterator Loop_0      = 0;
vector&lt;string&gt;::iterator Loop_1;
vector&lt;string&gt;::iterator Loop_2      = 0;
bool                     Contains;

while ( ! FileList.eof() )
{
    getline (FileList, TempLine);
    TempOldFileContents.insert (iLoop++, TempLine);
}

for ( Loop_0 = TempOldFileContents.begin () ; 
      Loop_0 = TempOldFileContents.end    (); Loop_0++ )
{
    Loop_1 = Loop_0;
    Loop_1++;
    Contains = false;
    while ((Loop_1 &lt; TempOldFileContents.end) &amp;&amp; (Contains == false))
    {
        if (TempOldFileContents [Loop_0] == TempOldFileContents [Loop_1])
            Contains = true;
        else
            Loop_1++;
    }
    if (Contains == false)
        TempNewFileContents.insert (Loop_2++, TempOldFileContents [Loop_0]);
}

FileList.close ();
FileList.open (&quot;MyList.ini&quot;, fstream::trunc);

for ( Loop_0 = TempNewFileContents.begin () ; 
      Loop_0 = TempNewFileContents.end    (); Loop_0++ )
    FileList &lt;&lt; TempNewFileContents [Loop_0]

FileList.close ();
</code></pre>
<p>In Realita wuerde ich noch ein paar Check-Ups dazwischen legen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1701792</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1701792</guid><dc:creator><![CDATA[hartmut1164]]></dc:creator><pubDate>Mon, 27 Apr 2009 06:40:57 GMT</pubDate></item><item><title><![CDATA[Reply to Parser für Textdateien on Mon, 27 Apr 2009 06:58:03 GMT]]></title><description><![CDATA[<p>hartmut1164 schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>Oder einfach <code>std::unique_copy</code> benutzen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1701801</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1701801</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Mon, 27 Apr 2009 06:58:03 GMT</pubDate></item><item><title><![CDATA[Reply to Parser für Textdateien on Mon, 27 Apr 2009 06:58:44 GMT]]></title><description><![CDATA[<p>Firefighter schrieb:</p>
<blockquote>
<p>Wiederum auslesen, am besten in einem std::vector<a href="std::string" rel="nofollow">std::string</a> speichern. Nach doppelten Werten suchen, diese aus dem vector rauslöschen und dann wieder in die Datei zurückschreiben. Hier sind beispiele für <a href="http://www.cplusplus.com/reference/stl/vector/vector/" rel="nofollow">std::vector&lt;T&gt;</a></p>
</blockquote>
<p>Oder einfach in ein std::set stopfen, da fallen Duplikate dann automatisch raus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1701802</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1701802</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 27 Apr 2009 06:58:44 GMT</pubDate></item><item><title><![CDATA[Reply to Parser für Textdateien on Mon, 27 Apr 2009 06:59:51 GMT]]></title><description><![CDATA[<p>Stimmt, der filtert die Duplikate automatisch raus, danke pumuckl.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1701803</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1701803</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Mon, 27 Apr 2009 06:59:51 GMT</pubDate></item><item><title><![CDATA[Reply to Parser für Textdateien on Mon, 27 Apr 2009 07:40:44 GMT]]></title><description><![CDATA[<p>boost::spirit?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1701814</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1701814</guid><dc:creator><![CDATA[Basingstoke]]></dc:creator><pubDate>Mon, 27 Apr 2009 07:40:44 GMT</pubDate></item><item><title><![CDATA[Reply to Parser für Textdateien on Mon, 27 Apr 2009 14:27:48 GMT]]></title><description><![CDATA[<p>Vielen Dank für die Antworten, habe alles mal ausprobiert, doch dann bin ich auf eine ganz<br />
einfache Lösung gekommen: Die Dateinamen in der Liste alphabetisch sortieren, und dann<br />
prüfen, ob &quot;zeile-1 = zeile&quot; ist, wenn nicht, die jeweilige Zeile in eine Datei schreiben. Ist zwar<br />
nicht so elegant wie die hier genannten Lösungen, jedoch sehr einfach machbar (für einen<br />
N00b wie mich) und effektiv.</p>
<p>Nun stehe ich jedoch vor einem weiteren Problem. Das Programm liefert mir eine Liste mit<br />
Dateinamen und befindet sich in dem Ordner, in dem auch die auf der Liste befindlichen<br />
Dateien sind. Jeder Dateiname auf der Liste hat eine Nummer (1-5) gefolgt von einem<br />
Doppelpunkt am Anfang.</p>
<p>Ist es möglich, Ordner mit den Nummern (1-5) zu erstellen und die jeweiligen Dateien<br />
in diese zu Verschieben?</p>
<p>Berspiel:</p>
<p>Die Generierte Datei:</p>
<pre><code>1:setup.hlp
1:setup.txt
2:keyboard.drv
3:olibw.drv
4:SOL.HLP
4:SQUARES.BMP
4:SSSTARS.SCR
5:HIMEM.SYS
5:ROMAN.FON
</code></pre>
<p>Dateien sollen verschoben werden nach:</p>
<p>setup.hlp ----&gt; Ordner &quot;1&quot;<br />
setup.txt ----&gt; Ordner &quot;1&quot;<br />
keyboard.drv ----&gt; Ordner &quot;2&quot;<br />
olibw.drv ----&gt; Ordner &quot;3&quot;<br />
SOL.HLP ----&gt; Ordner &quot;4&quot;<br />
SQUARES.BMP ----&gt; Ordner &quot;4&quot;<br />
SSSTARS.SCR ----&gt; Ordner &quot;4&quot;<br />
HIMEM.SYS ----&gt; Ordner &quot;5&quot;<br />
ROMAN.FON ----&gt; Ordner &quot;5&quot;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1702032</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1702032</guid><dc:creator><![CDATA[Daniel89]]></dc:creator><pubDate>Mon, 27 Apr 2009 14:27:48 GMT</pubDate></item><item><title><![CDATA[Reply to Parser für Textdateien on Mon, 27 Apr 2009 15:11:18 GMT]]></title><description><![CDATA[<p>Daniel89 schrieb:</p>
<blockquote>
<p>Ist zwar nicht so elegant wie die hier genannten Lösungen, jedoch sehr einfach machbar (für einen<br />
N00b wie mich) und effektiv.</p>
</blockquote>
<p>Die vorgeschlagenen Lösungen mit std::set oder std::unique_copy sind genauso einfach, wenn der NOOb sich ne halbe Stunde Zeit nimmt und sich etwas Doku dazu durchliest (die er früher oder später eh lesen muss), und mindestens genauso effektiv.</p>
<p>Daniel89 schrieb:</p>
<blockquote>
<p>Ist es möglich, Ordner mit den Nummern (1-5) zu erstellen und die jeweiligen Dateien in diese zu Verschieben?</p>
</blockquote>
<p>Ja, ist möglich.</p>
<p>Achso, du willst wissen wie? (War zwar nicht die Frage, aber wir sind mal nicht so...)</p>
<pre><code>mkdir 1; mv setup.hlp 1; mv setup.txt 1;
</code></pre>
<p>Achsoo, du willst wissen wie das mit C++ geht? (War zwar erst recht nicht die Frage, aber naja, vielleicht stellst du die nächste Frage etwas genauer ;))<br />
Da gibts verschiedene Möglichkeiten. Unter Windows hat die WinAPI Funktionen für Verzeichnis- und Dateimanipulationen. Die Boost-Bibliotheken enthalten boost::filesystem wo solche operationen plattformunabhängig angeboten werden. Das WinAPI-Forum bzw. ein google nach boost::filesystem kann dir da genaueres sagen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1702078</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1702078</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 27 Apr 2009 15:11:18 GMT</pubDate></item><item><title><![CDATA[Reply to Parser für Textdateien on Mon, 27 Apr 2009 20:40:28 GMT]]></title><description><![CDATA[<p>Danke für all die Antworten &amp; Tipps, das Programm funktioniert nun so wie gewünscht <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1702301</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1702301</guid><dc:creator><![CDATA[Daniel89]]></dc:creator><pubDate>Mon, 27 Apr 2009 20:40:28 GMT</pubDate></item></channel></rss>