<?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 aus Einstellungstextdatei für Programm einlesen]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgendes Problem. Mir liegt eine &quot;einstellungen.txt&quot; Datei in folgendem Format vor.</p>
<pre><code>&lt;abc&gt;
Name_Wert1 = 12;
Name_Wert2 = 13;
Name_Wert3 = 24;
&lt;/abc&gt;
</code></pre>
<p>Nun soll eine Funktion geschrieben werden, die sowohl den Namen als auch den Wert ausliest. Dies soll die Funktion solange machen, wie Werte vorhanden sind. Das erste Problem, was ich hier sehe ist das ich wahrscheinlich 2 Funktionen benötige, da ich nicht weiß, wie ich 2 unterschiedliche Dateitypen mit einer Funktion zurückgeben soll.</p>
<p>Letztlich sollen zwei arrays zurückgegeben werden. Eins mit den int Werten und eins mit den entsprechenden strings... z.B.:</p>
<p>a[1] = Name_Wert1;<br />
b[1] = 12; // entsprechender Wert zu a[1]</p>
<p>Wie kann man das am einfachsten realisieren?</p>
<p>Ich habe mir den &quot;Anfang&quot; in etwa so vorgestellt. Wobei hier wieder mehrere Probleme auftreten... Ich glaube einfach ich stelle mir das ganze zu kompliziert vor. Vllt. hat ja jmd. eine Idee.</p>
<pre><code>vector&lt;double&gt; readConfig(const char* filename,const char* attributeName){
    ifstream f(filename);

        //solange Zeilen ignorieren, bis der Tag gefunden wurde
    while(!isAttributeTag(f,tag,attributeName)){
        f.ignore( numeric_limits&lt; streamsize &gt;::max(), '\n' );
    }
        //die Zeile des Tags ebenso ignorieren
    f.ignore( numeric_limits&lt; streamsize &gt;::max(), '\n' );

        //nun jede folgende Zeile in value schreiben und solange das Ende nicht erreicht ist
    string value;
    f &gt;&gt; value;
    while ( value != &quot;&lt;/abc&gt;&quot;){
        // Auslesevorgang
    }
    return values;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/317240/daten-aus-einstellungstextdatei-für-programm-einlesen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 29 Jul 2026 11:26:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/317240.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 31 May 2013 21:54:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Daten aus Einstellungstextdatei für Programm einlesen on Fri, 31 May 2013 21:54:07 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgendes Problem. Mir liegt eine &quot;einstellungen.txt&quot; Datei in folgendem Format vor.</p>
<pre><code>&lt;abc&gt;
Name_Wert1 = 12;
Name_Wert2 = 13;
Name_Wert3 = 24;
&lt;/abc&gt;
</code></pre>
<p>Nun soll eine Funktion geschrieben werden, die sowohl den Namen als auch den Wert ausliest. Dies soll die Funktion solange machen, wie Werte vorhanden sind. Das erste Problem, was ich hier sehe ist das ich wahrscheinlich 2 Funktionen benötige, da ich nicht weiß, wie ich 2 unterschiedliche Dateitypen mit einer Funktion zurückgeben soll.</p>
<p>Letztlich sollen zwei arrays zurückgegeben werden. Eins mit den int Werten und eins mit den entsprechenden strings... z.B.:</p>
<p>a[1] = Name_Wert1;<br />
b[1] = 12; // entsprechender Wert zu a[1]</p>
<p>Wie kann man das am einfachsten realisieren?</p>
<p>Ich habe mir den &quot;Anfang&quot; in etwa so vorgestellt. Wobei hier wieder mehrere Probleme auftreten... Ich glaube einfach ich stelle mir das ganze zu kompliziert vor. Vllt. hat ja jmd. eine Idee.</p>
<pre><code>vector&lt;double&gt; readConfig(const char* filename,const char* attributeName){
    ifstream f(filename);

        //solange Zeilen ignorieren, bis der Tag gefunden wurde
    while(!isAttributeTag(f,tag,attributeName)){
        f.ignore( numeric_limits&lt; streamsize &gt;::max(), '\n' );
    }
        //die Zeile des Tags ebenso ignorieren
    f.ignore( numeric_limits&lt; streamsize &gt;::max(), '\n' );

        //nun jede folgende Zeile in value schreiben und solange das Ende nicht erreicht ist
    string value;
    f &gt;&gt; value;
    while ( value != &quot;&lt;/abc&gt;&quot;){
        // Auslesevorgang
    }
    return values;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2327713</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2327713</guid><dc:creator><![CDATA[testing]]></dc:creator><pubDate>Fri, 31 May 2013 21:54:07 GMT</pubDate></item><item><title><![CDATA[Reply to Daten aus Einstellungstextdatei für Programm einlesen on Sat, 01 Jun 2013 00:29:28 GMT]]></title><description><![CDATA[<pre><code>// Headers
#include &lt;iostream&gt; // cout, string
#include &lt;fstream&gt;  // ifstream
#include &lt;map&gt;  // map
#include &lt;stdlib.h&gt; // atoi

// Shorteners
using namespace std;
typedef map&lt;string,int&gt; Config;

// Load config from file to memory
Config readConfig(const char* filename){
    // Create config storage
    Config config;
    // Create file handle
    ifstream fin(filename);
    // Create buffer for a line
    string line;
    // Position of found
    size_t pos;
    // Iterate through file lines
    while(fin.good()){
        // Get current line
        getline(fin,line);
        // Validate line for parsing
        pos = line.find(&quot; = &quot;);
        if(pos != string::npos)
            // Save line entry to config storage
            config[line.substr(0,pos)] = atoi(line.substr(pos+3).c_str());
    }
    // Return config
    return config;
}

// Program entry
int main(){
    // Read config
    Config config = readConfig(&quot;input.txt&quot;);
    // Test access on key
    const char key[] = &quot;world&quot;;
    if(config.count(key))
        cout &lt;&lt; config[key] &lt;&lt; endl;
    // Exit
    return 0;
}
</code></pre>
<p>Hierbei wird das <strong>&lt;abc&gt;</strong> und <strong>&lt;/abc&gt;</strong> noch ausser Acht gelassen, sowie die Zeichen nach den Zahlen ignoriert.<br />
Man kann den Code verbessern, z.B. durch andere Methoden zum Zahlenlesen oder weiterer Syntax-Rücksicht.</p>
<p>Soviel erstmal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2327721</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2327721</guid><dc:creator><![CDATA[Youka]]></dc:creator><pubDate>Sat, 01 Jun 2013 00:29:28 GMT</pubDate></item></channel></rss>