FILE *Stream in einen Array einlesen



  • Bei meiner Version werden die Kommentare ( // sonstwas, /* nochwas */ ) entfern -> es bleiben weder Whitespaces noch leere Zeilen zurück.
    Falls du mit einem anderen Source arbeitest, dann poste ihn.

    Greetz, Swordfish



  • Danke Dir Swordfish.

    Ich benutze aber Deine Version, nur dass ich nicht ueber die Kommandozeile arbeite. Habe deshalb argc direkt mit 3 initialisiert. Aber die Whitespaces und die leeren Zeichen konnten nicht geloescht werden, in welchem Teil des Programms wird das gemacht Swordfish ?



  • char *first = text;
    
    while( ( first = strstr( first, "//" ) ) ) {
    
        char *remove = first;
    
        if( first != text ) {
    
            if( *( first - 1 ) == '\n' )
                --first;
        }
    
        while( ( *remove != '\n' ) && ( *remove != '\0' ) )
            ++remove;
    
        strcpy( first, remove );
    }
    
    first = text;
    
    while( ( first = strstr( first, "/*" ) ) ) {
    
        char *remove = strstr( first, "*/" );
    
        if( !remove ) {
    
            printf( "Compouned statement \"*/\" missing!" );
            break;
        }
    
        strcpy( first, remove + 2 );
    }
    

    Zeig mal deine Eingabedatei und die daraus resultierende Ausgabedatei!

    Greetz, Swordfish



  • Die Eingabe ist:

    class Tuto {
    
    	static var app : Tuto;
    
    	function Tuto() {
    trace("yippi!");
    		// creates a 'tf' TextField size 800x600 at pos 0,0
    		_root.createTextField("tf",0,0,0,800,600);
    		// write some text into it
    		_root.tf.text = "Hello world !";
    trace("yippi!");
    	}
    	//sfsdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
    	//sdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd	
    //yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
    
    	/*hdhcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
    	* cccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
    	* ccccccccccccccccccccccccdddddddddddddd
    	* dddddddddddddddddddvvvvvvvvvvvv
    	*/
    
    	// entry point
    	static function main(mc) {
    trace("yippi!");
    		app = new Tuto();
    	}
    }
    

    Die Ausgabe dazu:

    class Tuto {
    
    	static var app : Tuto;
    
    	function Tuto() {
    trace("yippi!");
    
    		_root.createTextField("tf",0,0,0,800,600);
    
    		_root.tf.text = "Hello world !";
    trace("yippi!");
    	}
    
    	static function main(mc) {
    trace("yippi!");
    		app = new Tuto();
    	}
    }
    


  • Ach so, tschuldige, hab' ich übersehen:

    #include <ctype.h>
    
    // ...
    
    char *first = text;
    
    while( ( first = strstr( first, "//" ) ) ) {
    
        char *remove = first;
    
        while( ( first != text ) && isspace( *( first - 1 ) ) )
            first--;
    
        while( ( *remove != '\n' ) && ( *remove != '\0' ) )
            ++remove;
    
        if( remove[ 1 ] )
            if( remove[ 1 ] == '\n' )
                ++remove;
    
        strcpy( first, remove );
    }
    
    first = text;
    
    while( ( first = strstr( first, "/*" ) ) ) {
    
        char *remove = strstr( first, "*/" );
    
        if( !remove ) {
    
            printf( "Compouned statement \"*/\" missing!" );
            break;
        }
    
        strcpy( first, remove + 2 );
    }
    

    Greetz, Swordfish



  • Hey Swordfish danke Dir vielmals, echt nett von Dir...

    Kannst Du mir im uebrigen Tutorials empfehlen, die effizient auch ziemmlich effizient sind ?

    Gruesse und danke nochmal...



  • elturco schrieb:

    Kannst Du mir im uebrigen Tutorials empfehlen, die effizient auch ziemmlich effizient sind ?

    Johnny Walker Black Label? 😮

    So früh am Nachmittag? Geh' in die Ecke und schäm dich! 🕶





  • Ich benutze aber Deine Version, nur dass ich nicht ueber die Kommandozeile arbeite.Habe deshalb argc direkt mit 3 initialisiert.

    ist jetzt nicht fies gemeint, aber: du hast nichts verstanden, oder?



  • Moh schrieb:

    Ich benutze aber Deine Version, nur dass ich nicht ueber die Kommandozeile arbeite.Habe deshalb argc direkt mit 3 initialisiert.

    ist jetzt nicht fies gemeint, aber: du hast nichts verstanden, oder?

    Hä?

    Greetz, Swordfish





  • Wie heißt es in der Signatur eines bekannten Forenmitglieds:
    "I'm still confused, but on a higher level"

    😃

    Greetz, Swordfish



  • @Moh ich habe es so ungefaehr verstanden, es werden 3 Parameter ubergeben, Input, Output und die dritte ist, bin mir nicht so ganz sicher...



  • if( argc != 3 ) {

    puts( "usage: fooapp [input file] [output file]\n" );
    return EXIT_FAILURE;
    }

    wenn du eh nicht ueber kommandozeile bedienst, warum nimmst du den ganen kram denn nicht raus?? dann muss man argc auch nicht auf 3 setzen. und du hast ja schon gelernt, dass argc die anzahl der argumente an das programm zaehlt! ... usw.



  • @Swordfish, mit welcher Funktion kann ich denn die Ausgabe Zeilenweise wiedergeben, d.h. nicht in Form einer Code-Struktur, sondern in Form eines Textes, das z.b. nur 3-4 oder auch mehr Zeilen hat.

    nicht: sondern:

    class Egal class Egal{int b; bla bla}
    {
    int b;
    bla
    bla
    bla
    [/code]}

    Hast Du ne Idee...



  • ich hab das schon rausgenommen Moh :), das ist mir schon bekannt, aber danke Dir..



  • das war kein hinweis oder tipp 😡
    fuehl dich mal ein wenig angegriffen 😉



  • elturco schrieb:

    @Moh ich habe es so ungefaehr verstanden, es werden 3 Parameter ubergeben, Input, Output und die dritte ist, bin mir nicht so ganz sicher...

    😮 Es werden zwar drei Parameter übergeben, aber nicht Input und Output.

    Das kommt doch nur in Pascal vor

    program pascali(Input, Output)...
    

    In C sind es immer noch

    - argc : Anzahl der Kommandozeilenparameter
    - argv : Array der Kommandozeilenparameter
    - envp : Array der Umgebungsvariablen

    Oder hab' ich dich jetzt mißverstanden? 😕



  • elturco schrieb:

    @Moh ich habe es so ungefaehr verstanden, es werden 3 Parameter ubergeben, Input, Output und die dritte ist, bin mir nicht so ganz sicher...

    argv[ 0 ] enthält den Namen des Programms selbst
    argv[ 1 ] enthält den Namen der Eingabedatei
    argv[ 2 ] enthält den Namen der Ausgabedatei

    das sind - Moment bitte, muss mal zählen... - ähm ja, genau 3 (argc).

    elturco schrieb:

    @Swordfish, mit welcher Funktion kann ich denn die Ausgabe Zeilenweise wiedergeben, d.h. nicht in Form einer Code-Struktur, sondern in Form eines Textes, das z.b. nur 3-4 oder auch mehr Zeilen hat.

    nicht: sondern:

    class Egal class Egal{int b; bla bla}
    {
    int b;
    bla
    bla
    bla
    [/code]}

    Hast Du ne Idee...

    ➡ Smart Questions

    Greetz, Swordfish



  • Ja die Frage nochmal hier...

    Ich moechte als Output das ProgrammCode als Text ausgegeben haben und nicht in Form einer Programmstruktur, d.h. hier ein Beispiel um das genauer zu erlaeutern:

    Nicht so

    void main()
    {
       int y;
       int f;
    
    getchat(){}
     usw.
    
    }
    

    sondern so

    class egal{int a;int b;getchar(){}}
    
    usw.
    

    Hast Du dafur eine Idee, sicherlich muss man eine Kleinigkeit aendern oder einfuegen, aber ich komm einfach nicht drauf.

    Gruesse


Anmelden zum Antworten