2017-05-09 1 views
0

Ich möchte die Datei ohne Leerzeichen, aber den Code, den ich unten versucht habe Ich bin mir nicht sicher, wie lösche ich ein Zeichen, so habe ich versucht, eine Rücktaste (nicht druckbares Zeichen) aber dies scheint nichtSo entfernen Sie Whitespace aus einer Datei in c

#include <stdio.h> 
int main() 
{ 
FILE* fp; 
fp = fopen("in.txt","r+"); 
int ch; 
while((ch = getc(fp))!=EOF){ 
    if((ch == ' ') || (ch == '\n')){ 
     fputc(8,fp); 
     } 

    } 
} 

Die Datei ist

abcd efgh 

gibt es eine Arbeits Art und Weise zu arbeiten, dies zu tun ?, ohne eine neue Datei mit (ie.copy alle außer Leerzeichen)

+1

Wenn Sie ein Backspace-Zeichen ''\ b'' in eine Datei schreiben, wird ein Byte ausgegeben (normalerweise ist der Wert 8 - aber Sie sollten' '\ b'' verwenden) und die Dateiposition wird um eins erhöht wie jedes andere Zeichen ausgibt). Wenn Sie rückwärts gehen wollen, müssen Sie 'fseek()' verwenden. Beachten Sie, dass Sie im Aktualisierungsmodus zwischen jeder Lese- und Schreiboperation sowie zwischen jeder Schreib- und Leseoperation 'fseek()' oder eine andere Positionierungsoperation verwenden müssen. Alles andere ist undefiniertes Verhalten. –

Antwort

2

Sie können einen Cha nicht löschen racter aus der Mitte einer Datei.

Was Sie tun müssen, ist eine neue Datei erstellen, und schreiben Sie alle Zeichen, die sind nicht Leerzeichen an die neue Datei. Sie können dann die alte Datei löschen, wenn Sie möchten.

+0

Warum passiert nichts, wenn ich in putc() ein Backspace-Zeichen (ASCII 8) übergebe? –

+1

@FenilSuchak Gibt es nicht einmal ein Backspace-Zeichen in die Datei? In diesem Fall liegt es möglicherweise daran, dass Sie fseek nicht zwischen Lesen, Schreiben und Lesen aufgerufen haben oder weil Sie die Datei nicht geschlossen haben. – immibis

Verwandte Themen