Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

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, 5010 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 ..
Ähnliche Inhalte
Batch & Shell
gelöst Via Batch Zeichen in Textzeilen einfügen (3)

Frage von LuceDeCiello zum Thema Batch & Shell ...

C und C++
Fehlendes verständiss von C und C++ (8)

Frage von zelamedia zum Thema C und C ...

Ubuntu
gelöst Regex - zusammengefasste Wörter finden und korrekt trennen??? (6)

Frage von takitano zum Thema Ubuntu ...

Grafik
Mehrere PDF-Dateien Wörtern durchsuchen (2)

Frage von Emheonivek zum Thema Grafik ...

Neue Wissensbeiträge
Viren und Trojaner

FinFisher: Internetprovider schieben Spitzelopfern Malware unter

(1)

Information von kaiand1 zum Thema Viren und Trojaner ...

Humor (lol)

Wo ist der Fehler auf dem Bild?

(17)

Information von the-buccaneer zum Thema Humor (lol) ...

Windows Update

Offenbar erneutes MS-Update mit Fehlerschleife (2012 R2)

Information von VGem-e zum Thema Windows Update ...

Heiß diskutierte Inhalte
Lizenzierung
Programm soll in verschiedenen Versionen lizenziert sein (20)

Frage von Yanmai zum Thema Lizenzierung ...

Humor (lol)
Wo ist der Fehler auf dem Bild? (17)

Information von the-buccaneer zum Thema Humor (lol) ...

Windows Userverwaltung
Ordner-Rechte für Dom.Admin einschränken? (13)

Frage von kilobyte zum Thema Windows Userverwaltung ...