Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » bitte um erkärung dieses scripts

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ] [ 3 ]
000
24.11.2007, 14:31 Uhr
wolf360




C++:
/* txt2html_example.c */
#include <stdio.h>
#include <stdlib.h>
/* nchars = Anzahl der Zeichen */
/* tag    = Sonderzeichen in HTML */
/* ziel   = Datei, in die geschrieben wird */
void sonderzeichen(int nchars, char *tag, FILE *ziel) {
   int i;
   char zeichen;
   for(i = 0; i < nchars; i++) {
      zeichen = tag[i];
      putc(zeichen, ziel);
   }
}
int main(int argc, char **argv) {
   FILE *q, *z;
   int zeichen;
   if(argc < 3) {
      printf("Benutzung : %s quelle ziel\n", *argv);
      return EXIT_FAILURE;
   }
   q = fopen(argv[1], "r");
   z = fopen(argv[2], "w");
   if(q == NULL || z == NULL) {
      printf("Fehler bei Oeffnen einer Datei ...\n");
      return EXIT_FAILURE;
   }
   while((zeichen=getc(q)) != EOF) {
      if(zeichen=='<')
         sonderzeichen(4,"&lt;", z);
      else if(zeichen=='>')
         sonderzeichen(4,"&gt;", z);
      else if(zeichen=='\"')
         sonderzeichen(6,"&quot;",z);
      else if(zeichen=='&')
         sonderzeichen(5,"&amp;",z);
      else if(zeichen=='ä')
         sonderzeichen(6 ,"&auml;",z);
      else if(zeichen=='Ä')
         sonderzeichen(6 ,"&Auml;",z);
      else if(zeichen=='ö')
         sonderzeichen(6 ,"&ouml;",z);
      else if(zeichen=='Ö')
         sonderzeichen(6 ,"&Ouml;",z);
      else if(zeichen=='ü')
         sonderzeichen(6 ,"&uuml;",z);
      else if(zeichen=='Ü')
         sonderzeichen(6 ,"&Uuml;",z);
      else if(zeichen=='ß')
         sonderzeichen(6 ,"&szlig;",z);
      else
         putc(zeichen, z);
   }
   return EXIT_SUCCESS;
}



okey überwiegend kappier ich es, abe das mit der for-schleife nicht, warum braucht der die anzahl der zeichen??

ich hab mal probiert selbst so ein script zu machn aber es klappt nicht:


C++:

#include<stdio.h>
#include<stdlib.h>
int main(void){
    int rueckgabe,zeichen;
    char dateiname[100];
    FILE *datei;
    printf("Welche Datei wollen Sie aendern ");
    scanf("%s",dateiname);
    datei = fopen(dateiname,"r+");
    if(NULL == datei){
            printf("Error");
    }
    else{
         while((rueckgabe=fgetc(datei)) != EOF){
             if(rueckgabe = 'h'){
                putc('a', datei);  
             }    
          }
   }
getchar();
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
24.11.2007, 17:27 Uhr
RedEagle



Aufgabe des Programmes:
Es wird eine Datei (HTML) eingelesen, und die Sonderzeichen (z.B. ä) durch die HTML-Escapesequenzen (hier &auml ersetzt

Warum die for-schleife:
tag Zeigt auf die entsprechende escape-sequenz. Diese hat eine bestimmte länge.
(Bei &auml währen es 5 Zeichen). Und in der For-schleife werden dann eben diese 5 zeichen der reihe nach mit putc in die Datei geschrieben.

eine alternative währe

C++:
int i=0;
while(tag[i] != '\0')
{
  zeichen = tag[i];
  putc(zeichen, ziel);
  i++;
}

--
MFG RedEagle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
24.11.2007, 18:01 Uhr
wolf360



achso diese forschleife ist dafür da damit die buchstaben nacheinander erstet? Geht das nicht das gleich das ganze Wort erstetz wird??

aber warum klappt dann meine variante nicht? da ist es doch nur ein buchstabe?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
24.11.2007, 18:20 Uhr
0xdeadbeef
Gott
(Operator)


Das hier:

C++:
             if(rueckgabe = 'h'){


ist eine Zuweisung. Benutz da ==.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
24.11.2007, 18:52 Uhr
wolf360



des klappt auch mit == nicht ???
aber warum nicht ?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
24.11.2007, 19:06 Uhr
0xdeadbeef
Gott
(Operator)


Weil du in die selbe Datei schreibst, aus der du liest. Du musst ein bisschen aufpassen, wo im stream du stehst. So zum Beispiel gehts:

C++:
#include <stdio.h>

int main(void) {
  FILE *fd = fopen("test.txt", "r+");
  char c;

  while(fread(&c, 1, 1, fd)) {
    ungetc(c, fd);
    fputc(c == 'h' ? 'a' : c, fd);
  }

  fclose(fd);

  return 0;
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 24.11.2007 um 19:07 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
24.11.2007, 19:10 Uhr
wolf360



aber ich die datei doch im r+ modus geöffnet? Das is doch der modus zum schreiben und lesen?

und wofür ist das ungetc?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
24.11.2007, 19:11 Uhr
0xdeadbeef
Gott
(Operator)


Um ein Zeichen zurückzugehen. Dateioperationen bewegen die Position, die dein Deskriptor in der Datei hat, nach vorne - sonst würdest du immer das gleiche Zeichen auslesen bzw. beschreiben.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
24.11.2007, 19:36 Uhr
wolf360



versteh ich etz nicht so ganz?? und wofür is das fread??
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
24.11.2007, 19:38 Uhr
0xdeadbeef
Gott
(Operator)


Es liest aus der Datei ein. In diesem Fall ein Zeichen, ich mag die Notation lieber als den EOF-Vergleich - der kann bei Binärdateien auch mal ins Auge gehen.

Meine Güte, hast du kein Buch oder so? Schlag den Kram nach. Oder lies die manpages. Da steht das alles drin, und besser als es in der Doku steht, kann ichs dir auch nicht erklären.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 24.11.2007 um 19:38 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: