Tabellen vergelichen ?
-
Ich steh gerade voll auf dem Schlauch und hoffe das ihr mir da helfen könnt.
Zur Verfügung stehen 2 Tabellen, Tabelle 2 ist mit den Werten aus einer CSV Dateien gefüllt.
In Tabelle 1 wird per Zufall eine Zeile ausgewählt.In Tabelle 2 sind die Spalten mit einem Komma getrennt.
Nun soll das Eregbnis aus Tabelle 1 in Spalte 2 von Tabelle 2 gesucht werden, bei einer Übereinstimmung soll der Inhalt aus Spalte 1 zurück gegeben werden.Beispiel.
Zufällig wird Zeile 2 ausgewähnt --> Müller
Nun soll in Tabelle 2 (Spalte2), also nach dem 1. Komma Müller gescht werden. Ist dies vorhanden wird alles bis zum 1. Komma zurück gegeben also Carsten.Tabelle 1
Mayer Müller Schmitt Ostendrof
Tabelle 2
Herbert, Gras, Hamburg David, Grün, Berlin Sebastian, Mayer, Dortmund Tobias, Schmitt, Essen Carsten, Müller, München
Bislang komme ich nur auf große 3-fach verschachtelte for-Schleifen mit jeweils mehreren switch/case.
Geht das nicht einfacher ?
-
- falsches Forum, gehört nach C++ (auch wenn du mit dem Builder programmierst)
- lies die CSV-Datei in eine passende Datenstruktur (falls es sich hierbei nicht um Millionen von Zeilen handelt):
#include <string> #include <vector> #include <algorithm> #include <functional> struct Person { std::string Vorname; std::string Nachname; std::string Wohnort; }; // Daten in Vektor einlesen std::vector<Person> read_file( const std::string& FileName ) { std::vector<Person> retVal; // Daten einlesen ... return retVal; } // die Suche kann jetzt mit std::find_if implementiert werden: // ab Builder 10 mit einem Lambda, davor mit einem Funktor // bis Builder 10 struct PersonEqualsName : std::binary_function<Person,std::string,bool> { bool operator()( const Person& lhs, const std::string& rhs ) const { return lhs.Nachname == rhs; } }; int main() { std::vector<Person> v = read_file( "...." ); std::string Name = "Müller"; std::cout << "Suche nach '" << Name << "'\n"; // bis Builder 10 std::vector<Person>::const_iterator pos = find_if( v.begin(), v.end(), std::bind2nd( PersonEqualsName(), Name ) ); if( pos != v.end() ) { std::cout << "Der Vorname der Person '" << Name << "' lautet '" << pos->Vorname << "'\n"; } else { std::cout << "Person '" << Name << "' wurde nicht gefunden.\n"; } // ab Builder 10 auto pos = find_if( v.begin(), v.end(), [&Name]( const Person& p ) { return p.Nachname == Name; } ); if( pos != v.end() ) { std::cout << "Der Vorname der Person '" << Name << "' lautet '" << pos->Vorname << "'\n"; } else { std::cout << "Person '" << Name << "' wurde nicht gefunden.\n"; } }
Falls du dich noch nicht mit den Datentypen und Algorithmen der STL auskennst ist jetzt ein guter Zeitpunkt damit anzufangen
Und da du im Builder Forum gepostet hast: benutz´ nicht die VCL Datentypen, sondern die C++ STL.