zeichen in txt datei suchen
-
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