Zum Inhalt springen

RoflCopter

Mitglieder
  • Gesamte Inhalte

    23
  • Benutzer seit

  • Letzter Besuch

Beiträge von RoflCopter

  1. Habe mich mit meiner abgeschlossenen FISI Ausbildung auch auf diverse IT-Stellen - wie auch auf Stellen als Vertriebsbeauftragter beworben. Schlussendlich habe ich als VB gearbeitet - möglich ist alles. Mal mit mehr oder weniger einarbeiten.

    Der wesentliche Punkt ist im ersten Step lediglich dein Auftreten und wie dich selbst verkaufst.

  2. Hallo Community,

    da ich das Gefühl habe mich im Kreis zu drehen, bitte ich euch um Hilfe bei folgender Aufgabenstellung:

    Zwecks Datenerfassung sollen je die ersten 7 Substrings "value=Wert" erfasst werden. Der restliche Inhalt ist irrelevant. Sobald diese erfasst sind - soll die nächste URL aufgerufen werden um selbige 7 Substrings und dessen Werte zur weiteren Verarbeitung einzulesen.

    Mittels substr_count - erhalte ich die Anzahl der im String vorkommenden Substrings (15).

    Meine Frage ist die folgende:

    Wie erhalte ich nur die ersten 7 Substrings aus dem String - der Rest ist praktisch irrelevant.

    Gibt es eventuell eine Funktion die mir das Leben erleichtert? Anbei mein bereinigter Code.

    Danke im Voraus.

    
    <?php    
    
    $id_hm_nr = 0;
    
    $seperator = "=";
    
    $url="https://hilfsmittel.gkv-spitzenverband.de/produktlisteZurArt_input.action?paramArtId=0";
    
    
    $pos = strpos($url, $seperator);
    
    
    while ($id_hm_nr <= 2) {
    
    	$id_hm_nr++;
    
    	$id_value_hm = 0;
    
    	$id_value_beschreibung = "";
    
    	$startpos = 0;
    
    	$i = 0;
    
    
    	$url_new = substr_replace($url, "=".$id_hm_nr, $pos);	
    
    	$filestream = file_get_contents($url_new);
    
    
    
    	$startpos = 0;
    
    	while($pos_val = strpos($filestream, "value=", $startpos)){		
    
    		$string = substr($filestream, $pos_val, strpos($filestream, " ", $pos_val + 1) - $pos_val);		
    
    		$startpos = $pos_val + 1;
    
    		$id_value_hm++;
    
    		echo $string."</br>";
    
    		echo "---------------------------------------------</br>";
    
    	}
    
    
    }
    
    ?> 
    
    
    

  3. Hallo zusammen,

    aus aktuellem Anlass erbitte ich euren Rat, um nicht im Nachgang strategische Fehlentscheidung bezüglich der Datenbankstruktur zu treffen, beziehungsweise im Nachgang korrigieren zu müssen.

    Mein jetziger AG arbeitet primär mit CSV Dateien und Excel Dateien. Dies soll sich im Zuge einer anstehenden Kooperation ändern. Die unzähligen Dateien sollen einer MySQL DB weichen (u.a. aus Kostengründen).

    Bei der Datenbankstruktur stellt sich nun primär die grundlegende Frage wie wir die Informationen zu den diversen "Herstellern", "Produkten" und "Produktgruppen" ablegen.

    Ich habe hierzu mehrere Ansätze - bin mir allerdings vollends nicht sicher welche Lösung die bessere ist. Eventuell habt ihr noch einen besseren Vorschlag?

    Anbei meine Ansätze und allgemeine Daten:

    ca. 240 Hersteller

    ca. 40 Produktgruppen

    Die Produktgruppen sind je Hersteller identisch, die Anzahl der zu versorgenden Produkgruppen richtet sich nach dem Vertrag.

    Pro Produktgruppe und Hersteller 1-x mögliche Artikel.

    In Summe gibt es ca. 260 mögliche Eigenschaften für die bis zu 40 Produktgruppen - je Produktgruppe sind es schlußendlich jedoch nur bis zu 30 Eigenschaften.

    Je Hersteller 1-x Verträge möglich.

    Es gibt Hersteller die a) einzeln auftreten und Produktgruppen regeln und B) Hersteller die einzeln und in einem Verbund auftreten und dort die gleichen /und/oder verschiedene Produktgruppen regeln.

    Ansatz a)

    Alles in eine große Tabelle "werfen" und anhand der Vertrags_ID, Hersteller_ID und der Artikel_ID differenzieren.

    Problem hierbei: Redundanzen, zusätzlich sind diverse Eigenschaften an den Hersteller z.b. Gewährleistungszeiträume oder Versorgungszeiträume gebunden. Hieße ich hätte oftmals unnötige oder unbenutze Felder & Spalten.

    Ansatz B)

    Für jeden Hersteller eine Tabelle erstellen und dort alle Produktgruppen und Artikel hinterlegen.

    Problem hierbei: Häufig leere/unbenutzte Felder - da Produktgruppenabhängig nicht alle Felder benötigt werden.

    Ansatz c)

    Für jeden Hersteller und dessen Produktgruppen eigene Tabellen anlegen.

    Problem hierbei: ca. 8600 mögliche - zu erstellende Tabellen

    Wir kommunizieren dies bezüglich bereits mit einem Dienstleister und dem Kooperationspartner - jedoch stehen weiterhin diese o.g. Varianten im Raum und es geht zur Zeit nicht vorran.

    Für jeglichen Hinweis oder Ratschlag bin ich sehr dankbar.

    Viele Grüße

    roflcopter

  4. Hallo zusammen,

    ich hoffe ich bin in dem Forum Anwendungssoftware richtig, ansonsten bitte ich um Nachsicht.

    Meine Aufgabe ist es mehrere Tausend Excel Zeilen/Datensätze abzugleichen. Die Aufgabe schildert sich wie folgt:

    Tabelle 1 beinhaltet ca. 15k Datensätze - diese Datensätze beinhalten gelegentlich Abkürzungen. Diese Abkürzungen sind wiederrum in Tabelle 2 aufgeschlüsselt.

    Nun möchte ich Spalte A in Tabelle 1 mit Spalte A der Tabelle 2 abgleichen um anschließend in Spalte D von Tabelle 1 den Text/Wert aus Spalte B von Tabelle 2 zu kopieren.

    Ich hatte bereits diverse Kombinationen und Formeln versucht wie beispielsweise WENN/VERWEIS/SVERWEIS etc. welche mir zwar die Information liefern "Wahr oder "Falsch"/"nicht vorhanden". Welche mir aber schlussendlich nicht weiter helfen. Eventuell habt ihr ein Konstrukt/eine Idee für mich parat die mir weiterhelfen könnte.

    Ich bedanke mich bereits jetzt im Voraus bei euch!

    Viele Grüße

  5. Hallo Community,

    ich würde gerne, bevor ich eine Datei öffne - prüfen ob diese vorhanden ist - klar dies geht mit (!if), aber gibt es eine Möglichkeit dies auch mit einem try {}, catch {} block zu regeln?

    Ebenso würde ich gerne bevor ich eine Datei erstelle prüfen ob genug Speicherplatz vorhanden ist, bzw. ob Rechte vorhanden sind / Ordner vorhanden ist.

    Mein Problem ist es, dass ich nicht weiß wie ich alle möglichen Fehler abfangen kann UND! den dazugehörigen Errorcode bzw. das was vom Betriebssystem ausgespuckt wird ( z.B. "Ordner existiert nicht" )

    Mein bisheriger Wissenstand:

    
    try {
    
      // Anweisungen welche Fehler verursachen können.
    
      // z.B. Division by Zero
    
      // int z1 = 2;
    
      // int z2 = 0;
    
      //z1 = z1 / z2;
    
    }
    
    
    catch (...) { // So weit ich gelesen habe steht "..." für alle //möglichen Fehler
    
    // Wie gebe ich hier den Fehlercode aus? Irgendwas mit  //err.description vll.?
    
    }
    
    

  6. Danke dir Klotzkopp, das war die Lösung. :bimei

    Diese gigantische Suchschleife war nicht mein Werk - bzw. diese wurd mir so als "optimal" vorgegeben.

    Ich solle lernen wie man "damals" ohne die "Super Funktionen etc. pp" klar kommen musste. Auf mein Argument, dass wir ihm HEUTE angekommen sind ging niemand ein.

    Bis ich den alt - eingesessenen Kollegen davon überzeugt habe werde ich wohl einiges an Berufserfahrung haben..

    Ebenfalls mit den lokalen Variablen - wird hier als "schlecht" und "unlesbar" etc. betitelt - kann mich da relativ schlecht gegen wehren. Es war schon schwer genug meinen Mitarbeiter ( welcher mir "helfen" soll ) dazu zu bringen, das wir das Copy à la char by char raus nehmen.

    Zu deinem Link haben diese mir übrigens nichts gesagt - pure Verblüffung kam ans Tageslicht und alle sind sich einen Kaffee holen gegangen..

    Nochmals danke an alle Beteiligten - scheinbar muss ich mehr auf mich hören und auch auf google bzw. diverse Foren :)

  7. Hallo Klotzkopp,

    danke dir für die Antwort - es funktioniert nun immerhin zu einem Teil. :)

    Die Erste eingelesene Zeile meiner .txt Datei wird korrekt ausgeführt, alle danach folgenden Zeilen werden fehlerhaft interpretiert.

    So wird z.B. in der .txt Datei angegeben durch den Operator "2" das die Datei gelöscht werden soll, dies passiert allerdings bei der Ersten Zeile ( wo es korrekt ist ) - aber auch alle nachstehenden Dokumente welche sich an

    anderen Orten befinden werden gelöscht

    ( es wird zumindest versucht, da es diese Dateien nicht gibt, da diese eigentlich erst dort hin kopiert werden )

    Wenn ich allerdings in der Ersten Zeile den Operator "1" für Kopieren verwende, versucht er sämtlichen nachfolgenden Zeilen ebenfalls zu kopieren. Welche im Ordner allerdings nicht existieren ( Zielordner ).

    Danke vorab für eure Hilfe.

    Edit: Ich werde den Code gleich anhängen.

    #include <iostream>
    
    #include <fstream> 
    
    #include <string> 
    
    #include <windows.h>
    
    #include <stdlib.h>
    
    #include <sstream> // token to op
    
    #include <cstdio> // remove 
    
    
    using namespace std;
    
    
    void fc_copyfile(string dn, string pad);
    
    void fc_append (string p, string& pad, string dn);
    
    void fc_action (int op, string dn, string pad, ofstream& log);
    
    void fc_com (void);
    
    
    
    
    int main() {
    
    
    	string p, dn, pad, gz, token;
    
    	stringstream ss (token, istringstream::in | istringstream::out);
    
    
    	int op = 0;
    
    	int i = 0;
    
    	int a = 0;	
    
    
    	// Filestream Log-File
    
    	ofstream log;
    
    	log.open("Logfile.txt", ios::trunc, ios::binary);
    
    
    	if(log.fail()) {
    
    
    		cout << "Konnte Logfile.txt nicht erstellen!" << endl;
    
    		cout << "Programm wird beendet..." << endl;
    
    		system("PAUSE");
    
    	}
    
    
    	else {
    
    		log << "Logfile wurde erstellt." << endl;
    
    	}
    
    
    
    	// Filestream csv-File
    
    	ifstream csv("csv.txt", ios::binary);
    
    
    	fc_com();
    
    
    	// Errorhandling csv-File
    
    	if(csv.fail()) {
    
    		log << "CSV-Datei nicht gefunden!" << endl;
    
    		cout << "CSV-Datei nicht gefunden!" << endl;
    
    		system("PAUSE");
    
    		exit (1);
    
    	}
    
    
    
    	// Einlesen von Zeile ( gz ) von csv, anschließend werden anhand ';' Tokens erstellt
    
    		while (!csv.eof()){
    
    
    
    			i = 0;
    
    			a = 0;
    
    
    			getline(csv, gz);
    
    
    			int e = gz.find(";", a);
    
    
    			while ( e > 0) {
    
    
    				token = gz.substr(a, e-a);
    
    				a = e + 1;		
    
    
    				e = gz.find(";", a);
    
    				i++;
    
    
    				switch(i) {
    
    					case 1 : p = token;
    
    					break;
    
    					case 2 : dn = token;
    
    					break;
    
    					case 3 : ss << token;
    
    							 ss >> op;
    
    
    
    					break;
    
    					default: log << "Operator unbekannt!" << endl;
    
    
    
    				}
    
    
    				token = gz.substr(a);
    
    			}	
    
    
    		fc_append(p, pad, dn); // String aneinander hängen
    
    		fc_action (op, dn, pad, log); // Löschen oder Kopieren
    
    
    		}
    
    
    
    	// Ausgabe Kommandobox
    
    	//cout << "Erfolgreich" << endl;
    
    	//log << "Erfolgreich" << endl;
    
    
    
    	system("PAUSE");
    
    	return 0;
    
    
    }
    
    
    
    
    
    
    void fc_action (int op, string dn, string pad, ofstream& log) {
    
    
    
    	switch (op) {
    
    
    		case 1 : if(pad.c_str()) {
    
    
    					fc_copyfile(dn, pad);
    
    					log << dn << " wurde kopiert" << endl;
    
    
    				 }
    
    
    				 else {
    
    
    					 log << dn << " Error.case1_op" << endl;
    
    
    				 }
    
    				 break;
    
    
    
    		case 2 : if(pad.c_str()) {
    
    
    					remove(pad.c_str());
    
    					log << dn << " wurde gelöscht" << endl;	
    
    
    				 } 
    
    				 else {
    
    
    					log << dn << " Error.case2_op" << endl; 				
    
    
    				 }	
    
    
    				 break;
    
    
    		default : log << op << " Operator unbekannt!" << endl;
    
    
    	}
    
    
    }
    
    
    
    
    void fc_copyfile(string dn, string pad) {
    
    
    
     ofstream outp(pad.c_str(), ios::binary);
    
     ifstream inp(dn.c_str(), ios::binary);
    
    
     if(inp.fail()) {
    
    	cout << "inp.failed.fc_copyfile" << endl;
    
     }
    
    
     if(outp.fail()) {
    
    	cout << "outp.failed.fc_copyfile" << endl;
    
     }
    
    
     // Datei kopieren
    
     outp << inp.rdbuf();
    
    
    }
    
    
    
    void fc_append (string p, string& pad, string dn) { // String aneinander hängen
    
    
    	pad = p;
    
    	pad += dn;
    
    
    }
    
    
    
    
    void fc_com (void) { // Text Kommandobox
    
    
    	cout << "Kopieren & Loeschen" << endl;
    
    
    }
    
    
    

  8. Hallo TDM,

    ja das war ein Punkt - ist mir vorhin auch aufgefallen und habe es nun geändert. String pad bekommt nun wieder den korrekten Inhalt.

    Dennoch habe ich noch bei "remove(pad.c_str())" einen Wurm drin - dieser löscht die Dateien nicht.

    Und über die Logfile reden wir erst gar nicht :D

  9. Ich habe den aktuellen Code im Debugger laufen lassen und mir ist aufgefallen das die Variable pad ( string ) keinen Inhalt bekommt.

    Das aktuelle Ergebnis ist Werk von Testen etc.

    #include <iostream>
    
    #include <fstream> 
    
    #include <string> 
    
    #include <windows.h>
    
    #include <stdlib.h>
    
    #include <sstream> // token to op
    
    #include <cstdio> // remove 
    
    
    using namespace std;
    
    
    void fc_copyfile(string dn, string pad);
    
    void fc_append (string p, string& pad, string dn);
    
    void fc_action (int op, string dn, string pad, ofstream& log);
    
    void fc_com (void);
    
    
    
    
    int main() {
    
    
    	string p, dn, pad, gz, token;
    
    	stringstream ss (token, istringstream::in | istringstream::out);
    
    
    	int op = 0;
    
    	int i = 0;
    
    	int a = 0;
    
    
    	ifstream csv;
    
    
    
    
    	fc_com();
    
    
    	// Filestream Log-File
    
    	ofstream log;
    
    	log.open("Logfile.txt", ios::trunc, ios::binary);
    
    
    	if(log.fail()) {
    
    
    		cout << "Konnte Logfile.txt nicht erstellen!" << endl;
    
    		cout << "Programm wird beendet..." << endl;
    
    		system("PAUSE");
    
    		exit(1);
    
    	}
    
    
    	else {
    
    		log << "Logfile wurde erstellt." << endl;
    
    	}
    
    
    
    
    	// Filestream csv-File
    
    	csv.open("csv.txt", ios::binary);
    
    
    	// Errorhandling csv-File
    
    	if(csv.fail()) {
    
    		log << "CSV-Datei nicht gefunden!" << endl;
    
    		cout << "CSV-Datei nicht gefunden!" << endl;
    
    		system("PAUSE");
    
    		exit (1);
    
    	}
    
    
    
    		while (!csv.eof()){
    
    
    			getline(csv, gz);
    
    			i = 0;
    
    			a = 0;
    
    
    
    			int e = gz.find(";", a);
    
    
    			while ( e > 0) {
    
    
    				token = gz.substr(a, e-a);
    
    				a = e + 1;		
    
    
    				e = gz.find(";", a);
    
    				i++;
    
    
    				switch(i) {
    
    					case 1 : p = token;
    
    					break;
    
    					case 2 : dn = token;
    
    					break;
    
    					case 3 : ss << token;
    
    							 ss >> op;
    
    
    
    					break;
    
    					default: log << "Operator unbekannt!" << endl;
    
    
    
    				}
    
    
    				token = gz.substr(a);
    
    			}	
    
    
    		fc_append(p, dn, pad); // String aneinander hängen
    
    		fc_action (op, dn, pad, log); // Löschen oder Kopieren
    
    
    		}
    
    
    
    	// Ausgabe Kommandobox
    
    	cout << "Erfolgreich" << endl;
    
    	log << "Erfolgreich" << endl;
    
    
    	// Filestreams schließen
    
    	csv.close();
    
    	log.close();
    
    
    
    	system("PAUSE");
    
    	return 0;
    
    
    }
    
    
    
    
    
    
    void fc_action (int op, string dn, string pad, ofstream& log) {
    
    
    	ifstream inp(dn.c_str(), ios::binary);
    
    	ofstream outp(pad.c_str(), ios::binary);
    
    
    	switch (op) {
    
    
    		case 1 : if(inp.fail()) {
    
    					log << dn << " konnte nicht gefunden werden." << endl;
    
    				 }
    
    
    				 else {
    
    					fc_copyfile(dn, pad);
    
    					log << dn << " wurde kopiert" << endl;
    
    				 }
    
    				 break;
    
    
    
    		case 2 : if(!outp) {
    
    					log << dn << " konnte nicht gefunden werden." << endl; 
    
    				 } 
    
    
    				 else {
    
    					remove(pad.c_str());
    
    					log << dn << " wurde gelöscht" << endl;
    
    				 }
    
    				 break;
    
    
    		default : log << op << " Operator unbekannt!" << endl;
    
    
    	}
    
    
    }
    
    
    
    
    void fc_copyfile(string dn, string pad) {
    
    
    
     ofstream outp(pad.c_str(), ios::binary);
    
     ifstream inp(dn.c_str(), ios::binary);
    
    
     if(inp.fail()) {
    
    	cout << "inp.failed.fc_copyfile" << endl;
    
     }
    
    
     if(outp.fail()) {
    
    	cout << "outp.failed.fc_copyfile" << endl;
    
     }
    
    
     // Datei kopieren
    
     outp << inp.rdbuf();
    
    
    }
    
    
    
    void fc_append (string p, string& pad, string dn) { // String aneinander hängen
    
    
    	pad = p;
    
    	pad += dn;
    
    
    }
    
    
    
    
    void fc_com (void) { // Text Kommandobox
    
    
    	cout << "Kopieren & Loeschen" << endl;
    
    
    }
    
    

  10. fc_action ( int op, string dn, string pad, ofstream& log );

    Am Aufruf ändert sich nichts.

    So habe ich es getan, allerdings verlangt der Compiler ein weiteres Argument beim Funktionsaufruf.

    Das ursprüngliche Problem, das die Dateien nicht kopiert bzw. gelöscht werden bleibt allerdings fortbestehen.

    Gibt es eine Möglichkeit etwaige Fehler(codes) in einer Variable zu speichern und diese dann anzeigen zu lassen?

    Beispielsweise "noAccess" oder so, so dass ich meine Funktionen durchtesten kann wo es hapert. Denn der Compiler meckert nicht.

    Ich habe etwas von Exeptions gelesen, denke allerdings nicht, dass ich damit auf dem richtigen Weg bin.

  11. richtig, ein int und zwei strings müssen übergeben werden

    Das heißt dann, dass meine Funktion mit einer Kopie arbeitet?

    Das ist wieder eine Funktionsdeklaration, versuchs mal ohne die Typen.

    Hat geklappt danke - ist es möglich Filestreams zu übergeben? Der Compiler hat mir als ich in der Deklaration fc_action ( int op, string dn, string pad, ofstream log );

    hatte massiv gemeckert.

  12. Eine bescheide Frage aber nun denn..

    wenn ich die Variablen nun alle lokal anstatt global verwende, muss ich diese ja auch an die Funktionen übergeben.

    Wenn ich allerdings schreibe:

    void fc_action ( int op, string dn, string pad ); // Funktionsprototyp

    und beim Funktionsaufruf fc_action(); schreibe spuckt der Compiler mir die Meldung aus, dass fc_action(); "Akzeptiert keine 0 Argumente" - daraus lässt sich schließen, dass ich die Variablen auch in den Funktionsaufruf schreiben müsste also:

    fc_action ( int op, string dn, string pad );

    Aber auch da meckert er mit Fehler "error C2660: 'fc_action': Funktion akzeptiert keine 0 Argumente"

    Ich weiß, dass das eine relativ lächerliche Frage ist - aber die Ausbildungsumstände sind nicht gerade gut da mir u.a. keine Fragen beantwortet werden - danke vorab für eure Hilfe.

    Edit: Habe es glaub ich selber rausgefunden - beim Funktionsaufruf muss man den Datentyp nicht mit angeben.

  13. Ich war ebenfalls der Meinung, dass ich die Streams nicht manuell zu schließen bzw. zu öffnen brauche - aber meine Mitarbeiter waren da anderer Meinung - haben es als schlechten Stil angesehen ( ich bin Azubi im 2. LJ )

    Schonmal danke für deine Hilfe, ich werde mich nun darum kümmern die globalen Variablen weg zu bekommen ;)

    Edit: Wie sieht es mit den Filestreams wie "log" aus - sollte ich diese auch lokal verwenden oder global?

  14. Konnte die Anforderungen zwar erfüllen - allerdings habe ich ein Fachabitur in Wirtschaft & Verwaltung - welches mir bei vielen Unternehmen zur Absage verholfen hat.

    Dennoch musst du dich nicht danach richten, wie schon wer vor mir gesagt hat - kommt es erstens auf die Wünsche des jeweiligen Unternehmens an - und zweitens, wie gut du dich "verkaufen" kannst.

  15. Danke dir, hätte nicht gedacht, dass es so einfach zu realisieren ist :)

    Konnte den Beitrag leider nicht editieren, entschuldigt bitte den Doppelpost.

    Ich habe die Sache mit dem rdbuf einfach realisieren können, das mit dem remove auch. Allerdings kopiert bzw. löscht das Programm nicht wie gewünscht die Dateien. Ich habe es im Debugger geprüft, alle Variablen beinhalten den gewünschten String bzw. Wert.

    Ich habe zur Sicherheit eine Variable Test hinzugefügt um sicher gehen zu können, dass es nicht am Operator liegt.

    Anbei der Code.

    #include <iostream>
    
    #include <fstream> 
    
    #include <string> 
    
    #include <windows.h>
    
    #include <stdlib.h>
    
    #include <sstream> // token to op
    
    #include <cstdio> // remove 
    
    
    
    using namespace std;
    
    
    
    void fc_copyfile(string dn, string pad);
    
    void fc_append ();
    
    void fc_action();
    
    void fc_com ();
    
    
    
    // global
    
    string p, dn, pad, gz, token;
    
    stringstream ss (token, istringstream::in | istringstream::out);
    
    int op;
    
    ofstream log, outp;
    
    ifstream inp;
    
    
    
    
    int main() {
    
    
    	fc_com();
    
    
    	int i = 0;
    
    	int a = 0;
    
    
    	ifstream csv;
    
    
    	// Filestream Log-File
    
    	log.open("Logfile.txt", ios::trunc, ios::binary); // finish
    
    	log << "Logfile wurde erstellt." << endl;
    
    
    	// Filestream csv-File
    
    	csv.open("csv.txt", ios::binary);
    
    
    	// Errorhandling csv-File
    
    	if(!csv) {
    
    		log << "CSV-Datei nicht gefunden!" << endl;
    
    		csv.close();
    
    		log.close();
    
    		cout << "CSV-Datei nicht gefunden!" << endl;
    
    		system("PAUSE");
    
    		exit (1);
    
    	}
    
    
    
    		while (!csv.eof()){
    
    
    			getline(csv, gz);
    
    			i = 0;
    
    			a = 0;
    
    
    
    			int e = gz.find(";", a);
    
    
    			while ( e > 0) {
    
    
    				token = gz.substr(a, e-a);
    
    				a = e + 1;		
    
    
    				e = gz.find(";", a);
    
    				i++;
    
    
    				switch(i) {
    
    					case 1 : p = token;
    
    					break;
    
    					case 2 : dn = token;
    
    					break;
    
    					case 3 : ss << token;
    
    							 ss >> op;
    
    
    
    					break;
    
    					default: log << "Operator unbekannt!" << endl;
    
    
    
    				}
    
    
    				token = gz.substr(a);
    
    			}	
    
    
    		fc_append(); // String aneinander hängen
    
    		fc_action(); // Löschen oder Kopieren
    
    
    		}
    
    
    
    	// Ausgabe Kommandobox
    
    	cout << "Erfolgreich" << endl;
    
    	log << "Erfolgreich" << endl;
    
    
    	// Filestreams schließen
    
    	csv.close();
    
    	log.close();
    
    
    
    	system("PAUSE");
    
    	return 0;
    
    
    }
    
    
    
    
    
    
    void fc_action () {
    
    
    
    	int test = 1; // zum Testen
    
    
    	switch (test) { // << Hier normalerweise op
    
    
    		case 1 : if(!inp) {
    
    					log << dn << " konnte nicht gefunden werden." << endl;
    
    				 }
    
    
    				 else {
    
    					fc_copyfile(dn, pad);
    
    					log << dn << " 1.copyfile wurde kopiert" << endl;
    
    				 }
    
    				 break;
    
    
    
    		case 2 : if(!outp) {
    
    					log << dn << " konnte nicht gefunden werden." << endl; 
    
    				 } 
    
    
    				 else {
    
    					remove(pad.c_str());
    
    					log << dn << " 2.remove wurde gelöscht" << endl;
    
    				 }
    
    				 break;
    
    
    		default : log << op << " Operator unbekannt!" << endl;
    
    
    	}
    
    
    }
    
    
    
    
    void fc_copyfile(string dn, string pad) {
    
    
    
      ofstream outp;
    
      ifstream inp;
    
    
      // Filestreams öffnen
    
      inp.open(dn.c_str(), ios::binary);
    
      outp.open(pad.c_str(), ios::binary);
    
    
      // Datei kopieren
    
      outp << inp.rdbuf();
    
    
      // Filestreams schließen
    
      outp.close();
    
      inp.close();
    
    
    }
    
    
    
    void fc_append () { // String aneinander hängen
    
    
    	pad = p;
    
    	pad += dn;
    
    
    }
    
    
    
    
    void fc_com () { // Text Kommandobox
    
    
    	cout << "Kopieren und Löschen" << endl;
    
    
    }

  16. Hallo Klotzkopp,

    danke dir für deine Antwort. Den Part mit dem "remove" konnte ich relativ zügig lösen.

    
    		case 2 : if(!outp) {
    
    					log << dn << " not found, can't delete the file." << endl; 
    
    				 } 
    
    
    				 else {
    
    					remove(pad.c_str());
    
    					log << dn << " deleted" << endl;
    
    				 }
    
    
    Allerdings macht mir der Part mit "rdbuf" etwas zu schaffen, trotz google und msdn - es scheint mir so als ob rdbuf eine Umleitung ist? Quelle: basic_ios::rdbuf
    
    // basic_ios_rdbuf.cpp
    
    // compile with: /EHsc
    
    #include <ios>
    
    #include <iostream>
    
    #include <fstream>
    
    
    int main( ) 
    
    {
    
       using namespace std;
    
       ofstream file( "rdbuf.txt" );
    
       streambuf *x = cout.rdbuf( file.rdbuf( ) );
    
       cout << "test" << endl;   // Goes to file
    
       cout.rdbuf(x);
    
       cout << "test2" << endl;
    
    }
    
    

  17. Hallo Community,

    nach mehr oder wenig kurzer Suche ( google ) bin ich auf einen Beitrag von diesem Forum gefunden, wie man einen String zu einem Integer umwandeln kann ( C++ )

    Dies soll mit "istringstream" funktionieren, ich habe mir das Bsp. welches ich unter der Sufu gefunden habe bei Seite genommen und mal selber ausprobiert. Dennoch scheint mein Programm nicht zu funktionieren.

    Ich habe die Aufgabe ein Programm in C++ zu schreiben, welches aus einer .txt Datei komplette Zeilen einliest.

    Diese Zeile soll dann anhand der vorhandenen Trennzeichen ';' in Substrings gesplittet werden.

    Die 3 Substrings lauten:

    p = pfad

    dn = dateiname

    op = operator

    Anhand des Operators soll eine Aktion ausgeführt werden - Löschen oder Kopieren.

    Eventuelles Errorhandling steht noch nicht auf dem Plan.

    Das Problem ist, dass der gewünschte Effekt sprich: Datei kopiert oder Datei gelöscht nicht eintritt.

    Beispiel zum Inhalt der . txt Datei:

    D:\Test\;hallo_welt.txt\;2

    Anbei der Quellcode

    #include <iostream>
    
    #include <fstream> 
    
    #include <string> 
    
    #include <windows.h>
    
    #include <stdlib.h>
    
    #include <sstream>
    
    
    using namespace std;
    
    
    void fc_copyfile(string in, string out);
    
    void fc_append ();
    
    void fc_action();
    
    void fc_com ();
    
    
    
    // global
    
    
    string p, dn, pad, gz, token;
    
    stringstream ss (token, istringstream::in | istringstream::out);
    
    int op;
    
    ofstream log;
    
    
    
    int main() {
    
    
    	fc_com();
    
    
    	int i = 0;
    
    	int a = 0;
    
    
    	ifstream csv;
    
    
    
    
    	log.open("Logfile.txt", ios::trunc, ios::binary);
    
    	log << "Logfile created" << endl;
    
    
    	csv.open("csv.txt", ios::binary);
    
    
    	if(!csv) {
    
    		log << "csv.txt not found." << endl;
    
    		csv.close();
    
    		log.close();
    
    		exit (1);
    
    	}
    
    
    
    
    
    
    
    		while (!csv.eof()){
    
    
    			getline(csv, gz);
    
    			i = 0;
    
    			a = 0;
    
    
    
    			int e = gz.find(";", a);
    
    
    			while ( e > 0) {
    
    
    				token = gz.substr(a, e-a);
    
    				a = e + 1;		
    
    
    				e = gz.find(";", a);
    
    				i++;
    
    
    				switch(i) {
    
    					case 1 : p = token;
    
    					break;
    
    					case 2 : dn = token;
    
    					break;
    
    					case 3 : ss << token;
    
    							 ss >> op;
    
    
    
    					break;
    
    					default: log << "Operator unknown!" << endl;
    
    
    
    				}
    
    
    				token = gz.substr(a);
    
    			}	
    
    
    		fc_append();
    
    		fc_action();
    
    
    		}
    
    
    	log << "Finished" << endl;
    
    
    	csv.close();
    
    	log.close();
    
    
    
    	system("PAUSE");
    
    	return 0;
    
    
    }
    
    
    
    
    
    
    
    
    void fc_action () { // copy or delete
    
    
    	switch (op) {
    
    
    		case 1 : fc_copyfile(dn, pad);
    
    				 log << dn << " copied" << endl;
    
    		case 2 : BOOL WINAPI DeleteFile( __in  LPCTSTR pad);
    
    				 log << dn << " deleted" << endl;
    
    		default : log << "Operator unknown!" << endl;
    
    
    	}
    
    
    }
    
    
    
    
    void fc_copyfile(string in, string out) { // copy char by char ( binary mode )
    
    
    	ifstream inp;
    
    	ofstream outp;
    
    
    	char c;
    
    
    	inp.open(in.c_str(), ios::binary);
    
    	outp.open(out.c_str(), ios::binary);
    
    
    	while(inp.get(c) && !inp.eof()){
    
    		outp.put(c);
    
    
    	}
    
    }
    
    
    
    
    void fc_append () {  // copy content of p to pad, append dn at pad ( p + dn )
    
    
    	pad = p;
    
    	pad += dn;
    
    
    }
    
    
    
    
    void fc_com () {  // text
    
    
    	cout << "Copy and Delete" << endl;
    
    	cout << "Read the Logfile.txt for further details" << endl;
    
    
    }
    
    

    Ich danke im Voraus für eure Hilfe.

    P.S.: Sorry fürs falsche Forum - ist mit gerade eben erst aufgefallen! Bitte verschieben.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...