zeichen in txt datei suchen



  • 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


Anmelden zum Antworten