FILE *Stream in einen Array einlesen



  • Noch eine Schlussbemerkung, was ist die Bedeutung von argc ? ich mein das kann man auch im Grunde genommen auch weglassen ?
    Swordfish hat sich bestimmt was dabei gedacht klar, aber ich habe da irgendwie keine Bedeutung gesehen...



  • argc ist die anzahl der übergebenen parameter über die komandozeileneingaben also sozusagen die anzahl der elemnte von argv



  • du liest meine beitraege gar nicht erst, oder??? 😡



  • @Moh ich lese schon Deine Beiträge Moh, ich war ein wenig voreilig mit der Frage 🙂

    Danke euch nochmal 🙂



  • Hallo zusammen nochmal,

    hat einer ne Idee, wie ich den Code "zusammenruecken" kann, also ich moechte die frei gewordene Flaeche der geloeschten Kommentare zusammenruecken.

    Ich habe mir folgendes ueberlegt, eine weitere while Schleife einbauen und mit der Methode gets vergleichen, ob es sich um eine leere Zeile handelt.

    Ich habe mich fuer gets entschieden, weil damit Zeilenweise gelesen wird und nicht Zeichenweise.

    Was haltet Ihr davon ?



  • 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...


Anmelden zum Antworten