Vector wird nicht geleert
-
Hallo,
ich hab ein kleines Problem mit meinem Prog..
Das Programm soll eine Datei auslesen und dann je nach Bestimmung entweder die Nutzer mit oder ohne Telefonnummer anzeigen. Dabei soll es egal sein wie viele Datensätze in der Datei enthalten sind.
Ich hab mich für eine Lösung mittels Vektor entschieden, die auch soweit funktioniert.
Nur gibt es noch ein kleines Problem. Beim ersten Durchluaf funktioniert das Prog noch einwandfrei. Sobald jedoch der zweite Durchlauf gestartet wird, werden alle Datensätze doppelt angezeigt, bei dritten Durchlauf driefach usw..
Dies liegt wohl daran, dass bei jedem Durchlauf die Datei neu ausgelesen wird und das Ergebniss an den schon vorhandenen Vektor angefügt wird.
Kann mir bitte jemdand helfen, dass ich den Vektor wieder leer bekomme, bevor der neue Durclauf beginnt und damit die Datensätze auch beim zweiten, dritten usw. Auslesen nur einmal angezeigt werden?Ich danke Euc schonmal im Vorraus.
Hier der Quelltext:
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include <stdio.h> #include <io.h> #include <fcntl.h> #include <stdlib.h> #include <conio.h> #include <vector.h> #include "Telefonliste.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::I1Click(TObject *Sender) { ShowMessage("Dieses Programm wurde erstellt von:\n\nIngmar Wunderlich\nBWL\n022021/2\n\n__.__.2005"); } //--------------------------------------------------------------------------- void __fastcall TForm1::Beenden1Click(TObject *Sender) { ShowMessage("Vielen Dank für die Benutzung dieses Programmes"); exit(1); } //--------------------------------------------------------------------------- typedef struct { char Geb_tag[3]; char Name[21]; char Vorname[21]; char PLZ[7]; char Ort[21]; char Strasse[21]; char TelefonNr[8]; char Geburtsort[31]; } Tsatz; // using namespace std; vector<Tsatz> v(0); //offenbar bei Init.=0 15 Felder vorgegeben,Auffüllen ab //0.Stelle; sonst Auffüllen ab Stelle des Init-parameters bool operator< (const Tsatz &t1, const Tsatz &t2) { return (strcmp(t1.Name, t2.Name)<0);} typedef vector<Tsatz>::iterator iter; void __fastcall TForm1::RadioButton1Click(TObject *Sender) { int y=0; // Variable für die Listnummer int z=0; // Hilfsvaribale, um sicherzustellen, dass Listnr.(Name) aufsteigen int a=0; // Hilfsvaribale, um sicherzustellen, dass Listnr.(Telefonnr) aufsteigen int b=0; // Hilfsvaribale, um sicherzustellen, dass Listnr.(Ort) aufsteigen int handle; Tsatz h; _fmode=O_BINARY; //Datei im Bin„rmodus ”ffnen if ((handle=open("Auskunft.dtc",O_RDONLY))==-1) { printf("Datei kann nicht geöffnet werden \n"); getchar(); exit(1); } while (!eof(handle)) { read(handle,&h,sizeof(Tsatz)); v.push_back(h); //Anfügen am Ende } close(handle); ListBox1->Clear(); ListBox2->Clear(); ListBox3->Clear(); ListBox4->Clear(); sort(v.begin(), v.end()); for (iter i=v.begin();i!=v.end();i++) { if (strcmp(i->TelefonNr,"")!=0){ ListBox1->Items->Insert(y,i->Name); y++; ListBox2->Items->Insert(a,i->Vorname); a++; ListBox3->Items->Insert(b,i->Ort); b++; ListBox4->Items->Insert(z,i->TelefonNr); z++; }} Label5->Caption="Telefonnummer"; //Label5 wird mit Telefonnummer beschrifftet } //--------------------------------------------------------------------------- void __fastcall TForm1::RadioButton2Click(TObject *Sender) { int y=0; // Variable für die Listnummer int z=0; // Hilfsvaribale, um sicherzustellen, dass Listnr.(Name) aufsteigen int a=0; // Hilfsvaribale, um sicherzustellen, dass Listnr.(Telefonnr) aufsteigen int b=0; // Hilfsvaribale, um sicherzustellen, dass Listnr.(Ort) aufsteigen int handle; Tsatz h; _fmode=O_BINARY; //Datei im Binärmodus ”ffnen if ((handle=open("Auskunft.dtc",O_RDONLY))==-1) { printf("Datei kann nicht ge”ffnet werden \n"); getchar(); exit(1); } while (!eof(handle)) { read(handle,&h,sizeof(Tsatz)); v.push_back(h); //Anfügen am Ende } close(handle); ListBox1->Clear(); ListBox2->Clear(); ListBox3->Clear(); ListBox4->Clear(); sort(v.begin(), v.end()); for (iter i=v.begin();i!=v.end();i++) { if (strcmp(i->TelefonNr,"")==0){ ListBox1->Items->Insert(y,i->Name); y++; ListBox2->Items->Insert(a,i->Vorname); a++; ListBox3->Items->Insert(b,i->Ort); b++; ListBox4->Items->Insert(z,i->Strasse); z++; }} Label5->Caption="Strasse"; //Label5 wird mit Telefonnummer beschrifftet } //---------------------------------------------------------------------------
-
Hallo
ich hab mit den Code nur überflogen, aber die Elemente eines vectors kann man ganz schnell mit vector::clear() löschen.
bis bald
akari