<?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[Dateinamen auf ein Format prüfen und dann splitten]]></title><description><![CDATA[<p>Hallo,<br />
ich will Dateinamen auf ein Format prüfen und sie dann in Substrings zerlegen. Das gültige Format schaut wie folgt aus: <code>&lt;Überschrift&gt;&lt;ein Leerzeichen&gt;&lt;Bindestrich&gt;&lt;ein Leerzeichen&gt;&lt;Unterüberschrift&gt;&lt;Punkt&gt;&lt;Dateityp&gt;</code> .</p>
<p>Fehler im Format können ausschließlich Leerzeichen an bestimmten Stellen verursachen:<br />
-Wenn der Dateiname mit Leerzeichen beginnt.<br />
-Wenn vor oder nach dem Bindestrich kein oder mehr als ein Leerzeichen vorhanden ist.<br />
-Wenn sich vor dem Punkt Leerzeichen befinden.</p>
<p>Meine Funktion zur Prüfung des Formats sieht wie folgt aus:</p>
<pre><code class="language-cpp">bool is_valid_format(std::wstring&amp; str)
{
	bool valid = true;
	wchar_t blank = L' ';

	if( str[0]==blank )
	{
		std::cout &lt;&lt; &quot;invalid format at beginning&quot; &lt;&lt; '\n';
		valid = false;
	}

	unsigned dash = str.find(L'-');
	if( str[dash-1]!=blank || str[dash-2]==blank || str[dash+1]!=blank || str[dash+2]==blank )
	{
		std::cout &lt;&lt; &quot;invalid format at dash&quot; &lt;&lt; '\n';
		valid = false;
	}

	unsigned dot = str.find(L'.');
	if( str[dot-1]==blank )
	{
		std::cout &lt;&lt; &quot;invalid format at dot&quot; &lt;&lt; '\n';
		valid = false;
	}

	return valid;
}
</code></pre>
<p>Ist das Format gültig, will ich aus dem Dateinamen die Überschrift, die Unterüberschrift und den Dateityp extrahieren. Das mache ich so:</p>
<pre><code class="language-cpp">struct filename
{
	std::wstring title;
	std::wstring subtitle;
	std::wstring type;
};

filename split_filename(std::wstring&amp; str)
{
	filename file;
	unsigned dash = str.find(L'-');
	unsigned dot  = str.find(L'.');
	file.title    = str.substr(0,dash-1);
	file.subtitle = str.substr(dash+2,dot-dash-2);
	file.type     = str.substr(dot+1);
	return file;
}
</code></pre>
<p>Und hier noch ein Anwendungsbeispiel:</p>
<pre><code class="language-cpp">int main()
{
	std::wstring str = L&quot;Gebrüder Grimm - Hänsel und Gretel.pdf&quot;;

	if( is_valid_format(str) )
	{
		filename file = split_filename(str);
	}

	return 0;
}
</code></pre>
<p>Nun zu meiner Frage: Ich bin mir nicht sicher, ob meine beiden Funktionen sehr elegant sind, darum wollte ich fragen, wie ihr das machen würdet bzw. ob es einen eleganteren Weg gibt, das zu lösen?</p>
<p>Danke im Voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/301936/dateinamen-auf-ein-format-prüfen-und-dann-splitten</link><generator>RSS for Node</generator><lastBuildDate>Tue, 11 Aug 2026 17:33:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/301936.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 07 Apr 2012 12:24:32 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Dateinamen auf ein Format prüfen und dann splitten on Sat, 07 Apr 2012 13:21:12 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich will Dateinamen auf ein Format prüfen und sie dann in Substrings zerlegen. Das gültige Format schaut wie folgt aus: <code>&lt;Überschrift&gt;&lt;ein Leerzeichen&gt;&lt;Bindestrich&gt;&lt;ein Leerzeichen&gt;&lt;Unterüberschrift&gt;&lt;Punkt&gt;&lt;Dateityp&gt;</code> .</p>
<p>Fehler im Format können ausschließlich Leerzeichen an bestimmten Stellen verursachen:<br />
-Wenn der Dateiname mit Leerzeichen beginnt.<br />
-Wenn vor oder nach dem Bindestrich kein oder mehr als ein Leerzeichen vorhanden ist.<br />
-Wenn sich vor dem Punkt Leerzeichen befinden.</p>
<p>Meine Funktion zur Prüfung des Formats sieht wie folgt aus:</p>
<pre><code class="language-cpp">bool is_valid_format(std::wstring&amp; str)
{
	bool valid = true;
	wchar_t blank = L' ';

	if( str[0]==blank )
	{
		std::cout &lt;&lt; &quot;invalid format at beginning&quot; &lt;&lt; '\n';
		valid = false;
	}

	unsigned dash = str.find(L'-');
	if( str[dash-1]!=blank || str[dash-2]==blank || str[dash+1]!=blank || str[dash+2]==blank )
	{
		std::cout &lt;&lt; &quot;invalid format at dash&quot; &lt;&lt; '\n';
		valid = false;
	}

	unsigned dot = str.find(L'.');
	if( str[dot-1]==blank )
	{
		std::cout &lt;&lt; &quot;invalid format at dot&quot; &lt;&lt; '\n';
		valid = false;
	}

	return valid;
}
</code></pre>
<p>Ist das Format gültig, will ich aus dem Dateinamen die Überschrift, die Unterüberschrift und den Dateityp extrahieren. Das mache ich so:</p>
<pre><code class="language-cpp">struct filename
{
	std::wstring title;
	std::wstring subtitle;
	std::wstring type;
};

filename split_filename(std::wstring&amp; str)
{
	filename file;
	unsigned dash = str.find(L'-');
	unsigned dot  = str.find(L'.');
	file.title    = str.substr(0,dash-1);
	file.subtitle = str.substr(dash+2,dot-dash-2);
	file.type     = str.substr(dot+1);
	return file;
}
</code></pre>
<p>Und hier noch ein Anwendungsbeispiel:</p>
<pre><code class="language-cpp">int main()
{
	std::wstring str = L&quot;Gebrüder Grimm - Hänsel und Gretel.pdf&quot;;

	if( is_valid_format(str) )
	{
		filename file = split_filename(str);
	}

	return 0;
}
</code></pre>
<p>Nun zu meiner Frage: Ich bin mir nicht sicher, ob meine beiden Funktionen sehr elegant sind, darum wollte ich fragen, wie ihr das machen würdet bzw. ob es einen eleganteren Weg gibt, das zu lösen?</p>
<p>Danke im Voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199588</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199588</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 07 Apr 2012 13:21:12 GMT</pubDate></item></channel></rss>