Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Hilfe - bitte, bevor ich durchdrehe (gerne auch gegen geld)

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ] [ 3 ]
000
04.08.2004, 11:15 Uhr
~gastmann
Gast


Hi,
ich drehe gleich durch - habe igentlich nie was mit c zu tun und komme eher aus der VB-Ecke - drum brauche ich jetzt dringend mal euer c-wissen (bitte, bitte)

ich hab die aufgabe, aus einem textfile zeilenweise einzulesen und
die zeile in einen string einzufügen und zeilenweise in eine andre datei gespeichert werden - jede zeile soll dann untersucht werden
nach einem bestimmten wort (z.b. Datum und wenn dieses vorkommt soll vor dem speichern in die neue andre txt-datei VOR Datum: ein \nDatum gesetzt werden.
ich hätte sogar vor Datum einige leerzeichen, die nur ersetzt werden müssten mit \n.

beispiel:
datei1.txt (so sieht es dort aus)

Zitat:

Hier könnte
irgendein text stehen und Datum taucht irgendwo auf und in der gleichen Zeile Datum nochmal



und so sollte es dann in der
datei2.txt aussehen:

Zitat:

Hier könnte
irgendein text stehen und
Datum taucht irgendwo auf und in der gleichen Zeile
Datum nochmal



wiegesagt - bin ziemlich ohne check bei c und wäre aus verzweiflung bereit, für einen fertigen quellcode sogar geld zu überweisen.

meine mailadresse: hsnolinger@gmx.de

vielen dank schonmal . . . .
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
04.08.2004, 11:49 Uhr
ao

(Operator)


Kannst du irgend eine Klassenbibliothek verwenden (z.B. MFC), dann ist so was ein Klacks. In "nacktem" C ist speziell Stringbehandlung ein ziemlicher Krampf.

Obwohl das, was du da beschreibst, auch in C noch gehen würde, wenn es irgendwelche Grenzen gibt, auf die man sich verlassen kann, z.B. "es gibt eine maximale Zeilenlänge, die niemals überschritten wird".

Dieser Post wurde am 04.08.2004 um 11:59 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
04.08.2004, 11:56 Uhr
~gastmann
Gast


hi ao,
wie sieht denn so eine Klassenbibliothek im c aus?
ich denke, hauptsache es funktioniert - also am ende muss halt
die eine falsche datei in eine andre richtige geschrieben sein .......
ist das mit nacktem C nicht möglich?

schick doch mal ein beispiel bitte.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
04.08.2004, 12:01 Uhr
virtual
Sexiest Bit alive
(Operator)


Ja, die erforderlichen Funktionen heißen fopen, fgets, strstr fprintf, fclose, aller Im header.
Mein Arbeitsvertrag verbietet mir leider Nebeneinkünfte, und mein Verständnis von diesem Forum verbietet mir, tiefer ins Detail zu gehen, wenn Du nicht einen Mindestmaß an eigenansatz zeigst.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
04.08.2004, 12:11 Uhr
~gastmann
Gast


hi nochmal,

wiegesagt, ich bin kein c-freak und drehe nun auch langsam durch.
hatte es schon soweit, dass die datei geöffnet wurde und
habe dieses dann mal ausgegeben - leider hat es nur wortweise eingelesen und
nicht zeilenweise - - - mir fehlt da völlig das know-how.
habe normal auch nichts mit c zu tun und bräuchte die lösung halt (und ich
dachte in einem forum bin ich gut aufgehoben)
nebeneinkünfte sind das doch nicht, es wäre mehr eine verzweiflungstat meinerseits und
ich denke, das problem haben auch noch andere newbies (ausser mir), denen
mit einem quellcode sehr geholfen wäre.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
04.08.2004, 12:43 Uhr
~gastmann
Gast


soweit bin ich bis jetzt:

(vielleicht mag mir jemand doch noch helfen)


C++:
#include <string>
#include <memory.h>
#include <stdio.h>
#include <ctype.h>
#include <fstream>
#include <iostream>
#include <time.h>
#include <direct.h>
#include <stdlib.h>

char* myReplace(char* alt,char* wort_alt,char* wort_neu)
{
    char* ptr;
    char* neu;
    ptr=strstr(alt,wort_alt);
    
    neu=(char*)malloc(strlen(alt)-strlen(wort_alt)+strlen(wort_neu));
    memcpy(neu,alt,ptr-alt);
    memcpy(neu+(ptr-alt),wort_neu,strlen(wort_neu));
    memcpy(neu+(ptr-alt)+strlen(wort_neu),ptr+strlen(wort_alt),ptr-alt+strlen(wort_alt));
    return neu;
}
int main()
{

// hier müsste ich die eine datei noch irgendwie zeilenweise in
// den string einezeilevonfile kopiert werden
    char* einezeilevonfile;
    char neuezeilen;
    satz_neu=myReplace(einezeilevonfile,"  Wort1","n\Wort1");
    
    strcpy(neuezeilen,einezeilevonfile);
    
    printf("%s",neuezeilen);

// und dann eben in das andre file geschrieben werden.
    //fprintf(neuezeilen);
    return 0;
}




wiegesagt - ich hab halt keine ahnung, habe eben die letzte nacht nur im netz gesurft und
irgendwie zusammengebastelt - denke aber eine lösung würde
vielen newbies helfen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
04.08.2004, 12:45 Uhr
~gastmann
Gast



C++:
satz_neu=myReplace(einezeilevonfile,"  Wort1","n\Wort1");
sollte natürlich heissen:
satz_neu=myReplace(einezeilevonfile,"  Wort1","\nWort1");




und nach dem Wort1 müsste der rest der zeile natürlich mit in die variable
der neuenzeile geschoben werden (wenn das nicht eh schon gemacht wird)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
04.08.2004, 13:18 Uhr
virtual
Sexiest Bit alive
(Operator)


Na, das ist doch schon was.

Also zunächstmal ist für Dein Problem nicht notwendig, groß im Speicher rumzufuhrwerken: Du liest am besten einfach die Daten, machst die Ersetzung on the fly und schreibst direkt. Allesandere ist ekelhaftes Gemurkse, wenn Du noch nicht so viel mit C gemacht hast.

Also etwa so:

C++:
#include <stdio.h>
#include <string.h>

int main() {
    char* eingabedatei = "datei1.txt";
    char* ausgabedatei = "datei2.txt";
    char* suchtext = "Datum";
    char* ersetzung = "\nDatum";
    FILE* rein;
    FILE* raus;
    char buffer[1024]; /* Wir nehmen mal vereinfachend an, daß eine Textzeile nicht länger als 1023 Zeichen sein kann */
    size_t len;
    char* p1;
    char* p2;


    /* Dateien öffnen */
    rein = fopen(eingabedatei, "r");
    if (rein==NULL) {
        fprintf(stderr, "Kann %s nicht lesen.\n", eingabedatei);
        return 1;
    }
    raus = fopen(ausgabedatei, "w");
    if (raus==NULL) {
        fclose(rein);
        fprintf(stderr, "Kann %s nicht schreiben.\n", ausgabedatei);
        return 2;
    }

    /* Lesen + ersetzen + schreiben */
    while(fgets(buffer, sizeof(buffer), rein)) {
        p1 = buffer;
        while ((p2=strstr(p1, suchtext))!=NULL)
        {
            fwrite(p1, 1, p2-p1, raus);
            fwrite(ersetzung, 1, strlen(ersetzung), raus);
            p1 = p2+strlen(suchtext);
        }
        if (*p1) fwrite(p1, 1, strlen(p1), raus);
    }

    fclose(raus);
    fclose(rein);
}


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
04.08.2004, 13:21 Uhr
virtual
Sexiest Bit alive
(Operator)


Achso, zwei anmerkungen noch:
1. Das Programm ist natürlich nicht ganz sauber, weil es in der while Schleife keinerlei Fehlerprüfung gibt (lesen+schreiben kann ja jederzeit schiefgehen).
2. Das Programm fuktioniert nicht in dem Fall, wo du irgendwelche newlines im Suchtext hast.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
04.08.2004, 13:21 Uhr
~null_kenntnis
Gast


hi
ließ doch einfach zeichenweise ein bis du an einen zeilen umbruch stößt
schon hast du in einem string eine zeile drin
durchsuchen kannst du gut mit strstr(...) schau dir die funktion einfach mal an eigentlich ganz einfach
ansonsten is es eigentlich kein so großes ding wenn du mit pointern umgehen kannst (also nacktes c)
hilft dir das? oder werd mal spezieller welcher teil dir probleme macht
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: