zeichen in txt datei suchen



  • hallo ihr lieben,

    Also ich muss in einer txt datei nah einem bestimmten zeichen suchen, welches in meinem fall ein ; ist!
    Das problem an der sache ist noch ich muss alles nachfolgende bis zum ende der zeile ausgeben und alle ausdrücke die doppelt sind nur einmal ausgeben

    hier einmal den inhalt der txt datei:

    client0;client
    client1;client
    client2;client
    client3;client
    client4;client
    client5;client
    client6;client
    server0;server
    server1;server
    server2;server
    server3;server
    server4;server
    server5;server
    server6;server

    Ich hoffe ihr könnt mir helfen

    mit freundlichen grüßen sweetheart



  • Also ich bin jetzt ja noch nicht so lange in diesem Forum unterwegs, aber das klingt gerade eher so, dass dir andere die Aufgabe lösen sollen. Ich weiß nicht, ob das im Sinne des Erfinders ist.



  • also ich habe ja auch schono angefangen aber ich komme im mom einfach nicht so richtig weiter



  • Na dann wäre es ein Erster Schritt,wenn du uns einfach zeigst was du schon gemacht hast, denn auf schon angefangen Code aufzubauen ist einfacher als ihn von Grund auf neu zuschreiben(nagut, nicht immer)!



  • # include <iostream>
    # include <stdio.h>
    # include <stdlib.h>
    # include <time.h>
    # include <stdio.h>
    # include <string>
    # include <algorithm>
    # include <fstream>
    # include <conio.h>
    const int SIZE=150;
    int main (int argc, char *argv)
    {
    ifstream   file;
    int 		  x;                                         //Deklaration der Variablen x
    int 		  Nummer;                                    //Deklaration der Variablen Nummer
    char  	  sText[SIZE],sZeile[1024],sHost[100];       //Deklaration der Felder sText,sZeile,sHost
    cout<< ("Mit diesem Programm werden Ihr Net Send Messages versenden!\n");
    cout<< ("\n\n...Weiter mit der Enter-Taste...\n\n");
    getchar();                                            //Wartet auf die Eingabe der Entertaste
    cout<<"\nBitte waehlen sie, wem sie eine Nachricht schicken moechten!\n\n1= Gruppe waehlen\n\n2= Einzelne Personen waehlen\n\n";
    cin>>x;                                               //Eingabe der Nummer für die Auswahl ob Gruppe oder Benutzer
    if(x==1)                                              //Auswahl ob gruppe(1)oder benutzer(2)
    {                                                     //Auswahl der Gruppe
    using namespace std;
    int length;                                           //Deklarieren der Variable length
    char * buffer;                                        //Deklarieren der Variable buffer
    ifstream is;
    is.open ("abf_User.txt", ios::binary );               //öffnung der Datei
    is.seekg (0, ios::end);
    length = is.tellg();                                  //Zuweisung das length =is.tellg ist
    is.seekg (0, ios::beg);
    buffer = new char [length];
    is.read (buffer,length);                              //lese daten als block:
    is.close();                                           //schließen der Datei
    cout.write (buffer,length);                           //Ausgabe der Variablen buffer und length
    delete[] buffer;                                      //Löschen der Variable buffer
    cout<<"\n\n\nBitte waehle Sie durch den Namen eine der folgenden Abteilungen aus!!\n\n";
    cin >>Nummer;                                         //Eingabe der Abteilungsnummer
    cout<<"\n\n";
    cout<<"\n\n";
    if (Nummer==1)                                        //Abfrage ob die eingegebene Nummer =1 ist
    {
    using namespace std;
    int length;                                           //Deklarieren der Variable length
    char * buffer;                                        //Deklarieren der Variable buffer
    ifstream is;
    is.open ("abf_User.txt", ios::binary );               //öffnen der Datei
    is.seekg (0, ios::end);
    length = is.tellg();                                  //Zuweisung das length =is.tellg ist
    is.seekg (0, ios::beg);
    buffer = new char [length];
    is.read (buffer,length);                              //lese daten als block:
    is.close();                                           //schließen der Datei
    cout.write (buffer,length);                           //Ausgabe der Variablen buffer und length
    delete[] buffer;                                      //Löschen der Variable buffer
    fstream f;                                            //öffnet die Datei
    f.open("abf_User.txt", ios::out|ios::app);       		//Datei "abf_User.txt" öffnen
    f << "Nummer" << endl;
    f.close();                                            //schließt die Datei
    ifstream h;
    string s;
    h.open("abf_User.txt", ios::in);                      //öffnet die Datei
    
    cin.get() ;
    cout<<"Bitte Text eingeben!";                         //Hier muss der Text eingegeben werden
    cin >> sText;
    cin.getline(sText,SIZE);
    sText[SIZE-1]=0;
    }
    if(x==2)                                              //Abfrage ob die eingegebene Nummer =2 ist
    {
    cout<<"Bitte waehlen sie den Benutzer aus";
    cout<<"\n\n\nBitte Text eingeben!";                   //Hier muss der Text eingegeben werden
    cin >> sText;
    cin.getline(sText,SIZE);
    sText[SIZE-1]=0;
    }
    if(x>=3||x<=0)                                        //Abfrage ob die eingegebene Zahl größer gleich 3 oder kleiner gleich 0
    {
    cout<< "\n\n\nFalsche Eingabe\n\n\n";
    cout<< "Bitte das Programm neu starten";
    }
    }
    cin.seekg(0,ios::end);
    sprintf (sZeile, "net send %s %s", sHost, sText);     //Net send Befehl
    system  (sZeile);
    fflush(stdin);
    getchar();
    getch();
    }
    


  • in dem block 22-40 möchte ich gerne ein Simikolon aus der text datei suchen und das was danach steht ausgeben



  • So ohne das ich mir das jetzt durchlesen will, gebe ich dir folgenden Tip. Du bist hier im C++ Forum, bitte schreibe den Code auch C++ Konform.Weiterhin solltest du überlegen die Datei in einem std::vector<T> einzulesen und diesen dann systematisch zu bearbeiten. als nächstes noch der Tip. Wenn du ein Problem hier im Forum stellst, bitte Poste nur den Code wo du Probleme hast und nicht ads ganze Programm, das bring etwas mehr Übersicht 😉 Denn so wie dein Code eingerückt ist, liest sich das keiner durch.



  • 1. Ich weiss nicht, wie oft ich/wird dir das schon gesagt haben, aber rück deinen Code ein.

    2. Beschreib mal genau, was dein Problem ist und und wo genau dein Problem ist. Wenn du nicht fähig bist dein Problem einzuschränken, musst du einfachere Beispiele nehmen und/oder nochmal von Anfang an lernen.



  • also hier erst mal der code:

    # include <stdio.h>
    # include <stdlib.h>
    # include <time.h>
    # include <stdio.h>
    # include <string>
    # include <algorithm>
    # include <fstream>
    # include <conio.h>
    const int SIZE=150;
    int main (int argc, char *argv)
    {
    	ifstream   file;
    	int 		  x;                                         //Deklaration der Variablen x
    	int 		  Nummer;                                    //Deklaration der Variablen Nummer
    	char  	  sText[SIZE],sZeile[1024],sHost[100];       //Deklaration der Felder sText,sZeile,sHost
    	cout<< ("Mit diesem Programm werden Ihr Net Send Messages versenden!\n");
    	cout<< ("\n\n...Weiter mit der Enter-Taste...\n\n");
    	getchar();                                            //Wartet auf die Eingabe der Entertaste
    	cout<<"\nBitte waehlen sie, wem sie eine Nachricht schicken moechten!\n\n1= Gruppe waehlen\n\n2= Einzelne Personen waehlen\n\n";
    	cin>>x;                                               //Eingabe der Nummer für die Auswahl ob Gruppe oder Benutzer
    	if(x==1)                                              //Auswahl ob gruppe(1)oder benutzer(2)
    		{                                                     //Auswahl der Gruppe
    		 using namespace std;
    		 int length;                                           //Deklarieren der Variable length
    		 char * buffer;                                        //Deklarieren der Variable buffer
    		 ifstream is;
    		 is.open ("abf_User.txt", ios::binary );               //öffnung der Datei
    		 is.seekg (0, ios::end);
    		 length = is.tellg();                                  //Zuweisung das length =is.tellg ist
    		 is.seekg (0, ios::beg);
    		 buffer = new char [length];
    		 is.read (buffer,length);                              //lese daten als block:
    		 is.close();                                           //schließen der Datei
    		 cout.write (buffer,length);                           //Ausgabe der Variablen buffer und length
    		 delete[] buffer;                                      //Löschen der Variable buffer
    		 cout<<"\n\n\nBitte waehle Sie durch den Namen eine der folgenden Abteilungen aus!!\n\n";
    		 cin >>Nummer;                                         //Eingabe der Abteilungsnummer
    		 cout<<"\n\n";
    		 cout<<"\n\n";
    		 if (Nummer==1)                                        //Abfrage ob die eingegebene Nummer =1 ist
    		 	{
    		 	 using namespace std;
    		 	 int length;                                           //Deklarieren der Variable length
    		 	 char * buffer;                                        //Deklarieren der Variable buffer
    		 	 ifstream is;
    		 	 is.open ("abf_User.txt", ios::binary );               //öffnen der Datei
    		 	 is.seekg (0, ios::end);
    		 	 length = is.tellg();                                  //Zuweisung das length =is.tellg ist
    		 	 is.seekg (0, ios::beg);
    		 	 buffer = new char [length];
    		 	 is.read (buffer,length);                              //lese daten als block:
    		 	 is.close();                                           //schließen der Datei
    		 	 cout.write (buffer,length);                           //Ausgabe der Variablen buffer und length
    		 	 delete[] buffer;                                      //Löschen der Variable buffer
    		 	 fstream f;                                            //öffnet die Datei
    		 	 f.open("abf_User.txt", ios::out|ios::app);       		//Datei "abf_User.txt" öffnen
    		 	 f << "Nummer" << endl;
    		 	 f.close();                                            //schließt die Datei
    		 	 ifstream h;
    		 	 string s;
    		 	 h.open("abf_User.txt", ios::in);                      //öffnet die Datei
                  cin.get() ;
    		 	 cout<<"Bitte Text eingeben!";                         //Hier muss der Text eingegeben werden
    		 	 cin >> sText;
    		 	 cin.getline(sText,SIZE);
    		 	 sText[SIZE-1]=0;
    		 	}
    		 if(x==2)                                              //Abfrage ob die eingegebene Nummer =2 ist
    		   {
    		 	 cout<<"Bitte waehlen sie den Benutzer aus";
    		 	 cout<<"\n\n\nBitte Text eingeben!";                   //Hier muss der Text eingegeben werden
    		 	 cin >> sText;
    		 	 cin.getline(sText,SIZE);
    		 	 sText[SIZE-1]=0;
    		   }
    		 if(x>=3||x<=0)                                        //Abfrage ob die eingegebene Zahl größer gleich 3 oder kleiner gleich 0
    		   {
    		 	 cout<< "\n\n\nFalsche Eingabe\n\n\n";
    		 	 cout<< "Bitte das Programm neu starten";
    		   }
    		}
    	cin.seekg(0,ios::end);
    	sprintf (sZeile, "net send %s %s", sHost, sText);     //Net send Befehl
    	system  (sZeile);
    	fflush(stdin);
    	getchar();
    	getch();
    }
    

    mein problem ist jetzt das ich ein zeichen aus der datei abf_User.txt suchen möchte und alles was hinter diesem gesuchten Zeichen steht ausgeben möchte bis die zeile zu ende ist



  • 😮 🙄

    drakon schrieb:

    2. Beschreib mal genau, was dein Problem ist und und wo genau dein Problem ist. Wenn du nicht fähig bist dein Problem einzuschränken, musst du einfachere Beispiele nehmen und/oder nochmal von Anfang an lernen.

    Wieso hälst du dich nicht dran?Gibt es irgendeine Stelle bei dir im Code wo du nicht weiter kommst? Wenn ja, begrenze denen geposteten Code nur auf diese Stelle.
    Weiterhin bist du immernoch im C++ Forum, willst du es nun in C machen oder C++? Aber bitte vermisch nicht beides.



  • [code]    if(x==1)                                              //Auswahl ob gruppe(1)oder benutzer(2)
            {                                                     //Auswahl der Gruppe
             using namespace std;
             int length;                                           //Deklarieren der Variable length
             char * buffer;                                        //Deklarieren der Variable buffer
             ifstream is;
             is.open ("abf_User.txt", ios::binary );               //öffnung der Datei
             is.seekg (0, ios::end);
             length = is.tellg();                                  //Zuweisung das length =is.tellg ist
             is.seekg (0, ios::beg);
             buffer = new char [length];
             is.read (buffer,length);                              //lese daten als block:
             is.close();                                           //schließen der Datei
             cout.write (buffer,length);                           //Ausgabe der Variablen buffer und length
             delete[] buffer;                                      //Löschen der Variable buffer
             cout<<"\n\n\nBitte waehle Sie durch den Namen eine der folgenden Abteilungen aus!!\n\n";
             cin >>Nummer;                                         //Eingabe der Abteilungsnummer
             cout<<"\n\n";
             cout<<"\n\n";[/code]
    

    Also in diesem teil möchte ich gerne ein Simikolon abfragen, welches in der datei als trennzeichen zwischen benutzer und gruppe dient!
    ich möchte alles was hinter dem Simikolon steht also die gruppe ausgeben damit man sich zwischen den einzelnen gruppen entscheiden und sie auswählen kann.

    ich weis jetzt aber nicht wie ich daran gehen soll damit das so klappt



  • Mach dich mit std::getline, std::set und std::string vertraut. Danach ist das Lesen von Zeilen in der Text-Datei, das Aussortieren von doppelten Strings und das Finden der entsprechenden Stellen in den Zeilen kein Problem mehr.

    Viele Grüße



  • std::vector<T>
    Damit solltest du alles bewerkstelligen können was du machen möchtest.Oder vielleicht hilft dir sogar std::map<T,T>.

    + das was Decimad gesagt hat 😃



  • danke für eure hilfe ich werd mich damit mal auseinander setzen und bei fragen meld ich mich nochmal



  • Achso, und wenn du trotz der guten Dokumentation, die man soch finden kann, Fragen zu dem Umgang mit den genannten Klassen hast, dann kannst Du diese hier natürlich stellen. Dann haben wir einen Ansatzpunkt, dir zu helfen ohne dabei das Gefühl zu haben, dir die Aufgabe zu lösen.

    Viele Grüße



  • Hallo _sweetheart_,

    aus Deinem Code lese ich, dass Du die Datei auf die Konsole (cout) ausgibst und anschließend mit anderen Daten beschreibst.
    Die Ausgabe einer Datei erreichst Du sehr viel einfacher mit:

    #include <fstream>
    #include <iostream>
    
    int main()
    {
        using namespace std;
        ifstream is("input.txt");
        cout << is.rdbuf();
        return 0;
    }
    

    Zu Deinem beschriebenen Problem; alles ignorieren bis zu einem bestimmten Zeichen geht mit ignore. Den Rest einer Zeile einlesen kann man mit getline in einen std::string hinein, wobei es immer besser ist, Du liest das - mit den Typen - was Du brauchst. Und das scheint in Deinem Fall das Wort 'client' oder 'server' zu sein. Also:

    #include <fstream>
    #include <iostream>
    #include <limits>
    #include <string>
    
    int main()
    {
        using namespace std;
        ifstream is("input.txt");  // ohne binary, da Text gelesen wird
        string client_or_server;
        if( is.ignore( numeric_limits< streamsize >::max(), ';' ) >> client_or_server )
        {
            // --   Das Wort hinter ';' korrekt gelesen
            cout << "da stand: " << client_or_server << endl;
        }
        return 0;
    }
    

    :xmas2: Werner



  • hallo ihr lieben

    also ich habe mich mit dem ignorieren bis zu einem bestimmten zeichen lange befasst ich hab jetzt mal ne frage an euch

    [code]using namespace std;
    void main (void)
    {
     cout<<"Mit diesem Programm koennen Net Send Messages geschrieben werden!!\n\nBitte Enter druecken!!!\n";
     getchar();
     int 				iAnzahl,x=20;
     int 				iX;
     char 			sText[255],first,last;
     char 			sZeile[1024];
     char 			sHost[32];
     char 			zeile [100]; 	// Zeile max 121 Zeichen
     string 			Seite[401];  // Datei Max 100 Zeilen
     system 			("cls");
     cout<<  "Bitte Gruppenname eingeben!\n\n";
     ifstream dateiLese ("abf_UserExport.txt"); // Eingabe Datei
     if (dateiLese)
      {
       int i=0,z=1;   // solange die Zeile nicht leer ist
       while(dateiLese.getline (zeile, 50))
        {
         // Zeile lesen
         Seite[i]=zeile;
         i++;
         cout <<z<<".)"<< zeile<<"\n";
         z++;
        if (z==200)
         {
          cout <<"\nBitte Enter druecken um weitere zu sehen\n";
          getchar();
         }
     	  if( is.ignore( numeric_limits< streamsize >::max(), ';' ) >> Gruppe )
          {
       	 string Gruppe;
        	 cin.ignore (x,';')  ;
       	 // --   Das Wort hinter ';' korrekt gelesen
           cout << "da stand: " << Gruppe ;
          }
        }
      }
      dateiLese.close (); // Datei schliessen
    

    [/code]

    wieso funktioniert die geschichte mit dem ignore nicht kann mir da vllt jemand helfen?



  • sweetheart schrieb:

    wieso funktioniert die geschichte mit dem ignore nicht kann mir da vllt jemand helfen?

    Nein, ich glaube nicht mehr daran, dass wir Dir helfen können.

    Das Problem ist, dass _sweetheart_ weder unsere Antworten liest (siehe hier)

    sweetheart schrieb:

    ifstream dateiLese ("abf_UserExport.txt"); // Eingabe Datei
    // ...
     	  if( is.ignore( numeric_limits< streamsize >::max(), ';' ) >> Gruppe )
    

    ... noch die Fehlermeldungen des Compilers (siehe Code oben; Variablen 'dateLese' und 'is').

    :xmas2: Werner


Log in to reply