j1rechert
Goto Top

Mit C ein Wort in einer Textzeile verändern!?

Mit C ein Wort in einer Textzeile verändern!?

Hallo zusammen,

Bin ein Newbe in C und versuche mir es im Selbsstudium beizubringen.
Ich hab einen Code um in einem Textfile ein Wort zu verändern, ( das Wort "kleinen" soll in "großen" verändert werden) aber anscheinend klappt der Zugriff auf den Datei Inhalt noch nicht so ganz.
Der Code wird zwar sauber kompiliert, aber die Änderung wird nicht durchgeführt. Hat von euch vielleicht jemand einen Tipp für mich?
Hier der Code:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TMP_SIZE 2048

int main(int argc, char* argv)
{
FILE* pFile;
char szFileName = "C:\\test.txt";
char szTmp[TMP_SIZE];
char* pszBuffer = NULL;
long lAktSize;
long lSize;

pFile=fopen(szFileName, "r+b");
lSize = 0;
lAktSize = 0;

memset(szTmp, '\0', TMP_SIZE);

while((lAktSize=fread(szTmp, 1, TMP_SIZE, pFile))>0){
if(pszBuffer==NULL){
pszBuffer=(char*)malloc(lAktSize);
}
else
{
pszBuffer=(char*)realloc(pszBuffer, lSize+lAktSize);
}
trcpy(&pszBuffer[lSize], szTmp);
lSize+=lAktSize;
}
char szText = "Emma hat einen kleinen Hund";
char* pszSuchen;
pszSuchen = strstr(szText, "kleinen");
char szSave[100];

strcpy(szSave, pszSuchen + strlen("kleinen")+1);

pszSuchen='\0';

strcat(szText, "großen");

strcat(szText, szSave);

return 0;

fclose (pFile);
}

Content-Key: 20087

Url: https://administrator.de/contentid/20087

Printed on: April 18, 2024 at 06:04 o'clock

Member: Biber
Biber Nov 21, 2005 at 12:02:44 (UTC)
Goto Top
Na ja, j1reichert,
Du liest ja auch nur die Datei mit "FRead()".. da ist sicherlich keine Änderung sichtbar ohne FWrite().

Also drei Strategien möglich:
a) Nach dem FClose() noch mal ein FOpen() auf dieselbe Datei und dann FWrite() und FClose()
b) Vor dem jetzigen FClose() zurück an den Anfang mit FSeek(pFile, 0, 0) und dann Fwrite()
c) oder -eigentlich sauberer: Nur-Lesen aus der Quelldatei block-oder zeilenweise, schreiben in eine neue Datei, wenn kein Fehler: Umbenennen alte Datei im *.bak und neu geschriebene in den Namen der alten Datei.

HTH Biber
Member: j1rechert
j1rechert Nov 21, 2005 at 15:02:39 (UTC)
Goto Top
Hallo Biber,

ist an und für sich schon richtig....aber zum anhängen des wortes "großen" benutze ich ja strcat(szText, "großen");.
Die Datei wird temp. in den Puffer eingelesen, dann wird mit char*pszSuchen "kleinen" gesucht -> alles was nach "kleinen" kommt gespeichert -> dann soll durch strcat (anhängen) "großen" angehängt und der gespeicherte Rest wieder hintendran gehängt werden. Von daher müsste er mir das doch durchführen Wenn ich das über fread und fwrite machen würde könnte ich doch wahrscheinlich nicht explizit dieses eine Wort austauschen können. Oder? Zumindest weiss ich nicht wie ich das umsetzen könnte.

greets
J1
Member: Biber
Biber Nov 21, 2005, updated at Oct 17, 2012 at 14:16:45 (UTC)
Goto Top
Hallo J1,

hmmm, da reden bzw. schreiben wir aneinander vorbei, denke ich.
Diese Bastele-mir-den-kompletten-String-im-Buffer-zusammen-Mimik von Dir ist schon richtig gedacht, aber dieser String im Buffer wird doch nirgends hingeschrieben..weder auf den Bildschirm und schon gar nicht in die Datei. Du gehst doch nur lesend durch das Textfile.
Grad am Wochenende hat einer der wenigen überregional bekannten Rosenheimer VBSkripter ein Beispiel gepostet, in dem auch eine Textdatei gelesen, der Inhalt verändert und das Ganze wieder auf Platte geschrieben wird. Vielleicht wird es daran klarer: Per VB-SCRIPT Inhalt an bestimmter stelle in eine INI Schreiben.
Bin leider kein guter Erklärer.
Grüße Biber
Member: j1rechert
j1rechert Nov 25, 2005 at 09:41:54 (UTC)
Goto Top
Hi Biber,

ich habs hin bekommen.
Hab nur noch eine Frage: Ich möchte statt der Pfadangabe (C:\\test.txt) zu dem Textfile einfach nur die Netzfreigabe (das Verzeichnis in dem das Textfile liegt ist mit Netlogon auf dem Server freigegeben) aufrufen. Also das Netlogon\test.txt. Aber irgenwas mache ich falsch, bei der direkten Pfadangabe klappt es. Hat jemand einen Tipp für mich?

Gruß
J1
Member: Biber
Biber Nov 25, 2005 at 09:49:57 (UTC)
Goto Top
Moin J1,

ein paar Zeilen Deines Codes wären hilfreich jetzt...
Grüße Biber
Member: j1rechert
j1rechert Nov 25, 2005 at 12:41:45 (UTC)
Goto Top
Also statt auf C:\\test.txt:

int main (int argc, char* argv)
{
FILE* pFile;

char szFileName = "%%NetShare%%\\Netlogon\\test.txt";

aber ich denke das ist so falsch, hab aber leider keine Idee.