<?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[Probleme mit Positionierung und Einlesen&#x2F;Schreiben]]></title><description><![CDATA[<p>Hallo,</p>
<p>als erstes möchte ich sagen ich bin ein C-noob. Ich sitze seit Montag morgen vor meinem Rechner, bin total am verzweifeln und versuche ein Programm zu schreiben, welches Werte aus folgender Textdatei (Auszug: es handlt sich um die FETT gedruckten Werte) Werte ausliest, diese dann in eine Formel einfügt und den resultierenden Wert in eine neue (Text)Datei einfügt.</p>
<p>Zyklische Erfassung Spitzenwertmessung_-1820N Zeit: 18,078613 Sec 22.01.2003 19:00:38<br />
Gespeichert bei: 200 Zyklus Gespeichert für: 3 Segmente<br />
Punkte: 2<br />
Zeit Vertikal Weg Vertikal Kraft<br />
Sec mm N<br />
11,550537 <strong>-0,073262166 -2303,3469</strong><br />
11,588135 <strong>0,09793396 -234,5567</strong></p>
<p>[...] es geht hier so noch 3000 Zeilen lang so weiter. Immer wieder das gleiche Muster.</p>
<p>Hier mein Quelltext wie weit ich bin (Ist aber in C und nicht C++)</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;

main()
{
	FILE *quelle, *ziel;
	char name_q[255], name_z[255];
	int c;

	long pos = 0;
	printf(&quot;Name Quelldatei : &quot;);
    scanf(&quot;%s&quot;,name_q);
    quelle=fopen(name_q,&quot;r&quot;);

	printf(&quot;Name Zieldatei : &quot;);
    scanf(&quot;%s&quot;,name_z);
    ziel=fopen(name_z,&quot;w&quot;);

	fscanf(quelle,&quot;%f&quot;,&amp;c);
	fprintf(ziel,&quot;%f&quot;,&amp;c);
}

	printf(&quot;\nAnzahl der Stellen einrücken (vom Anfang): &quot;);
	scanf(&quot;%ld&quot;,&amp;pos);
	fflush(stdin);

	fseek(quelle, 0L, SEEK_SET);

	while( (c=getc(quelle)) != EOF)
	{
		putc(c,ziel);
		putc(c,stdout);

		fseek(quelle, pos, SEEK_CUR);

	}
}
</code></pre>
<p>mein Problem ist folgendes:<br />
Ich komm nicht drauf, wie ich in der geöffneten Datei an eine bestimmte Position gelange (so weit bin ich ja schon mit SEEK) UND eine der fettgedruckten Zahlen entnehme um sie danach (zwischendrin müsste sie ja noch in eine simple Formel eingesetzt werden) in eine andere Textdatei zu schreiben. Einzelne Zeichen kann ich ja mit<br />
&quot;fgetc&quot;<br />
entnehmen, aber eine Zeichenkette?<br />
Das ganze könnte man doch in eine Schleife setzen (welche mit EOF abbricht) um alle Werte zu entnehmen?</p>
<p>Könnt ihr mir evtl. Tipps/Anregungen geben mit was ich das machen könnte?<br />
Freue mich über jegliche Hilfestellung/links etc etc.</p>
<p>Vielen dank im voraus!</p>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/160006/probleme-mit-positionierung-und-einlesen-schreiben</link><generator>RSS for Node</generator><lastBuildDate>Fri, 11 Sep 2026 06:04:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/160006.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 20 Sep 2006 22:07:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme mit Positionierung und Einlesen&#x2F;Schreiben on Wed, 20 Sep 2006 22:07:53 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>als erstes möchte ich sagen ich bin ein C-noob. Ich sitze seit Montag morgen vor meinem Rechner, bin total am verzweifeln und versuche ein Programm zu schreiben, welches Werte aus folgender Textdatei (Auszug: es handlt sich um die FETT gedruckten Werte) Werte ausliest, diese dann in eine Formel einfügt und den resultierenden Wert in eine neue (Text)Datei einfügt.</p>
<p>Zyklische Erfassung Spitzenwertmessung_-1820N Zeit: 18,078613 Sec 22.01.2003 19:00:38<br />
Gespeichert bei: 200 Zyklus Gespeichert für: 3 Segmente<br />
Punkte: 2<br />
Zeit Vertikal Weg Vertikal Kraft<br />
Sec mm N<br />
11,550537 <strong>-0,073262166 -2303,3469</strong><br />
11,588135 <strong>0,09793396 -234,5567</strong></p>
<p>[...] es geht hier so noch 3000 Zeilen lang so weiter. Immer wieder das gleiche Muster.</p>
<p>Hier mein Quelltext wie weit ich bin (Ist aber in C und nicht C++)</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;

main()
{
	FILE *quelle, *ziel;
	char name_q[255], name_z[255];
	int c;

	long pos = 0;
	printf(&quot;Name Quelldatei : &quot;);
    scanf(&quot;%s&quot;,name_q);
    quelle=fopen(name_q,&quot;r&quot;);

	printf(&quot;Name Zieldatei : &quot;);
    scanf(&quot;%s&quot;,name_z);
    ziel=fopen(name_z,&quot;w&quot;);

	fscanf(quelle,&quot;%f&quot;,&amp;c);
	fprintf(ziel,&quot;%f&quot;,&amp;c);
}

	printf(&quot;\nAnzahl der Stellen einrücken (vom Anfang): &quot;);
	scanf(&quot;%ld&quot;,&amp;pos);
	fflush(stdin);

	fseek(quelle, 0L, SEEK_SET);

	while( (c=getc(quelle)) != EOF)
	{
		putc(c,ziel);
		putc(c,stdout);

		fseek(quelle, pos, SEEK_CUR);

	}
}
</code></pre>
<p>mein Problem ist folgendes:<br />
Ich komm nicht drauf, wie ich in der geöffneten Datei an eine bestimmte Position gelange (so weit bin ich ja schon mit SEEK) UND eine der fettgedruckten Zahlen entnehme um sie danach (zwischendrin müsste sie ja noch in eine simple Formel eingesetzt werden) in eine andere Textdatei zu schreiben. Einzelne Zeichen kann ich ja mit<br />
&quot;fgetc&quot;<br />
entnehmen, aber eine Zeichenkette?<br />
Das ganze könnte man doch in eine Schleife setzen (welche mit EOF abbricht) um alle Werte zu entnehmen?</p>
<p>Könnt ihr mir evtl. Tipps/Anregungen geben mit was ich das machen könnte?<br />
Freue mich über jegliche Hilfestellung/links etc etc.</p>
<p>Vielen dank im voraus!</p>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1141489</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1141489</guid><dc:creator><![CDATA[TechM]]></dc:creator><pubDate>Wed, 20 Sep 2006 22:07:53 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Positionierung und Einlesen&#x2F;Schreiben on Wed, 20 Sep 2006 22:33:23 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>habe gemerkt, dass ich euch einen falschen Quelltext gegeben habe. Tut mir Leid. Da wollt eich was hinzufügen und war totaler Schrott.</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Hier der &quot;richtige&quot;</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;

main()
{
	FILE *quelle, *ziel;
	char name_q[255], name_z[255];
	int c;

	long pos = 0;
	printf(&quot;Name Quelldatei : &quot;);
    scanf(&quot;%s&quot;,name_q);
    quelle=fopen(name_q,&quot;r&quot;);

	printf(&quot;Name Zieldatei : &quot;);
    scanf(&quot;%s&quot;,name_z);
    ziel=fopen(name_z,&quot;w&quot;);

	printf(&quot;\nAnzahl der Stellen einrücken (vom Anfang): &quot;);
	scanf(&quot;%ld&quot;,&amp;pos);
	fflush(stdin);

	fseek(quelle, 0L, SEEK_SET);

	while( (c=getc(quelle)) != EOF)
	{
		putc(c,ziel);
		putc(c,stdout);

		fseek(quelle, pos, SEEK_CUR);

	}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1141496</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1141496</guid><dc:creator><![CDATA[TechM]]></dc:creator><pubDate>Wed, 20 Sep 2006 22:33:23 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Positionierung und Einlesen&#x2F;Schreiben on Thu, 21 Sep 2006 06:46:02 GMT]]></title><description><![CDATA[<p>hm...nimm doch c++ oder anderes forum!</p>
<p>wenn c++ dann: fstream anschauen!<br />
string anschauen!</p>
<p>tip-&gt; alles in string lesen, und da bearbeiten!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1141552</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1141552</guid><dc:creator><![CDATA[ser1al]]></dc:creator><pubDate>Thu, 21 Sep 2006 06:46:02 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Positionierung und Einlesen&#x2F;Schreiben on Mon, 25 Sep 2006 17:30:42 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>hier der aktuelle gesamte Quelltext:</p>
<pre><code class="language-cpp">#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;sstream&gt;
#include &lt;string&gt;
#include &lt;cmath&gt;

using namespace std;

int main(int argc, char* argv[])
{
    string strFileIn, strFileOut;
    string strLine, strTest;
    double d1, d2, d3, d4, d5, d6, dOut, dQuo, c0 = 11926.309;
	double dx;
	double c1, c2, c3, c4;
    int iLineCount = 0, iBlockCount = 0;

    //argumente prüfen
    if (argc &lt; 3)
    {
        //keine oder zuwenig Parameter angegeben -&gt; nach den Dateinamen fragen
        cout &lt;&lt; &quot;Eingabedatei angeben: &quot;;
        cin &gt;&gt; strFileIn;
        cout &lt;&lt; endl;
        cout &lt;&lt; &quot;Ausgabedatei angeben: &quot;;
        cin &gt;&gt; strFileOut;
        cout &lt;&lt; endl;
    }
    else
    {
        //Dateinamen aus Parameter-Array übernehmen
        strFileIn = argv[1];
        strFileOut = argv[2];
    }

    //Dateien öffnen
    ifstream in(strFileIn.c_str());
    if(!in) return -2;
    ofstream out(strFileOut.c_str());
    if(!out) return -3;

    //Datei lesen
    do
    {
        //Zeile einlesen
        getline(in, strLine);
        //alles OK?
        if(in)
        {
            //alles OK, kein Fehler aufgetreten und Datei noch nicht zu Ende
            //string in stringstream kopieren
            stringstream ssLine(strLine);
            ssLine &gt;&gt; strTest;
            //Wenn das 1. Wort 'Zyklische' ist, Zeilenzähler zurücksetzen und Blockzähler erhöhen
            if(strTest == &quot;Zyklische&quot;)
            {
                iLineCount = 0;
                iBlockCount++;
            }

            //Zeile zählen
            iLineCount++;
            //Wenn Zeile leer ist, nichts machen
            if(strLine.empty())
                continue;

			if(iLineCount == 2 &amp;&amp; iBlockCount &gt; 0)
            {
                //für 2. Zeile
                //string in stringstream kopieren
                stringstream ssLine(strLine);
				ssLine &gt;&gt; strTest;
                //Zeichenketten aus stringstream auslesen
                ssLine &gt;&gt; c1 &gt;&gt; c2 &gt;&gt; c3 &gt;&gt; c4 &gt;&gt; dx &gt;&gt; c6 &gt;&gt; c7 &gt;&gt; c8;
				out &lt;&lt; &quot;Block &quot; &lt;&lt; iBlockCount &lt;&lt; &quot; bei Lastwechsel &quot; &lt;&lt; dx &lt;&lt; endl;
			}

            if(iLineCount == 6 &amp;&amp; iBlockCount &gt; 0)
            {
                //für 6. Zeile
                //Kommata durch Punkte ersetzen
                for(string::iterator itStr = strLine.begin(); itStr != strLine.end(); itStr++)
                    if((*itStr) == ',') (*itStr = '.');
                //string in stringstream kopieren
                stringstream ssLine(strLine);
                //Zahlen aus stringstream auslesen
                ssLine &gt;&gt; d1 &gt;&gt; d2 &gt;&gt; d3;
            }

			if(iLineCount == 7 &amp;&amp; iBlockCount &gt; 0)
            {
                //ab 7. Zeile
                //Kommata durch Punkte ersetzen
                for(string::iterator itStr = strLine.begin(); itStr != strLine.end(); itStr++)
                    if((*itStr) == ',') (*itStr = '.');
                //string in stringstream kopieren
                stringstream ssLine(strLine);
                //Zahlen aus stringstream auslesen
                ssLine &gt;&gt; d4 &gt;&gt; d5 &gt;&gt; d6;
                //Berechnung durchführen
                dOut = ((d6 + fabs(d3)) / (fabs(d2) + d5));
				dQuo = (dOut / c0);
                //Genauigkeit der Ausgabe setzen
                out.precision(10);
                //Ergebnis ausgeben
                out &lt;&lt; dOut &lt;&lt; endl;
		out &lt;&lt; dQuo &lt;&lt; endl;
	            }
        }
    //bis Dateiende oder Fehler
    }while(in);

    return 0;
}
</code></pre>
<p>Also die Rechenoperationen stimmen. Die Ergebnisse sind richtig. Wäre es noch möglich die Bearbeitung von Zeile 6. und 7. &quot;eleganter&quot; darzustellen (Eher unwichtig)?</p>
<p>Hier</p>
<pre><code class="language-cpp">if(iLineCount == 2 &amp;&amp; iBlockCount &gt; 0)
            {
                //für 2. Zeile
                //string in stringstream kopieren
                stringstream ssLine(strLine);
				ssLine &gt;&gt; strTest;
                //Zeichenketten aus stringstream auslesen
                ssLine &gt;&gt; c1 &gt;&gt; c2 &gt;&gt; c3 &gt;&gt; c4 &gt;&gt; dx &gt;&gt; c6 &gt;&gt; c7 &gt;&gt; c8;
				out &lt;&lt; &quot;Block &quot; &lt;&lt; iBlockCount &lt;&lt; &quot; bei Lastwechsel &quot; &lt;&lt; dx &lt;&lt; endl;
}
</code></pre>
<p>versuche ich die Lastwechsel, also die hier fettgedruckte Zahl aufzunehemn da sie auschlaggebend ist. Mein Problem ist, dass ich beim einlesen der zeile zuerst das erste Wort(Zeichenkette) einlese und danach nur einzelne Zeichen.<br />
In C gibt es ja einen Unterschied zwsichen char *c (einzelne Zeichen) und char *s (Zeichenkette bis tab, leerzeile, linefeed etc). Wie it das in C++?</p>
<p>Zyklische Erfassung Spitzenwertmessung_-1820N Zeit: 18,078613 Sec 22.01.2003 19:00:38<br />
Gespeichert bei: <strong>200</strong> Zyklus Gespeichert für: 3 Segmente<br />
Punkte: 2<br />
Zeit Vertikal Weg Vertikal Kraft<br />
Sec mm N<br />
11,550537 -0,073262166 -2303,3469<br />
11,588135 0,09793396 -234,5567</p>
<p>Auch hätte ich gern anfangs eine Abfrage, ab welchen Lastwechsel die Berechnung starten und bei welchem sie enden soll. In diesem Beispiel erhöht sich die Zahll um jeweils 100 pro &quot;Absatz&quot;. Die Realisierung fällt mir sehr schwer.</p>
<p>Nun ich möchte das Ergebnis evtl. in Excel vorliegen haben, also würde ich es als .csv Datei absepeichern.</p>
<p>Nun müssten &quot;Anzahl der Lastwechsel bzw. Blocknummer&quot;, &quot;dOut&quot; und &quot;dQuo&quot; nebeneinander in Excel stehen, damit man mit den daten einfach weiterarbeiten kann.</p>
<p>Ich habe es folgendermasßen versucht jedoch wird das Ergebnis totaler Schwachsinn:</p>
<pre><code class="language-cpp">out &lt;&lt; &quot;Block &quot; &lt;&lt; iBlockCount &lt;&lt; &quot; bei Lastwechsel &quot; &lt;&lt; dx &lt;&lt; &quot;;&quot; &lt;&lt; dOut &lt;&lt; &quot;;&quot; &lt;&lt; dQuo &lt;&lt; endl;
</code></pre>
<p>Hat jemand eine Idee wie ich diese Probleme lösen kann?</p>
<p>Danke für eure Antworten im voraus.</p>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1144238</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144238</guid><dc:creator><![CDATA[TechM]]></dc:creator><pubDate>Mon, 25 Sep 2006 17:30:42 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Positionierung und Einlesen&#x2F;Schreiben on Tue, 26 Sep 2006 10:34:14 GMT]]></title><description><![CDATA[<p>Hallo, das problem mit der csv Datei hat sich erledigt. Es lag an der loakalen Einstellung von Excel. Habe das jetzt geändert und es klappt wunderbar.</p>
<p>Jedoch komme ich nicht darauf, woran es liegt, dass beim einlesen (folgender Quelltext) an &quot;fünfter&quot; Stelle die gesuchte Zahl (in Antwort davoir fett gedruckt) liegt?</p>
<p>Wo ist der Fehler im Code?</p>
<p>Müsste imho doch an 3. Stelle liegen.</p>
<p>Also:</p>
<p>1.Stelle: &quot;Gespeichert&quot; // 2. Stelle: &quot;bei:&quot; // 3. Stelle (das was ich will): &quot;200&quot;</p>
<p>Kann mir jemand weiterhelfen?</p>
<pre><code class="language-cpp">if(iLineCount == 2 &amp;&amp; iBlockCount &gt; 0)
            {
                //für 2. Zeile
                //string in stringstream kopieren
                stringstream ssLine(strLine);
				ssLine &gt;&gt; strTest;
                //Zeichenketten aus stringstream auslesen
                ssLine &gt;&gt; c1 &gt;&gt; c2 &gt;&gt; c3 &gt;&gt; c4 &gt;&gt; dx &gt;&gt; c6 &gt;&gt; c7 &gt;&gt; c8;
				out &lt;&lt; &quot;Block &quot; &lt;&lt; iBlockCount &lt;&lt; &quot; bei Lastwechsel &quot; &lt;&lt; dx &lt;&lt; endl;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1144598</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144598</guid><dc:creator><![CDATA[TechM]]></dc:creator><pubDate>Tue, 26 Sep 2006 10:34:14 GMT</pubDate></item></channel></rss>