Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

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

Frage Entwicklung C und C++

Mitglied: j1rechert

j1rechert (Level 1) - Jetzt verbinden

21.11.2005, aktualisiert 17.10.2012, 4993 Aufrufe, 6 Kommentare

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]='\0';

strcat(szText, "großen");

strcat(szText, szSave);

return 0;

fclose (pFile);
}
Mitglied: Biber
21.11.2005 um 13:02 Uhr
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
Bitte warten ..
Mitglied: j1rechert
21.11.2005 um 16:02 Uhr
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
Bitte warten ..
Mitglied: Biber
21.11.2005, aktualisiert 17.10.2012
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: <a href=http://www.administrator.de/forum/per-vb-script-inhalt-an-bestimmter-st ... target="blank">Ändern einer INI-Datei</a>.
Bin leider kein guter Erklärer.
Grüße Biber
Bitte warten ..
Mitglied: j1rechert
25.11.2005 um 10:41 Uhr
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
Bitte warten ..
Mitglied: Biber
25.11.2005 um 10:49 Uhr
Moin J1,

ein paar Zeilen Deines Codes wären hilfreich jetzt...
Grüße Biber
Bitte warten ..
Mitglied: j1rechert
25.11.2005 um 13:41 Uhr
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.
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Exchange Server
Exchange 2007 Datenbank restore ohne Exchange zu verändern - SBS2008

Frage von pitamerica zum Thema Exchange Server ...

PHP
Bearbeitbares PDF verändern (PHP) (1)

Frage von WPFORGE zum Thema PHP ...

VB for Applications
gelöst VB Script nach gefundenem Wort die nächsten 4 Zeichen ersetzten (2)

Frage von deutsch73 zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...