<?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 Zeichenweise importieren]]></title><description><![CDATA[<p>Hallo erstmal,</p>
<p>ich habe nur rudimentäre Erfahrung mit C++ und versuche gerade etwas ähnliches zu machen, was ich schon einmal gemacht habe. Und zwar will ich eine Textdatei einlesen und zwar am Besten Zeichenweise. Denn wenn eine bestimmte Zeichenfolge erscheint, will ich das was danach kommt in eine Variable schreiben solange bis wieder ein bestimmtes Zeichen kommt. Also wenn das hier dasteht:</p>
<p>&lt;IP1&gt;123.456.78&lt;/IP1&gt;</p>
<p>will ich das einlesen bis das erste &quot;&gt;&quot; kommt, den Rest in eine Variable schreiben bis &quot;&lt;/&quot; kommt. Wie ich die Datei einlese weiß ich schon:</p>
<pre><code>ifstream datei (&quot;test.txt&quot;);
string zeile;
while (getline (datei, zeile)) {
 cout &lt;&lt; zeile &lt;&lt; endl;

}
</code></pre>
<p>Ich weiß gerade nur nicht, wie ich den string &quot;zeile&quot; zeichenweise durchsuche - auch nach einem ausführlichen Googeln hab ich den entsprechenden Befehl nicht gefunden. Kann mir da jemand vielleicht einen kleinen Tipp geben oder mich zumindest in die richtige Richtung (Tutorial?) stupsen?</p>
<p>Danke schonmal!</p>
<p>Schnitzel</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/288558/datei-zeichenweise-importieren</link><generator>RSS for Node</generator><lastBuildDate>Wed, 19 Aug 2026 13:23:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/288558.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 19 Jun 2011 01:30:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Datei Zeichenweise importieren on Sun, 19 Jun 2011 01:30:41 GMT]]></title><description><![CDATA[<p>Hallo erstmal,</p>
<p>ich habe nur rudimentäre Erfahrung mit C++ und versuche gerade etwas ähnliches zu machen, was ich schon einmal gemacht habe. Und zwar will ich eine Textdatei einlesen und zwar am Besten Zeichenweise. Denn wenn eine bestimmte Zeichenfolge erscheint, will ich das was danach kommt in eine Variable schreiben solange bis wieder ein bestimmtes Zeichen kommt. Also wenn das hier dasteht:</p>
<p>&lt;IP1&gt;123.456.78&lt;/IP1&gt;</p>
<p>will ich das einlesen bis das erste &quot;&gt;&quot; kommt, den Rest in eine Variable schreiben bis &quot;&lt;/&quot; kommt. Wie ich die Datei einlese weiß ich schon:</p>
<pre><code>ifstream datei (&quot;test.txt&quot;);
string zeile;
while (getline (datei, zeile)) {
 cout &lt;&lt; zeile &lt;&lt; endl;

}
</code></pre>
<p>Ich weiß gerade nur nicht, wie ich den string &quot;zeile&quot; zeichenweise durchsuche - auch nach einem ausführlichen Googeln hab ich den entsprechenden Befehl nicht gefunden. Kann mir da jemand vielleicht einen kleinen Tipp geben oder mich zumindest in die richtige Richtung (Tutorial?) stupsen?</p>
<p>Danke schonmal!</p>
<p>Schnitzel</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2080438</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2080438</guid><dc:creator><![CDATA[Schnitzel]]></dc:creator><pubDate>Sun, 19 Jun 2011 01:30:41 GMT</pubDate></item><item><title><![CDATA[Reply to Datei Zeichenweise importieren on Sun, 19 Jun 2011 07:34:58 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>du bist im falschen Subforum - hier ist C++/CLI (vllt. verschiebt ein Mod deinen Beitrag?).</p>
<p>Du kannst einen std::string ganz normal über Indizes ansprechen, d.h.</p>
<pre><code class="language-cpp">for(int i=0; i&lt;zeile.length(); i++)
{
  char c = zeile[i];
}
</code></pre>
<p>Die fortgeschrittenere Variante wäre die Verwendung von Iteratoren.</p>
<p>Um nach einer Zeichenfolge zu suchen, kannst du auch die find-Funktion verwenden:</p>
<pre><code class="language-cpp">size_t pos1 = zeile.find(&quot;&lt;IP1&gt;&quot;);
size_t pos2 = zeile.find(&quot;&lt;/IP1&gt;&quot;);
string ip = zeile.substr(pos1+5, pos2-pos1-5);
</code></pre>
<p>Und die letzte Codezeile extrahiert die IP anhand der zwei gefundenen Positionen (der zweite Parameter ist die Länge.</p>
<p>Als gute Hilfe für die C++ Library kann ich dir <a href="http://www.cplusplus.com" rel="nofollow">http://www.cplusplus.com</a> empfehlen. Für die String-Methoden: <a href="http://www.cplusplus.com/reference/string/" rel="nofollow">http://www.cplusplus.com/reference/string/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2080449</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2080449</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Sun, 19 Jun 2011 07:34:58 GMT</pubDate></item><item><title><![CDATA[Reply to Datei Zeichenweise importieren on Sun, 19 Jun 2011 14:55:28 GMT]]></title><description><![CDATA[<p>Ach Mist, sorry wegen dem falschen Forum.</p>
<p>Aber vielen Dank für deine Antwort, die hilft mir schon mal extrem weiter! Mit den Iteratoren ist das natürlich viel eleganter. Jetzt habe ich da nur noch ein kleines Problem: wie sage ich ihm, dass er nichts in den String IP schreiben soll, wenn er &lt;IP1&gt; nicht in der Zeile findet? Ich habs mit einer einfachen if-Funktion probiert</p>
<p>if (pos1!=Null)</p>
<p>aber das funktioniert so nicht. Wie frage ich danach, ob er &quot;&lt;IP1&gt; gefunden hat?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2080635</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2080635</guid><dc:creator><![CDATA[Schnitzel]]></dc:creator><pubDate>Sun, 19 Jun 2011 14:55:28 GMT</pubDate></item><item><title><![CDATA[Reply to Datei Zeichenweise importieren on Sun, 19 Jun 2011 17:53:43 GMT]]></title><description><![CDATA[<p>Wenn der Teil nicht gefunden wurde, liefert find die Konstante string::npos - damit kannst du dann vergleichen:</p>
<pre><code class="language-cpp">size_t pos1 = zeile.find(&quot;&lt;IP1&gt;&quot;);
size_t pos2 = zeile.find(&quot;&lt;/IP1&gt;&quot;);
if(pos1!=string::npos)
{
  string ip = zeile.substr(pos1+5, pos2-pos1-5);
  ...
}
else
  // keine IP1 in der aktuellen Zeile
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2080734</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2080734</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sun, 19 Jun 2011 17:53:43 GMT</pubDate></item><item><title><![CDATA[Reply to Datei Zeichenweise importieren on Sun, 26 Jun 2011 00:16:39 GMT]]></title><description><![CDATA[<p>Vielen Dank für die Antworten. Damit hab ich es jetzt mitbekommen.</p>
<p>Aber jetzt hätte ich eine andere Frage: um die Daten zu speichern möchte ich eine Klasse deklarieren und das eingelesene dann in die Variabeln der Klasse schreibe. Das ist auch kein Problem. Nur würde ich außerdem gerne am Anfang der XML-Datei nachfragen, um wieviele Datensätze es geht, damit ich auch weiß wieviele Klassen ich brauche. Und dann würde ich je nach Eingabe dann eben auch eine bestimtme Anzahl von Instanzen der Klasse erstellen.</p>
<p>Also praktisch so:</p>
<p>Er liest ein es gibt 5 Datensätze.</p>
<p>Dann würde ich es gerne irgendwie so machen:</p>
<p>for(i=1; i&lt;=datensaetze; i++)<br />
{Class class&quot;i&quot; (also hier mit irgendeinem Befehl die Variable von oben in den Namen der Instanz schreiben);}</p>
<p>So geht das natürlich leider nicht - aber ist es sonst irgendwie möglich (ohne dass es jetzt extrem kompliziert wird), oder sollte ich einfach von Anfang an zig Instanzen erstellen, und wenns doch zu wenig sind am Anfang eine Fehlermeldung ausgeben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2084136</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2084136</guid><dc:creator><![CDATA[Schnitzel]]></dc:creator><pubDate>Sun, 26 Jun 2011 00:16:39 GMT</pubDate></item><item><title><![CDATA[Reply to Datei Zeichenweise importieren on Sun, 26 Jun 2011 08:06:18 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/u18363" rel="nofollow">Jochen Kalmbach</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/f58" rel="nofollow">C++/CLI mit .NET</a> in das Forum <a href="http://www.c-plusplus.net/forum/f15" rel="nofollow">C++ (auch C++0x)</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/39405" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2084169</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2084169</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Sun, 26 Jun 2011 08:06:18 GMT</pubDate></item><item><title><![CDATA[Reply to Datei Zeichenweise importieren on Sun, 26 Jun 2011 08:06:24 GMT]]></title><description><![CDATA[<p>Eine Möglichkeit wäre es natürlich, irgendwo am Anang der eingelesenen Datei die Anzahl zu schreiben. Aber einfacher geht es, wenn du eine Datenstruktur verwendest, die mitwachsen kann:</p>
<pre><code class="language-cpp">vector&lt;Satz&gt; inhalt;
Satz tmp;
while(xmlfile.readsatz(tmp))
  inhalt.push_back(tmp);
</code></pre>
<p>(nach dem Einlesen kannst du per inhalt.size() erfahren, wieviele Datensätze du hast)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2084170</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2084170</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sun, 26 Jun 2011 08:06:24 GMT</pubDate></item><item><title><![CDATA[Reply to Datei Zeichenweise importieren on Sun, 26 Jun 2011 10:27:14 GMT]]></title><description><![CDATA[<p>Am Anfang der XML-Datei werde ich eh die Anzahl schreiben müssen... wie würde es denn damit funktionieren? Mit Vektoren kenne ich mich so gar nicht aus, deshalb würde ich wenns geht es lieber anders lösen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2084213</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2084213</guid><dc:creator><![CDATA[Schnitzel]]></dc:creator><pubDate>Sun, 26 Jun 2011 10:27:14 GMT</pubDate></item><item><title><![CDATA[Reply to Datei Zeichenweise importieren on Sun, 26 Jun 2011 17:20:57 GMT]]></title><description><![CDATA[<p>Also rein von der Logik her - wieso brauchst du mehrere Klassen, um die IPs dann in UNTERSCHIEDLICHEN Klassen zu bearbeiten? Macht es nicht viel mehr Sinn, EINE Klasse anzulegen und dort eben ein private vector/array, in dem die Daten gespeichert werden?<br />
Hier mal ein ungetestetes Bsp:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;vector&gt;

using namespace std;

class Datensatz
{
	private:
		vector&lt;string&gt; m_IPs;

	public:
		Speichern( string daten )								{ m_IPs.push_back( daten ); }
		Anzeigen( int nummer );									{ cout &lt;&lt; &quot;Datensatz Nummer &quot; &lt;&lt; nummer &lt;&lt; &quot;: &quot; &lt;&lt; m_IPs.at( nummer ) &lt;&lt; endl; }
		Editieren( int nummer, string daten )					{ m_IPs.at( nummer ) = daten; }
};
</code></pre>
<p>Weiß nicht, wie ich das erklären soll - denke durch die Bezeichnung und da es alles Einzeiler sind, ist es fast schon selbsterklärend <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="😃"
    /></p>
<p>So würde das Speichern ablaufen (Codefetzen zusammen gewürfelt):</p>
<pre><code class="language-cpp">int main( int argc, char **argv )
{
	string Datei = &quot;Test.xml&quot;;								
	Datensatz datensatz;												/* Die Klasse */
	ifstream fromFile( Datei.c_str( ) );					
	if( fromFile.fail( ) )						
	{
		cout &gt;&gt; &quot;Fehler beim Öffnen der Datei: &quot; &lt;&lt; Datei &lt;&lt; endl;
		return 0;
	}

	while( !fromFile.eof( ) )											/* Finde das persönlich besser als while( getinline( fromFile, Line ) ) { ... } */
	{
		string Line;

		getinline( fromFile, Line );

	//	if( Line.empty( ) || Line[0] == '#' )							/* Oder ein anderes Zeichen, um in der Datei Kommentare anzulegen */
	//		continue;													/* Nicht notwendig in einer xml-Datei (?) */

		size_t beg = Line.find( &quot;&lt;IP1&gt;&quot; ); 
		size_t end = Line.find( &quot;&lt;/IP1&gt;&quot; );

		if( beg == string :: npos )										/* Keine IP in dieser Zeile */
			continue;													/* =&gt; Neue Zeile wird durchsucht */

		string Ip = zeile.substr( beg + 5, end - beg - 5 );				/* Ip wird herausgefiltert */

		datensatz.Speichern( Ip );										/* Ip wird in der Klasse im vector m_IPs gespeichert */
	}

	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2084384</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2084384</guid><dc:creator><![CDATA[Moonboot]]></dc:creator><pubDate>Sun, 26 Jun 2011 17:20:57 GMT</pubDate></item></channel></rss>