Datei auslesen



  • Hi Leute,

    ich muss schonwieder nerven, aber ich habe erneut ein Problem. Ich habe ein paar Daten in eine separate Datei geschrieben, die ich alle mit einer Tilde getrennt habt. Ich wüsste zwar, wie ich das machen kann, das der Text, der danach den Tilden eingelesen wird, aber auch nur bis zur nächsten Tilde?

    Ich wäre euch sehr dankbar, wenn ihr mir helfen könntet. Ich danke schonmal...

    MfG Apocalypse



  • Hallo,
    meinst du, dass der Text in der Datei so aussieht?

    ~blub~blah~
    blah~blub~blah
    ~blah
    blub~
    

    Wenn ja:
    Wie wäre es mit einem "csv-reader", der -- durch ein bestimmtes Zeichen getrennte -- Werte in einen std::vectorstd::string einließt?

    class csv_reader
        {
            private:
                std::string m_src_data;
                std::vector<std::string> m_dest_data;
                int m_seperator;
    
                std::string::size_type read_beg()
                {
                    std::string::size_type first_sep = 0;
                    if(m_src_data[0] != m_seperator)
                    {
                        first_sep = m_src_data.find_first_of(m_seperator, 0);
                        m_dest_data.push_back(m_src_data.substr(0, first_sep));
                    }
                    return first_sep;
                }
                void read_end(std::string::size_type last_sep)
                {
                    if(last_sep != m_src_data.size() - 1)
                        m_dest_data.push_back(m_src_data.substr(last_sep + 1, m_src_data.size() - (last_sep + 1) ));
                }
    
            public:
                csv_reader(const std::string& sd, int s = ',') : m_src_data(sd), m_dest_data(), m_seperator(s)
                {
                    std::string::size_type pn, po = read_beg();
                    if(po != std::string::npos)
                    {
                        while( (pn = m_src_data.find_first_of(m_seperator, po + 1)) != std::string::npos)
                        {
                            m_dest_data.push_back(m_src_data.substr(po + 1, pn - (po + 1) ));
                            po = pn;
                        }
                    }
                    read_end(po);
                }
                std::vector<std::string> get_result() const { return m_dest_data; }
        };
    

    Gruß Caipi



  • Richtig..., die Daten aus der Beispieldatei '12345678' (hat keine Endung) hat folgenden Inhalt:

    12345678~Max Mustermann~Musterstraße~3~01234~musterstadt~...usw.
    

    Kann man das nicht irgendwie anders machen, denn ich steige irgendwie nicht so recht durch das Script, welches Caipi gepostet hat.

    MfG Apocalypse



  • Apocalypse schrieb:

    Kann man das nicht irgendwie anders machen, denn ich steige irgendwie nicht so recht durch das Script, welches Caipi gepostet hat.

    Klar kann man das auch anders machen. Der Code-Snippet da oben soll ja nur als Denkanstoß dienen. Was verstehst du denn nicht?

    Desweiteren: Soetwas nennt man nicht Skript.

    Gruß Caipi


Anmelden zum Antworten