Zum Inhalt springen

RoflCopter

Mitglieder
  • Gesamte Inhalte

    23
  • Benutzer seit

  • Letzter Besuch

  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. Hat sich erledigt. War etwas voreilig - "if" war das Zauberwort für eine flotte Lösung. Thread kann gerne gelöscht werden.
  3. 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>"; } } ?>
  4. 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 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 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
  5. Hallo Enno, Hallo Crash2011, vielen Dank - die Lösung hat ohne Schwierigkeiten funktioniert - ihr beide habt mir einiges an Recherche und Arbeit erleichtert!
  6. 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
  7. 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.? }
  8. 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
  9. 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; }
  10. system("CLS"); <- löscht die gesamte Kommandobox und setzt den Zeiger wieder oben links in die Ecke clrscr(); ( funktioniert glaube ich nur bei den Borland Geschichten ) dürfte das Richtige für dich sein.
  11. 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
  12. 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; }
  13. 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.
  14. Das heißt dann, dass meine Funktion mit einer Kopie arbeitet? 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.
  15. 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.

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...