einelsen einer best. zeile einer textdatei



  • also,erstmal sinn der sache...ich hab ne textdatei mit ziemlich vielen namen drinnen und will nen art namensgenerator schreiben,der dann zufällig nen namen ausgibt....so,aber jetzt das problem....ich hab in der textdatei ca 5000! namen und ich will die nicht alle einlesen,da dies unnütz ist...gibt es einen befehl mit dem man eine bestimmte line der textdatei einlesen kann?denn so könnte ich als line ne zufällige zahl angeben und würde dann immer nen andren namen ausgeben können...hoffe es kennt jmd darauf eine antwort..:) danke im vorraus.



  • Wenn die Zeilen alle unterschiedlich lang sind, wirst du wohl kaum drumherum kommen, alle zeilen vorher in strings einzulesen. falls aber doch, könnte fseek() helfen



  • Wenn die Namen in etwa gleich lang sind, könntest du (mit seekg?) an eine zufällige Position innerhalb der Datei springen und den Namen nehmen, der als nächstes anfängt (einmal getline um den alten Rest rauszuwerfen, dann getline um den vollständigen zu bekommen). Dann müsstest du dir nur noch was für den ersten und letzten Namen ausdenken. Würden 5000 getlines an der Stelle im Programm wirklich zu lange brauchen? Wenn du mehrere Namen generieren musst, kannst du die Dateien ja auch einfach im Speicher behalten.



  • Es gibt zwei mögliche Ansätze

    1. Du definierst die Datei mit einer festen Zeilenlänge (fixed recordsize), d.h. wenn dein Mane 5 Buchstaben hat und die recordsize ist 80 fülltst du die fehlenden 75 Stellen auf. Dann kannst du
    mit

    result = fseek( stream,(Index*80), SEEK_SET);//positioniere auf den Anfang des records
    fgets( line, 80, stream )//lese den record;
    

    Auf den gwünschten Recoed zugreifen.

    2.du arbeits mit variabler Recodsize. d.h du z.B die schließt jede Zeile mit '\n' ab.
    dann kannst du auf folgende Weise auf deinen record zugreifen

    rewind( stream );
    for(i=0;i<(Index),i++)
      fgets( line, 80, stream )//d.h du werwirfst den Inhalt index-1  leseprozessen und nimmstnur den letzten record;
    

    Vorteil von 1 schneller Zugriff, Nachteil Speicherverschwendung
    Vorteil von 2 Speichereffizient, nachteil langsmaerer Zugriff

    Falls du mit Windows arbeitest, könntest du noch die inifiles nutzen

    [Namen]
    Name0001=PAD
    ....
    ....
    Name5000=FOO
    

    Dafür gibts in der Winapi Zugriffsfunktionen, das Verfahren was dahinter liegt ist wahrscheinlich wie Typ 2


Anmelden zum Antworten