<?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[Daten elegant auslesen]]></title><description><![CDATA[<p>Aktuell schreibe ich ein Programm, dass bestimmte Daten aus einer Datei auslesen soll. Das Auslesen ist kein Problem und zum aktuellen Zeitpunkt habe ich die ausgelesenen Daten alle in einem std::string.</p>
<p>Nun müssen die Informationen ausgelesen werden. Dabei ist angegeben, nach wieviel Bytes die nächste Information kommt bzw. wie lang die Information maximal sein darf.</p>
<p>Momentan schaut der (relevante) Code so aus:</p>
<pre><code>std::vector&lt;char&gt; buffer(extended_header::total_size + standard_header::total_size);

s.read(&amp;buffer[0], buffer.size());

std::string data(buffer.begin(), buffer.end());

if (data.compare(extended_header::total_size, 3, &quot;TAG&quot;) == 0)
{
	int offset = extended_header::total_size + standard_header::header;

	info.title  = data.substr(offset, standard_header::title);
	offset += standard_header::title;
	info.artist = data.substr(offset, standard_header::artist);
	offset += standard_header::artist;
	info.album = data.substr(offset, standard_header::album);
	offset += standard_header::album;
	info.year = data.substr(offset, standard_header::year);
	offset += standard_header::year;
}
</code></pre>
<p>Weiß jmd. eine bessere Methode (z.B. Operatorenüberladung?) um die Daten so zu lesen? Das momentan nach jedem Schritt das Offset neu berechnet werden muss stört mich.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/314334/daten-elegant-auslesen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 01 Aug 2026 09:48:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/314334.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 27 Feb 2013 14:07:32 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Daten elegant auslesen on Wed, 27 Feb 2013 14:07:32 GMT]]></title><description><![CDATA[<p>Aktuell schreibe ich ein Programm, dass bestimmte Daten aus einer Datei auslesen soll. Das Auslesen ist kein Problem und zum aktuellen Zeitpunkt habe ich die ausgelesenen Daten alle in einem std::string.</p>
<p>Nun müssen die Informationen ausgelesen werden. Dabei ist angegeben, nach wieviel Bytes die nächste Information kommt bzw. wie lang die Information maximal sein darf.</p>
<p>Momentan schaut der (relevante) Code so aus:</p>
<pre><code>std::vector&lt;char&gt; buffer(extended_header::total_size + standard_header::total_size);

s.read(&amp;buffer[0], buffer.size());

std::string data(buffer.begin(), buffer.end());

if (data.compare(extended_header::total_size, 3, &quot;TAG&quot;) == 0)
{
	int offset = extended_header::total_size + standard_header::header;

	info.title  = data.substr(offset, standard_header::title);
	offset += standard_header::title;
	info.artist = data.substr(offset, standard_header::artist);
	offset += standard_header::artist;
	info.album = data.substr(offset, standard_header::album);
	offset += standard_header::album;
	info.year = data.substr(offset, standard_header::year);
	offset += standard_header::year;
}
</code></pre>
<p>Weiß jmd. eine bessere Methode (z.B. Operatorenüberladung?) um die Daten so zu lesen? Das momentan nach jedem Schritt das Offset neu berechnet werden muss stört mich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2302573</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2302573</guid><dc:creator><![CDATA[formatierun]]></dc:creator><pubDate>Wed, 27 Feb 2013 14:07:32 GMT</pubDate></item><item><title><![CDATA[Reply to Daten elegant auslesen on Wed, 27 Feb 2013 14:21:34 GMT]]></title><description><![CDATA[<p>wenn Du von 'Lesen' sprichst, neudeutsch: Input, so bieten sich die Möglichkeiten der Input/Output-Library an. Dann hast Du auch keine nervige offset-Variable mehr.<br />
Wie sieht denn das Datei-Format aus? Poste doch mal ein paar Zeilen aus der Datei.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2302577</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2302577</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Wed, 27 Feb 2013 14:21:34 GMT</pubDate></item><item><title><![CDATA[Reply to Daten elegant auslesen on Wed, 27 Feb 2013 14:45:13 GMT]]></title><description><![CDATA[<p>Eine lokale Funktion ist eine von vielen Möglichkeiten:</p>
<pre><code>auto read_fixed_string=[&amp;](size_t length) -&gt; std::string
    {
        auto str = data.substr(offset, length);
        offset += length;
        return str;
    };

    info.title = read_fixed_string(standard_header::title);
    info.artist = read_fixed_string(standard_header::artist);
    info.album = read_fixed_string(standard_header::album);
    info.year = read_fixed_string(standard_header::year);
</code></pre>
<p>Und da <code>standard_header::title</code> usw. ja offenbar Längenangaben sind, sollte das auch der Name wiederspiegeln.<br />
Wenn ich das so lese, wundere ich mich erst einmal, warum die komische Funktion einen Titel bekommt und auch wieder einen zurückgibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2302583</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2302583</guid><dc:creator><![CDATA[Athar]]></dc:creator><pubDate>Wed, 27 Feb 2013 14:45:13 GMT</pubDate></item><item><title><![CDATA[Reply to Daten elegant auslesen on Wed, 27 Feb 2013 14:42:32 GMT]]></title><description><![CDATA[<p>Es handelt sich konkret um ID3-Tags, in der Version 1 sind die Daten (Albumname, Künstler etc.) am Ende der .mp3-Datei gespeichert. Man lies also bis zum Ende der Datei, geht eine entsprechende Anzahl Bytes zurück (z.B. 128) und ließt dann diese wobei die ersten 30 Bytes der Albumname sind usw.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2302585</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2302585</guid><dc:creator><![CDATA[formatierun]]></dc:creator><pubDate>Wed, 27 Feb 2013 14:42:32 GMT</pubDate></item><item><title><![CDATA[Reply to Daten elegant auslesen on Wed, 27 Feb 2013 16:02:36 GMT]]></title><description><![CDATA[<p>Das betrifft also das Auslesen einer Binärdatei, in der auch Texte stehen können.</p>
<p>Wenn Du's 'elegant' haben möchtest, so würde ich Dir so etwas empfehlen, was ich <a href="http://www.c-plusplus.net/forum/p2279597#2279597" rel="nofollow">schon mal dazu</a> geschrieben habe. Ist aber einiges an Arbeit, aber Du hast dann ein Werkzeug wo auch die komplizierten Formate von ID3.v2 und jünger zu meistern wären.</p>
<p>Wenn Du es einfach haben willst, so mache das, was Athar vorgeschlagen hat.</p>
<p>Noch eine Detailfrage: mit was für Zeichen sind die Strings hinten aufgefüllt? es ist ja nicht jeder Name genau 30 Zeichen lang.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2302614</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2302614</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Wed, 27 Feb 2013 16:02:36 GMT</pubDate></item></channel></rss>