Suchen und ersetzen?

ahhhhhhhhhhh jetzt klärt sich auch das problem warum ich dachte das es ja 2 zeichen sein müssen ^^ wie kann ich in ner normalen txt das tabulatorzeichen einsetzen das klärt auf jeden fall ein problem ^^ ich weiss jetzt nicht wie das von der aufgabenstellung her ist ob da dann dann ascii code zeichen stehen soll aber dann müsste es doch auch irgentwie gehen das ich erst den \ abfrage und dann ob das folgende zeichen ein t ist oder?
 
ahhhhhhhhhhh jetzt klärt sich auch das problem warum ich dachte das es ja 2 zeichen sein müssen ^^ wie kann ich in ner normalen txt das tabulatorzeichen einsetzen das klärt auf jeden fall ein problem ^^ ich weiss jetzt nicht wie das von der aufgabenstellung her ist ob da dann dann ascii code zeichen stehen soll aber dann müsste es doch auch irgentwie gehen das ich erst den \ abfrage und dann ob das folgende zeichen ein t ist oder?
für normal kaputte tastatur in datei tabulator nicht notwendig 2 zeichen :) da ist auch bei text kein verstehen möglich oder für mich ohne satzzeichen. ^^ Netiquette
gruß
 
Zuletzt bearbeitet:
Ich entschuldige mich nochmal wegen der Netiquette ;) Irgentwie krieg ich das nicht rein. Aber mein Problem ist gelöst.

C:
#include<stdio.h>
#include<stdlib.h>

void expand (FILE *dat,int fall){
	int c = 0;
	
	if (dat!=NULL) {  /*Abfrage ob Datei vorhanden*/
		if (fall==2)printf("\nDatei ist vorhanden und wurde geoeffnet\n"); 
		while ((c = fgetc(dat)) != EOF) {
			if (c == 92) {						/*Abfrage ob das Zeichen ein \ ist*/
			    c=fgetc(dat);
				if (c==116){					/*Abfrage ob das nächste Zeichen ein t ist*/ 
					printf("\t");
				}
				else if (c == '0' && fall==1) exit(1); /*Bedingung zum verlassen der Schleife bei Standarteingabe*/
				else {    
					putchar(92);			
					putchar(c);
				}
			}  
			else {
				putchar(c);				/*Ausgabe der Zeichen*/
			}
		}
	}
	else  printf("Dateiname existiert nicht");/*Fall das die Datei nicht existiert*/
}

main(int argc,char *argv [] ){
  	FILE *dateiptr;
	if (argc<2){		
		printf("Bitte geben sie einen Text ein\n Backslash 0 zum verlassen\n");			
		expand(stdin, 1);
	}
	else {				
		dateiptr = fopen(argv[1],"r");	/*Öffnen der Datei*/
		expand(dateiptr, 2);
		fclose(dateiptr);		/*Schließen der Datei*/
	}	
}

Danke für die Hilfe!
 
Hi.

Warum verwendest du dort "magische Zahlen"? Warum verwendest du dort die Zahl 92 statt '\\' ? Meinst du es ist sinnvoll sich das zu merken? Das gleiche für 116 statt 't'. Warum sollte man erst den Kommentar lesen müssen um zu wissen was du dort meinst? Ganz zu schweigen davon zu wissen ob es wirklich richtig ist.

Und wozu soll das mit dem \0 gut sein? Warum verarbeitest du die Datei nicht einfach bis zum Ende? Die Standardeingabe kannst du unter Windows mit Strg-Z schließen - unter Linux mit Strg-D.

Außerdem beendest du mit exit(1) nicht nur die Schleife, sondern brichst das Programm mit einem Fehlerstatus ab. Nimm doch einfach return um direkt aus der Funktion zurückzukehren.

Solltest du denn nicht die Aufgabe bearbeiten? Jetzt wandelst du ja nur "\\t" in "\t" um? :confused:

Gruß
 
Ja ok mit den "magischen Zahlen" hast recht das geht schöner ;)

Solltest du denn nicht die Aufgabe bearbeiten? Jetzt wandelst du ja nur "\\t" in "\t" um?

Ist doch damit getan? Wenn ich in einem Text oder der Standarteingabe ein eingetipptes \t finde wandelt das Programm dies in einen richtigen Tabulator um. Das mit dem Beenden der Standarteingabe wusste ich nicht, und da die Standarteingabe nicht EOF werden kann hab ich das lieber mit eingebaut.

Ganz falsch kann es nicht gewesen sein, ich hab mein Abtestat dafür bekommen =)

Gruß Ascanius
 
Dabei ist aber jeder Tabulator (in C dargestellt durch '\t') in die entsprechende Anzahl Leerzeichen umzuwandeln.
!=

Wenn ich in einem Text oder der Standarteingabe ein eingetipptes \t finde wandelt das Programm dies in einen richtigen Tabulator um.

Also meiner Meinung nach machst du nicht das was von dir verlangt war, aber ok..
Zumal, was ist bitte für dich ein richtiger Tabulator?
"\t" ist ein Steuerzeichen, also es ist das richtige Tabulatorzeichen.
Nachtrag: Steuerzeichenliste

Und was ist bitte ein Abtesta?
Mir wurde beigebracht keine exits als Schleifenabbrüche zu verwenden, sowas wird als unsauberes Programmieren bezeichnet.

Oh sorry werd versuchen drauf zu achten, ich hab irgentwie so den hang wen ich im Netz unterwegs bin einfach alles so runter zu tippen.
Ja, genau das soll ja vermieden werden, also dieses einfach nur hingeklatsche. Zudem ist der Text dadurch ja auch besser lesbar. Hat schon einen Sinn wieso man das überhaupt macht..
 
Zuletzt bearbeitet:
Ist doch damit getan? Wenn ich in einem Text oder der Standarteingabe ein eingetipptes \t finde wandelt das Programm dies in einen richtigen Tabulator um.
Es sollten doch aber Leerzeichen erzeugt werden? :confused:
Das mit dem Beenden der Standarteingabe wusste ich nicht, und da die Standarteingabe nicht EOF werden kann hab ich das lieber mit eingebaut.
Das ist nicht richtig:
Code:
echo abcd | dein_programm.exe
Das echo Kommando gibt abcd auf der Standardausgabe aus, welche mit der Standardeingabe von "dein_programm.exe" verbunden ist - danach ist die Eingabe zu Ende => EOF.
Ganz falsch kann es nicht gewesen sein, ich hab mein Abtestat dafür bekommen =)
OK. Hättest du bei mir nicht... :)

Gruß
 
Und was ist bitte ein Abtesta?

Abtestat gibt es für die erfolgreiche erledigung der Aufgabe und das benötigt man um zur Klausur zugelassen zu werden.

Mir wurde beigebracht keine exits als Schleifenabbrüche zu verwenden, sowas wird als unsauberes Programmieren bezeichnet.

Sonderlich schön fande ich das in dem Moment auch nicht war aber unter Zeitdruck das erste was mir einfiel und der Tutor hat nicht drüber gemeckert.

Zumal, was ist bitte für dich ein richtiger Tabulator?

Ja ok das war komisch formuliert. Damit meinte ich das in dem geschriebenen Text ja einfach nur das Zeichen \ und das Zeichen t nacheinander vorkamen und diese in einen Tabulator umgewandelt werden sollten (also das die Buchstaben die auf die Kombination aus \ und t folgen auf die nächste durch acht teilbare Stelle verrückt werden)

Es sollten doch aber Leerzeichen erzeugt werden?

Ja ok so war es in der Aufgabe formuliert aber durch das \t in der printf Funktion werden ja ebenfalls Leerzeichen generiert. Natürlich hätte ich auch eine Variable hochzählen können und die fehlenden Leerzeichen beispielsweise mit ner while Schleife generieren können aber so war es meiner Ansicht nach weniger Code und macht das selbe.

Zitat:
Zitat von Ascanius
Das mit dem Beenden der Standarteingabe wusste ich nicht, und da die Standarteingabe nicht EOF werden kann hab ich das lieber mit eingebaut.
Das ist nicht richtig:
Code:
echo abcd | dein_programm.exe
Das echo Kommando gibt abcd auf der Standardausgabe aus, welche mit der Standardeingabe von "dein_programm.exe" verbunden ist - danach ist die Eingabe zu Ende => EOF.

Dazu muss ich sagen von einem Echo Kommando hör ich gerade das erste mal (wenn ich die Aussage überhaupt richtig verstehe). Aber wenn ich das normal wie der Code des Programms jetzt aussieht ohne Kommandozeilenparameter gestartet habe und in der Standarteingabe lande besitz die so kein EOF, da kann ich lustig immer weiter irgentwas eintippen was ich dann wieder ausgegeben bekomme.

MFG Ascanius
 
Ja ok so war es in der Aufgabe formuliert aber durch das \t in der printf Funktion werden ja ebenfalls Leerzeichen generiert. Natürlich hätte ich auch eine Variable hochzählen können und die fehlenden Leerzeichen beispielsweise mit ner while Schleife generieren können aber so war es meiner Ansicht nach weniger Code und macht das selbe.
Auch das ist falsch. Wenn du "\t" auf die Standardausgabe schreibst, wird natürlich auch ein Tab ausgegeben:
Code:
dein_programm.exe  eingabe.txt > ausgabe.txt
Schau in die Ausgabedatei was dort für Zeichen drin stehen.
Dazu muss ich sagen von einem Echo Kommando hör ich gerade das erste mal (wenn ich die Aussage überhaupt richtig verstehe). Aber wenn ich das normal wie der Code des Programms jetzt aussieht ohne Kommandozeilenparameter gestartet habe und in der Standarteingabe lande besitz die so kein EOF
Wie ich bereits sagte kann auch die Standardeingabe zu Ende sein. Man kann sie mit Hilfe einer Tastenkombination schließen. Dann tritt auch EOF auf.

Gruß

PS: Standard schreibt man mit d!
 
Zuletzt bearbeitet:
Ich versuchs nochmal:

\t == 1 Zeichen

Eins, One, uno, un, y?!!

Es ist ein Steuerzeichen das überall gilt. Wenn du die Tabulatortaste deiner Tastatur drückst, sendet deine Tastatur ein "\t"!

Also ersetzt du ein \t durch ein neues \t.

Kann dein Tutor auch Coden?

Also findst jez gut für dich das du damit durchgekommen bist,
aber müssen das hier mal Richtig stellen ;)
 
Zurück