Versuchen, zu finden und ersetzen Sie eine Zeichenfolge aus der Datei in C
void replaceString(char* file, char* str, char* replace)
{
FILE* fp = fopen(file,"rt");
char buffer[BUFFER];
while(fgets(buffer,BUFFER,fp)!=NULL)
{
char* s;
s=strstr(buffer,str);
if(s!=NULL)
{
strcpy(s,replace);
printf("%s is replaced by %s\n",str,replace);
}
}
fclose(fp);
}
int main(int argc, char **argv)
{
char* file= "text.txt";
replaceString(file,"is","was");
printFile(file);
return 0;
}
Jungs, ich bin neu auf Datei-Operationen, die versuchen, zu finden und ersetzen einer Zeichenfolge durch eine andere. bitte helfen Sie mit! Ich versuche, die Datei zu öffnen in der "rt" - Modus. Dies sah im Beispiel-code. Nicht sicher über die mode. Ich vermute, dass ich eine temp.txt Datei zu tun! Kann es getan werden in einer einzigen Datei ohne Verwendung irgendeiner anderen Datei??
Nur wenn der Ersatz in der gleichen Länge wie die Zeichenfolge ersetzt. Und du wirst Lesen müssen, bis auf
Kann jemand bieten, den source-code dazu??
Das Prinzip der SO ist, dass Sie Fragen stellen, die gegeben werden kann, eine vernünftige Antwort und kann anderen helfen. "Können Sie source-code, dies zu tun?" ist sehr einfach in gewisser Weise mit "ja, ich kann, aber ich will nicht!" - aber das ist nicht wirklich hilfreich für jemand anderes!
"Kann es getan werden in einer einzigen Datei ohne Verwendung irgendeiner anderen Datei" --> ja (selbst wenn die string-Länge unterscheiden), aber es ist mehr anspruchsvoll dann das schreiben in eine andere Datei. In der Regel ist es besser und sicherer ist die Verwendung einer anderen Datei sollte der Betrieb err Weg, back-up, usw.
fseek
und fwrite
.Kann jemand bieten, den source-code dazu??
Das Prinzip der SO ist, dass Sie Fragen stellen, die gegeben werden kann, eine vernünftige Antwort und kann anderen helfen. "Können Sie source-code, dies zu tun?" ist sehr einfach in gewisser Weise mit "ja, ich kann, aber ich will nicht!" - aber das ist nicht wirklich hilfreich für jemand anderes!
"Kann es getan werden in einer einzigen Datei ohne Verwendung irgendeiner anderen Datei" --> ja (selbst wenn die string-Länge unterscheiden), aber es ist mehr anspruchsvoll dann das schreiben in eine andere Datei. In der Regel ist es besser und sicherer ist die Verwendung einer anderen Datei sollte der Betrieb err Weg, back-up, usw.
InformationsquelleAutor Soumyajit Roy | 2013-02-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier sind einige der Fehler in Ihrem Algorithmus.
Lesen Sie und schauen ein PUFFER von Zeichen in einer Zeit, mit keine überschneidung. Was ist, wenn
str
wird zwischen Puffer? (d.h. der erste Teil derstr
ist am Ende ein Puffer und der zweite Teil ist am Anfang der nächsten buffer).Sie versuchen, zu überschreiben
str
mitreplace
direkt in den Puffer mitstrcpy
. Was ist, wenn beide strings unterschiedlich lang sind? Wennreplace
ist kürzer alsstr
, Sie hätten immer noch das Ende vonstr
es und wennreplace
länger ist, wird es überschreiben Sie den text nachstr
Sogar, wenn Sie die gleiche Länge,
strcpy
fügt den letzten 0 char am Ende der Kopie (das ist, wie Sie sagen Ihnen, wo das string-Ende). Sie DEFINITIV nicht wollen, dass. Vielleichtstrncpy
ist ein besserer Vorschlag hier, obwohl es noch immer nicht funktionieren, wenn beide strings nicht die gleiche Länge.Ersetzen Sie die Zeichenfolgen in den Puffer aber nichts mit dem "korrigiert" Puffer! Der Puffer ist nicht die Datei, den Inhalt der Datei in den Puffer KOPIERT. So ändern Sie die Kopier-und dann nichts mehr. Die Datei wird sich nicht ändern. Sie müssen schreiben Sie Ihre änderungen in einer Datei, vorzugsweise eine andere.
Schreiben eine solche zu ersetzen ist nicht so trivial, wie Sie vielleicht denken. Ich kann versuchen, Ihnen zu helfen, aber es könnte ein bisschen über den Kopf, wenn Sie nur versuchen zu lernen, arbeiten mit Dateien und sind noch nicht voll komfortabel mit strings.
Tun das ersetzen einer einzigen Datei ist einfach, wenn Sie über genügend Speicher, um die gesamte Datei zu Lesen, die auf einmal (wenn
BUFFER
größer ist als die Größe der Datei), aber sehr schwierig, wenn nicht speziell in deinem Fall, woreplace
ist mehr alsstr
.InformationsquelleAutor rabensky
Dieser code ersetzt alle vorkommen von 'orig' text. Sie können ändern, wie Ihr braucht:
InformationsquelleAutor tyilmaz
Ich würde schauen, mit einem Puffer und auf diese Arbeit.
findme
wird zwischen Puffer? Sie werden es vermissen, dann...InformationsquelleAutor Niklas Rosencrantz
"rt"
- Modus ist für nur Lesen. Verwenden"r+"
- Modus. Das öffnet die Datei zum Lesen und schreiben.InformationsquelleAutor Mohsin