Effizientes Lesen von einem File



  • Hallo Zusammen,

    wie der Titel schon sagt suche ich nach einer effizienten Lösung um von einem Textfile zu lesen. Das File könnte zum Beispiel so aussehen:

    // Infos
    Seriennummer: 01234
    Version: 1.0
    Typ: A1
    // Eingänge
    1,3
    // Ausgänge
    2,4
    // Funktionen und zugehörige Pins und Beschreibung
    0x00  2  klapan_1
    0x01  3  klapan_2
    0x11  4  klapan_3
    0x10  1  klapan_4
    

    Ich suche nun nach einer möglichst einfachen und effizienten Lösung um die benötigten Informationen auszulesen. Irgendwelche Vorschläge?

    Danke und Gruss,
    finalcu



  • Zeilenweise einlesen

    Edit: evtl. zuerst die ersten Zeichen auf eine bestimmte Art von Zeile überprüfen.
    sscanf() bzw. Konsorten in deiner Programmiersprache verwenden

    MfG SideWinder



  • @finalcu:
    Du verwechselst Lesen hier mit Parsen 😉



  • Und zu 95% brauch das lesen von der Platte viel länger als das parsen, aber wahrscheinlich gehts nicht um Effizienz, sondern nur um irgendeine Lösung



  • finalcu schrieb:

    Hallo Zusammen,

    wie der Titel schon sagt suche ich nach einer effizienten Lösung um von einem Textfile zu lesen. Das File könnte zum Beispiel so aussehen:

    // Infos
    Seriennummer: 01234
    Version: 1.0
    Typ: A1
    // Eingänge
    1,3
    // Ausgänge
    2,4
    // Funktionen und zugehörige Pins und Beschreibung
    0x00  2  klapan_1
    0x01  3  klapan_2
    0x11  4  klapan_3
    0x10  1  klapan_4
    

    Ich suche nun nach einer möglichst einfachen und effizienten Lösung um die benötigten Informationen auszulesen. Irgendwelche Vorschläge?

    Danke und Gruss,
    finalcu

    Zunächst einmal solltest Du mal verraten, welche Programmiersprache du verwenden möchtest.

    Und dann solltest Du Dich entscheiden. Einfache Lösungen sind in der Regel weniger effizient.

    Eine einfache Lösung ist sicher, Zeilenweise zu lesen und dann einen regulären Ausdruck drüber zu schicken. Und wenn Du einen gepufferten input-stream wie in C++ der std::ifstream verwendest, dann ist das auch einigermassen effizient.

    Willst Du es richtig effizient, dann solltest Du statt des regulären Ausdrucks einen richtigen Parser schreiben.

    Und noch was @additionalator: wie kommst Du auf die 95%? Das mag bei Deinem System so sein. Es kommt halt sehr darauf an, wo die Daten liegen. Liegen Sie auf einer Lochkarte oder in einer RAM-Disk welcher Art auch immer. Wie schnell ist die Platte? Und wie sieht es mit dem Cache des Betriebssystems aus? Wenn die Daten dort bereits vor liegen, dann ist es sogar egal, wie schnell die Platte ist.



  • Hallo,

    ich hänge mich mal an diesem Thread. Hierzu müsste man den Thread-Titel umschreiben. "Effizientes Lesen und Schreiben einer File"

    Aus persönlichen Gründen (ohne einen speziellen Anwendungsfall) interessiert mich, wie ein asynchrones Schreiben und Lesen funktioniert. Als Sprache währen C, C++ oder ähnliches (z.B. Java) von Interesse.

    Mehrere Thread's greifen auf die Datei lesend oder schreibend zu. Wie implementiert man einen derartigen Stream und wie, was muss dabei synchronizierd werden.
    Sind derartige Szenarios sinnvoll oder bremst man die handelsüblichen Platten aus?
    Was sollte asyn. Erfolgen und was nicht?

    Gruß,
    Thomas



  • Siassei schrieb:

    Hallo,

    ich hänge mich mal an diesem Thread. Hierzu müsste man den Thread-Titel umschreiben. "Effizientes Lesen und Schreiben einer File"

    Aus persönlichen Gründen (ohne einen speziellen Anwendungsfall) interessiert mich, wie ein asynchrones Schreiben und Lesen funktioniert. Als Sprache währen C, C++ oder ähnliches (z.B. Java) von Interesse.

    Mehrere Thread's greifen auf die Datei lesend oder schreibend zu. Wie implementiert man einen derartigen Stream und wie, was muss dabei synchronizierd werden.
    Sind derartige Szenarios sinnvoll oder bremst man die handelsüblichen Platten aus?
    Was sollte asyn. Erfolgen und was nicht?

    Gruß,
    Thomas

    Deine Frage hat absolut nichts mit der des OP zu tun, mach doch bitte einen eigenen Thread auf.



  • tntnet schrieb:

    Und noch was @additionalator: wie kommst Du auf die 95%? Das mag bei Deinem System so sein. Es kommt halt sehr darauf an, wo die Daten liegen. Liegen Sie auf einer Lochkarte oder in einer RAM-Disk welcher Art auch immer. Wie schnell ist die Platte? Und wie sieht es mit dem Cache des Betriebssystems aus? Wenn die Daten dort bereits vor liegen, dann ist es sogar egal, wie schnell die Platte ist.

    Na denk doch mal ein bisschen nach. Wie groß ist die Chance, dass einer der noch nicht einmal die Programmiersprache angibt eine RAM-Disk oder Lochkarte hat? Der will doch wahrscheinlich nur nen fertigen Code für sein Problem.



  • additionalator schrieb:

    tntnet schrieb:

    Und noch was @additionalator: wie kommst Du auf die 95%? Das mag bei Deinem System so sein. Es kommt halt sehr darauf an, wo die Daten liegen. Liegen Sie auf einer Lochkarte oder in einer RAM-Disk welcher Art auch immer. Wie schnell ist die Platte? Und wie sieht es mit dem Cache des Betriebssystems aus? Wenn die Daten dort bereits vor liegen, dann ist es sogar egal, wie schnell die Platte ist.

    Na denk doch mal ein bisschen nach. Wie groß ist die Chance, dass einer der noch nicht einmal die Programmiersprache angibt eine RAM-Disk oder Lochkarte hat? Der will doch wahrscheinlich nur nen fertigen Code für sein Problem.

    Ok ich habe noch mal ein bisschen nachgedacht. Und ich habe sogar nachgemessen: es sind 94,7% 😃


Anmelden zum Antworten