Zum Inhalt springen

Teilstring in C ermitteln


Alex_winf01

Empfohlene Beiträge

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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' ;

        }

    }

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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;

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

@ 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 von Alex_winf01
Link zu diesem Kommentar
Auf anderen Seiten teilen

@ 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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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