Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.net  
   

Die mobilen Seiten von c++.net:
https://m.c-plusplus.net

  
C++ Forum :: VCL (C++ Builder) ::  Tabellen vergelichen ?     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
rallyefan238
Mitglied

Benutzerprofil
Anmeldungsdatum: 13.09.2009
Beiträge: 7
Beitrag rallyefan238 Mitglied 22:07:00 13.07.2017   Titel:   Tabellen vergelichen ?            Zitieren

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
Code:
Mayer
Müller
Schmitt
Ostendrof


Tabelle 2
Code:
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 ?
DocShoe
Mitglied

Benutzerprofil
Anmeldungsdatum: 02.04.2008
Beiträge: 2713
Beitrag DocShoe Mitglied 08:58:38 14.07.2017   Titel:              Zitieren

1) falsches Forum, gehört nach C++ (auch wenn du mit dem Builder programmierst)
2) lies die CSV-Datei in eine passende Datenstruktur (falls es sich hierbei nicht um Millionen von Zeilen handelt):

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#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.

_________________
Die fünf häufigsten Anzeichen für Faulheit:
1.


Zuletzt bearbeitet von DocShoe am 09:00:39 14.07.2017, insgesamt 3-mal bearbeitet
C++ Forum :: VCL (C++ Builder) ::  Tabellen vergelichen ?   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.net ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.