Veröffentlicht 13. August 200817 j Hallo liebe Forengemeinde, ich habe zwei kleine Problemchen: 1.) ich brauche einen Teilstring von einem Gesamtstring. Beispiel: ZEXXX.YY Hier brauche ich den Teilstring ZEXXX. Wie kann ich den auslesen? 2.) folgender String: ZEXXX.YY. Dieser soll umgewandelt werden in ZEXXXYY. Mit welcher Methode kann ich das realisieren? Beides in Programmiersprache C. Danke für die Hilfe.
13. August 200817 j Also ich kenne von C nur folgende Stringfunktionen: strlen(),strcat(),strcpy(),strcomp() die helfen da jez nicht direkt weiter. Mit SQL würd das ganz bequem mit substring funktionieren. Jez wäre mal die Frage ob der String immer gleich lang ist und die Punkte immer an der selben Stelle wie in deinem Beispiel: ZEXXX.YY. Dann wäre es wohl am besten ein Array anzulegen in den du den string speicherst und dann mit einer for Schleife Zeichen für Zeichen den String auslesen bis der Punkt kommt und dann den Punkt durch die binäre Null ersetzen. /0 (Diese Zeigt das Ende eines Strings an alles was danach kommt wird abgeschnitten) for (i=0; i<8;i++) { if (string[i]=='.') { string[i]='\0' ; } }
13. August 200817 j Autor Also, es kann entweder nur ZEXXX auftreten oder ZEXXX.YY Ich muss da was zusammenbasteln. Aus ZEXXX muss 76ZEXXX werden und aus ZEXXX.YY muss 76ZEXXXYY werden. Kannst Du mir da weiterhelfen?
13. August 200817 j Also, es kann entweder nur ZEXXX auftreten oder ZEXXX.YY Ich muss da was zusammenbasteln. Aus ZEXXX muss 76ZEXXX werden und aus ZEXXX.YY muss 76ZEXXXYY werden. Wie schon geschrieben wurde: Du kannst per Schleife die Eigabe zeichenweise durchlaufen und in einen Ausgabepuffer das gewünschte Ergebnis hineinschreiben.
14. August 200817 j substr + find Edit: oops, grad erst gelesen, dass c. strstr Bearbeitet 14. August 200817 j von TDM
14. August 200817 j So, ich hab hierfür jez mal ein 5min Programm geschrieben und die Funktion strstr benutzt die ich bis dato nicht kannte. Es funktioniert mit den Zeichen die du beschrieben hast ob es dir was bringt ist natürlich ne andere frage. #include<stdio.h> #include<conio.h> #include<string.h> int main() { char zeichen[]="ZEXXX"; char anfang[]="76"; char * substring; if (strlen(zeichen)==5) { strcat(anfang,zeichen); puts(anfang); } else if (strlen(zeichen)==8) { substring= strstr (zeichen,"."); strncpy(substring,"YY",5); strcat(anfang,zeichen); puts(anfang); } else { } getch(); return 0; }
16. August 200817 j Autor @ brandyandy ich habe bereits (leider im falschen Thread) weiter geschrieben. Ich habe nun folgendes Problem: Ich lese Werte aus einer csv-Datei aus (Datei1.csv) und muss die Werte überarbeitet wieder in eine neue Datei (Datei2.csv) reinschreiben. Die Werte aus der 1. Datei sehen wie folgt aus: ZE01.01;beschreibung ZE02;beschreibung1 ZE13.13;beschreibung In der neuen Datei soll dann stehen: 760101;beschreibung 760200;beschreibung1 Nun habe ich mit der Umsetzung Deines Codes Probleme. Hier der Link zum anderen Thread: http://forum.fachinformatiker.de/c-c/118517-frage-zur-handhabung-dateien-2.html @ brandyandy Wie würdest Du das umsetzen? Um mein Problem genauer zu beschreiben: Dein Code habe ich nachvollziehen können. Nun habe ich nur das Problem, ich lese die Werte aus einer Datei aus und da muss ich nur die ersten Werte umwandeln. @ admin ich weiss, das ist Doppelposting. Ich gelobe Besserung. Bearbeitet 16. August 200817 j von Alex_winf01
22. August 200817 j Autor @ all vielen Dank schon mal für eure Hilfe. Ich bin nun ein Schritt weiter (was die Theorie und mein Programm angeht). Mein Code sieht wie folgt aus: #include <stdio.h> #include <string.h> #include <stdlib.h> int main(void) { FILE *datei = fopen("Datei1.csv", "r"); FILE *datei_neu = fopen("Datei2.csv", "w+"); char line [1000]; int i; char ch; char *sep; if(datei_neu == NULL) { printf("Fehler"); } if (datei != NULL) { while (fgets(line, sizeof line, datei)) { // Dieser Bereich kümmert sich darum, dass der Punkt übersprungen wird int c, i, j; char erg[10]; for(i=0, j=strlen(line)-1; i < j;i++, j--) { if (line[i]=='.') { line[i]='\0' ; } } fputs("76", datei_neu); fputs(line, datei_neu); } } else { printf("Fehler"); } fclose(datei); fclose(datei_neu); return 0; } Nun habe ich das Problem, dass in der 1. Datei folgendes steht: ZE01.01;ZE01.01;89-563;Beschreibung Text1; ZE02;zE02;555-89;Beschreibung Text2; Der erste String soll nun so umformatiert werden: 76ZE0101. Der zweite nicht. Ich vermute mal, ich muss line in Teilstrings zerlegen, array[0] umformatieren und dann array[] in datei_neu speichern muss, oder?
23. August 200817 j Kann mir keiner weiterhelfen? Bitte kein Threadpushing, siehe Boardregeln. Am Wochenende ist hier nunmal nicht ganz so viel los.
23. August 200817 j Autor @ Klotzkopp Danke für den Hinweis. Ich brauch nun mal Hilfe. Kannst du mir nicht weiterhelfen? Würdest Du notfalls über PN mir weiterhelfen?
23. August 200817 j Wofür brauchst Du das Programm/die Funktion eigentlich? Ist es eine reine Übungsaufgabe?
24. August 200817 j Autor Ich muss für mein Unternehmen eine vorhandene Datei so umformatieren, damit diese in die bereits vorhandene Oracle-Datenbank eingelesen werden kann. Aber was hat diese Frage bette schön mit meinem Problem zu tun? - Nichts.:floet: Könnten wir wieder zu meinem Problem kommen? Ansonsten kann man die ganze Diskussion abhacken.
24. August 200817 j Aber was hat diese Frage bette schön mit meinem Problem zu tun? - Nichts.:floet: Mit dem Problem an sich hat es nichts zu tun, aber damit, in welchem Zusammenhang die Frage steht. Wäre es eine Übungsaufgabe, würde ich vermutlich helfen, einen geeigenten Lösungsweg zu finden und ihn umzusetzen, auch wenn es einige Beiträge lang dauert. Es ist nicht gegen Dich gerichtet, aber ich sehe keinen besonderen Grund, warum ich einem mir unbekannten Unternehmen auf Zuruf ohne Gegenleistung Arbeit abnehmen sollte, indem ich einfach eine fertig einsatzfähige Lösung präsentiere. Ich hoffe, Du verstehst das. Es gibt auch andere Programmiersprachen, in denen solche Stringverarbeitungen relativ leicht umgesetzt werden können. Dein Ansatz, die Eingabe in Teilstrings zu zerlegen und dann entsprechend des gewünschten Ergebnisses zusammenzusetzen, ist richtig, man kann es so umsetzen. Du könntest den String aber auch ohne vorhergehende Zerlegung zeichenweise kopieren und dabei in die gewünschte Form zusammensetzen.
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.