<?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 lesen, bestimmte einträge bearbeiten]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgendes Problem: mir liegt eine Datei vor, die folgendermaßen aufgebaut ist: (habs mal als code gekennzeichnet damit man besser lesen kann)</p>
<pre><code>titel
 0 2 3 0 0
 0 0 0 5 0

1 1 1 1
1 1 1 1
  0 0 0 0
  0 0 0 0
  0 0 0 0
10 10 10
10 10 10
10 10 10
****
 titel
 0 2 3 0 0
 0 0 0 1 0
****
 titel
 0 2 3 0 0
 0 0 0 5 0

1 1 1 1
1 1 1 1
  0 0 0 0
  0 0 0 0
  0 0 0 0
10 10 10
10 10 10
10 10 10
****
 titel
 0 2 3 0 0
 0 0 0 5 0

1 1 1 1
1 1 1 1
  0 0 0 0
  0 0 0 0
  0 0 0 0
10 10 10
10 10 10
10 10 10
</code></pre>
<p>die Zahlen sind natürlich andere, ich muss nur auf die 2, 3, Nullen und Einsen zugreifen, wenn &quot;<strong><strong>&quot; erscheint soll die Datenaufnahme pausieren. Die Nullen und Einsen will ich in ein array speichern, wie kann ich also 2, 3 auslesen, den rest überspringen, dann Einsen in ein Array und NUllen in ein anderes speichern, und das ganze nach dem auftreten von &quot;</strong></strong>&quot; wiederholen?</p>
<p>Bisher hab ich mit fscanf probiert, aber mit einfacheren Dateien, und da komme ich nicht weiter, ist es besser mit der string klasse zu arbeiten?(fstream)</p>
<p>Achso die Datei ist nicht binär sondern ascii, hab sie auch schonmal komplett binär eingelesen mit .read(), aber dann kann ich ja nicht zwischen Zahlen und Buchstaben oder WHitespaces unterscheiden...</p>
<p>hoffentlich kann mir jemand helfen<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /><br />
gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/255661/datei-lesen-bestimmte-einträge-bearbeiten</link><generator>RSS for Node</generator><lastBuildDate>Fri, 11 Sep 2026 18:09:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/255661.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 03 Dec 2009 14:30:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Datei lesen, bestimmte einträge bearbeiten on Thu, 03 Dec 2009 14:30:12 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgendes Problem: mir liegt eine Datei vor, die folgendermaßen aufgebaut ist: (habs mal als code gekennzeichnet damit man besser lesen kann)</p>
<pre><code>titel
 0 2 3 0 0
 0 0 0 5 0

1 1 1 1
1 1 1 1
  0 0 0 0
  0 0 0 0
  0 0 0 0
10 10 10
10 10 10
10 10 10
****
 titel
 0 2 3 0 0
 0 0 0 1 0
****
 titel
 0 2 3 0 0
 0 0 0 5 0

1 1 1 1
1 1 1 1
  0 0 0 0
  0 0 0 0
  0 0 0 0
10 10 10
10 10 10
10 10 10
****
 titel
 0 2 3 0 0
 0 0 0 5 0

1 1 1 1
1 1 1 1
  0 0 0 0
  0 0 0 0
  0 0 0 0
10 10 10
10 10 10
10 10 10
</code></pre>
<p>die Zahlen sind natürlich andere, ich muss nur auf die 2, 3, Nullen und Einsen zugreifen, wenn &quot;<strong><strong>&quot; erscheint soll die Datenaufnahme pausieren. Die Nullen und Einsen will ich in ein array speichern, wie kann ich also 2, 3 auslesen, den rest überspringen, dann Einsen in ein Array und NUllen in ein anderes speichern, und das ganze nach dem auftreten von &quot;</strong></strong>&quot; wiederholen?</p>
<p>Bisher hab ich mit fscanf probiert, aber mit einfacheren Dateien, und da komme ich nicht weiter, ist es besser mit der string klasse zu arbeiten?(fstream)</p>
<p>Achso die Datei ist nicht binär sondern ascii, hab sie auch schonmal komplett binär eingelesen mit .read(), aber dann kann ich ja nicht zwischen Zahlen und Buchstaben oder WHitespaces unterscheiden...</p>
<p>hoffentlich kann mir jemand helfen<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /><br />
gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1817147</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1817147</guid><dc:creator><![CDATA[mimus]]></dc:creator><pubDate>Thu, 03 Dec 2009 14:30:12 GMT</pubDate></item><item><title><![CDATA[Reply to Datei lesen, bestimmte einträge bearbeiten on Thu, 03 Dec 2009 15:08:07 GMT]]></title><description><![CDATA[<p>mimus schrieb:</p>
<blockquote>
<p>Bisher hab ich mit fscanf probiert, aber mit einfacheren Dateien, und da komme ich nicht weiter, ist es besser mit der string klasse zu arbeiten?(fstream)</p>
</blockquote>
<p>JA!</p>
<blockquote>
<p>hoffentlich kann mir jemand helfen</p>
</blockquote>
<p>Deine Beschreibung, was du wohin lesen willst, ist zu wirr. Gehe ich Recht in der Annahme, dass du sowas willst?</p>
<pre><code>titel           // titel ignorieren
 0 2 3 0 0       // 2 in variable x, 3 in variable y, Nullen in Array a
 0 0 0 5 0       // Nullen in Array a, 5 ignorieren

1 1 1 1          // Einsen in Array b
1 1 1 1          // Einsen in Array b
  0 0 0 0        // Nullen in Array c
  0 0 0 0        // Nullen in Array c
  0 0 0 0        // Nullen in Array c
10 10 10         // ignorieren
10 10 10         // ignorieren
10 10 10         // ignorieren
****             // ignorieren. Berechnung starten. Ergebnis ausgeben
 titel           // weitermachen wie am anfang
 0 2 3 0 0
 0 0 0 1 0
****
 titel
 0 2 3 0 0
 0 0 0 5 0

1 1 1 1
1 1 1 1
  0 0 0 0
  0 0 0 0
  0 0 0 0
10 10 10
10 10 10
10 10 10
****
 titel
 0 2 3 0 0
 0 0 0 5 0

1 1 1 1
1 1 1 1
  0 0 0 0
  0 0 0 0
  0 0 0 0
10 10 10
10 10 10
10 10 10
</code></pre>
<p>Du brauchst dazu: Schleifen.</p>
<p>Hilfreiche Klassen und Methoden:<br />
ifstream<br />
ifstream::operator&gt;&gt;<br />
ifstream::ignore</p>
<p>Eine Referenz dazu:<br />
<a href="http://www.cplusplus.com/reference/iostream/ifstream/" rel="nofollow">http://www.cplusplus.com/reference/iostream/ifstream/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1817165</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1817165</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 03 Dec 2009 15:08:07 GMT</pubDate></item><item><title><![CDATA[Reply to Datei lesen, bestimmte einträge bearbeiten on Thu, 03 Dec 2009 15:29:45 GMT]]></title><description><![CDATA[<p>ja so ungefähr will ich auf die daten zugreifen, ich schau mir erstmal die referenzen an...</p>
<p>vielen dank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1817176</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1817176</guid><dc:creator><![CDATA[mimus]]></dc:creator><pubDate>Thu, 03 Dec 2009 15:29:45 GMT</pubDate></item><item><title><![CDATA[Reply to Datei lesen, bestimmte einträge bearbeiten on Thu, 03 Dec 2009 17:43:01 GMT]]></title><description><![CDATA[<p>Also falls es garantiert ist dass die einzelnen Zahlen jeweils durch ein Leerzeichen getrennt sind kannst du das so lösen, dass eine intvariable eingelesen wird bis ein Fehler auftaucht (was passiert wenndu am ersten Sternchen angekommen bist)</p>
<pre><code>while(infile &gt;&gt; intvar)
{
     testen ob intvar 0, 1, 2 oder 3 und in entsprechende Liste speichern und den Rest ignorrieren

}
Erstes Sternchen erreicht

Kram so oft wiederholen wie benötigt
</code></pre>
<p>Obgleich man '*' auf Grund der impliziten Konvertierung durchaus in einem int speichern kann ist dieses Sternchen nunmal vom Typ char und wenn der Typ im Buffer nicht mit dem Typ übereinstimmt in den geschrieben werden soll ergibt der Ausdruck false.<br />
Und da die Zeichen durch leerzeichen getrennt sind, muss man hier auch nicht großartig die Zeichen auseinander nehmen um die einzelnen Ziffern zu kriegen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1817255</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1817255</guid><dc:creator><![CDATA[Kahino]]></dc:creator><pubDate>Thu, 03 Dec 2009 17:43:01 GMT</pubDate></item><item><title><![CDATA[Reply to Datei lesen, bestimmte einträge bearbeiten on Fri, 04 Dec 2009 10:52:22 GMT]]></title><description><![CDATA[<p>so müsste ich aber diepositionsnummer von jeder Varablen wissen, das geht aber nicht da ein abschnitt zwischen den Strenchen unterschiedlich lang sein kann, und außerdem nach dem ersten datensatz ein abschnitt folgt der nur den &quot;Kopf&quot; (also titel und ein paar zahlen) enthält, das ist aber nur einmal so, also das wiederholt sich nicht, dafür ist mir aufgefallen das der &quot;Kopf&quot; nach dem ersten datensatz dann anders aussieht...<br />
Übrigens die Ziffern O und 1 stehen für floats, (hab ich noch nicht erwähnt sorry).</p>
<p>Wie ist es denn grundsätzlich besser? Sollte man erst die gesamte datei in einen String einlesen, oder das einlesen bei Sternchen anhalten und auf eine eingabe warten?</p>
<p>Ich bin noch nicht so lange am programmieren und daher etwas ratlos, wie ich das am besten anpacken soll...</p>
<p>gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1817751</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1817751</guid><dc:creator><![CDATA[mimus]]></dc:creator><pubDate>Fri, 04 Dec 2009 10:52:22 GMT</pubDate></item><item><title><![CDATA[Reply to Datei lesen, bestimmte einträge bearbeiten on Sat, 05 Dec 2009 15:56:25 GMT]]></title><description><![CDATA[<p>Also das war ja nicht der komplette Quellcode nur ich dachte das reicht.</p>
<p>Man muss halt bedenken stream &gt;&gt; var gibt true zurück wenn das alles geklappt hat ansonsten false.<br />
Und in speziell dieser Anwendung würden Leerzeichen oder andere STeuerzeichen wie Zeilenumbrüche einfach ignorriert.</p>
<pre><code>1 
2       3
- - - - -- - - 
stream &gt;&gt; var1 &gt;&gt; var2 &gt;&gt; var3;
</code></pre>
<p>ergibt: var1 = 1, var2 = 2, var3 = 3;</p>
<p>Und wenn das erste mal false auftaucht gehst du halt so lange eine Position weiter bis du wieder eine zahl lesen kannst, denn da ist dann der neue Datensatz.<br />
Eventuell musst du dieses Prinzip auch anwendne bevor du den ersten einliest.</p>
<p>Aber da du jetzt von Datensätzen redest, wenn diese Datei also ebenfalls von dir erzeugt wird, weil du halt die Datensätze speicherst, könntest du dir ja mal überlegen eine art Indexdatei anzulegen.<br />
Die Indexdatei enhält kleine Datensätze fixer größe, im minimalfalls lediglich aus genügend byte um die Startposition des jeweils nächsten Datensatzes festzulegen.<br />
nehmen wir mal an du speicherst die position in einem int, dann wäre ein Datensatz dieser Indexdatei genau 4 byte groß.<br />
Bevor du also an deine Hauptdatei gehst liest du jeweils vier 4 Byte der INdexdatei ein und speicherst die Werte in eine Liste so lange bis du am Ende der Indexdatei bist.<br />
Die Anzahl deiner Listeneinträge repräsentiert in diesem Fall die Anzahl deiner Datensätze und der Wert jedes Eintrags die Startposition der Datensätze.<br />
Wenn du dann z.B. die Werte deiens Ersten Datensatzes lesen möchtest<br />
rufst du dann halt seekg(wert aus erstem Listeneintrag) auf und kannst sofort mit dem einlesen Der Werte einlesen bis das nicht mehr geht, nach dem im vorigne Post beschriebenen Prinzip zum Beispiel.</p>
<p>Imer dann wenn du ein Datensatz deiner Hauptdatei hinzufügst, speicherst du die Position vom Ende der Hauptdatei (vor dem Eintrag des neuen Datensatzes) als Startposition in die Indexdatei.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1818250</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1818250</guid><dc:creator><![CDATA[Kahino]]></dc:creator><pubDate>Sat, 05 Dec 2009 15:56:25 GMT</pubDate></item><item><title><![CDATA[Reply to Datei lesen, bestimmte einträge bearbeiten on Mon, 07 Dec 2009 09:51:56 GMT]]></title><description><![CDATA[<p>Danke für die Antwort,</p>
<p>leider erzeuge ich die Datei nicht selbst, sondern sie kommt von einem anderen Programm, daher kann ich deinen guten vorschlag, eine indexdatei zu erzeugen so nicht nutzen.. leider.<br />
Übrigens entspricht diese Datei dem .t19 standart (ist von Marc; einem FEM- Tool)<br />
Ansonsten versuch ich mit deinem Vorschlag der nutzung von stream und melde mich wieder beim nächsten Problem <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1818930</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1818930</guid><dc:creator><![CDATA[mimus]]></dc:creator><pubDate>Mon, 07 Dec 2009 09:51:56 GMT</pubDate></item></channel></rss>