Sammeltopic für kurze Codingfragen

Wir sammeln alle Infos der Bonusepisode von Pokémon Karmesin und Purpur für euch!

Zu der Infoseite von „Die Mo-Mo-Manie“
  • Ich habe keine Lösung, aber ich bewundere das Problem:


    Ich habe vier .txt-Dateien "Name.txt" / "Zahl.txt" / "Start.txt" / "Ende.txt"


    In "Name.txt" befinden sich Dateinamen. Jeder Dateiname in einer separaten Zeile.

    Bestehend aus Zeichen, die in einem Dateinamen überlicherweise vorkommen können.


    In "Zahl.txt" befinden sich Zahlen. Jede Zahl in einer separaten Zeile.

    1 / 2 / 3 / 4 / 5 / 6 / 7 / 8 / 9 / 10 / 11...


    In "Start.txt" befinden sich Startnummern. Jede Nummer in einer separaten Zeile.

    1 / 2 / 3 / 4 / 5 / 6 / 7 / 8 / 9 / 10 / 11...


    In "Ende.txt" befinden sich Endnummern. Jede Nummer in einer Separaten Zeile.

    1 / 2 / 3 / 4 / 5 / 6 / 7 / 8 / 9 / 10 / 11...


    Die Aufgabe besteht nun darin, jeweils die erste Zeile, dann die zweite, dann die dritte usw. aus den jeweiligen .txt-Dateien auszulesen

    und basierend auf diesen Werten neue Dateien zu erstellen.

    Unter der Annahme, dass der Inhalt der .txt-Dateien folgendermaßen aussieht:


    Code
    Name.txt		Zahl.txt	Start.txt	Ende.txt
    
    
    Datei_Alpha		1		1		4
    Datei_Beta		2		2		5
    Datei_Gamma		5		1		6




    Müssten die erstellten Dateien wie folgt aussehen:


    Datei_Alpha.01.01.txt

    Datei_Alpha.01.02.txt

    Datei_Alpha.01.03.txt

    Datei_Alpha.01.04.txt

    Datei_Beta.02.02.txt

    Datei_Beta.02.03.txt

    Datei_Beta.02.04.txt

    Datei_Beta.02.05.txt

    Datei_Gamma.05.01.txt

    Datei_Gamma.05.02.txt

    ...


    Die Werte aus "Zahl.txt", "Start.txt" & "Ende.txt" sollten dabei immer zweistellig sein, also bei 1-9 mit vorangestellter 0 geschrieben werden (dreistellig gibt es nicht).

    Gleichzeitig sollte der Inhalt der erstellten Dateien wie folgt lauten:

    .\Dateiname.xyz


    Habe bereits versucht, das Ganze irgendwie mit einer Batch zu bewerkstelligen, aber, große Überraschung, erfolglos.

    Währe wahrscheinlich über ein PowerShell-Script auch einfacher zu lösen.

    Allerdings habe ich davon so viel Ahnung, wie ich eine Lösung für mein Problem habe...

  • #Akio Was ist deine Frage? Was sich am besten eignet, um dein Problem zu lösen? Soll dir jemand eine Lösung programmieren, an der du dich orientieren kannst? Wenn ja, mit welchen Einschränkungen? Ob sich das Problem vielleicht vereinfachen lässt, sodass du erst das leichtere und davon ausgehend das schwerere Problem lösen kannst? Oder wirkt das Problem auf dich einfach nur sehr schwer und du möchtest es daher mit uns teilen, ohne Input dazu zu bekommen (eigentlich ist das Grundproblem sehr simpel, mit diesem Aufbau bekommst du aber ein paar eklige edge cases rein, die du nicht hättest, wenn du gleich nur eine CSV-Datei oder ein äquivalentes Format nutzen würdest)

  • Pikachamp Primär hätte ich das ganz gerne mit Windows-Bordmitteln gelöst, bräuchte dafür aber Ideen, wie ich es angehen muss.

    Wenn jedoch jemand eine andere Komplettlösung auf dem Silbertablett servieren kann, werde ich mich auch nicht beschweren.

    Wer sich prinzipiell entsprechend auskennt, hat da wahrscheinlich in fünf Minuten was geschrieben.

  • #Akio Während sich das natürlich auch mit Shell-Skripten lösen lässt, würde ich persönlich hier eher auf eine abstraktere Programmiersprache zurückgreifen. Was sich hier am besten eignet, hängt natürlich davon ab, womit du Erfahrung hast und was auf dem Windows-System zur Verfügung steht, sofern du eine exe schreiben und hinterlegen kannst, würde ich das auch tun. Persönlich würde ich hier wohl am ehesten auf Rust, Kotlin oder C++ zurückgreifen.

    Der Grundalgorithmus, um dein Problem zu lösen, ist tatsächlich nicht schwierig:

    1. Lies die Informationen aus den Dateien in Listen ein
    2. Kombiniere die Informationen aus den Listen miteinander
    3. Schreibe die Dateien

    In stark vereinfachtem Pseudocode würdest du folgendes erhalten:


    Natürlich kannst du die Werte auch in-line in der Schleife einlesen, statt sie vorher in Listen auszulesen. Je mehr du in die Listen auslagerst, desto mehr der Validierung kannst du vorher durchführen, durch einen zip-Algorithmus kannst du auch das Bauen der Dateinamen vorher schon durchführen. Je später im Programm du die Informationen einliest und kombinierst, desto mehr rutscht die Validierung der Daten in die verschachtelten Schleifen. Tatsächlich ist das Erstellen der Dateien der einfachste Teil, das Schwierige ist das Einlesen und Validieren des Texts in den Dateien (und hier können dir abstraktere Sprachen mit umfangreichen Standardbibliotheken einiges abnehmen). Der Pseudocode ist extrem vereinfacht, ich validiere z.B. nicht, ob der Dateiname Sonderzeichen mit ungewünschten Effekten haben (unter Linux könntest du z.B. mit "../" aus dem Arbeitsverzeichnis nach oben entkommen).

  • Pikachamp Mit C++ könnte ich mich wahrscheinlich am ehesten anfreunden, da ist mir von dem ein oder anderen Arduino-Projekt die Syntax zumindest nicht komplett unbekannt, auch wenn das bisher immer nur primitivste Berechnungen waren.

    Mein Problem in deinem Code ist halt in erster Linie, dass ich die Befehle nicht kenne und nicht weiß, was sie machen.

    Und was würdest du als Software empfehlen? Unter Berücksichtigung der Tatsache, dass ich das jetzt ein mal brauche und das nächste mal frühestens in fünf Jahren wieder, wo ich komplett von vorne anfange.

  • #Akio Du könntest das ganze auch mit ChatGPT lösen, indem du die gewünschte Programmiersprache eingibst und die Aufgabe stellst. Die KI eignet sich hervorragend für solche kleineren Skripte. Je nachdem wie gut du das Problem beschreibst, sollte es damit mit Abstand am einfachsten gehen. Eventuell wird es nicht gleich beim ersten Mal den richtigen Code ausspucken. Dann kannst du aber Anweisungen geben wie der Output angepasst werden soll und nachfragen wenn du bestimmte Teile nicht verstehst.

  • #Akio Das ist erstmal nur Pseudo-Code, der beschreibt einen Algorithmus, aber nutzt nicht unbedingt real existierende Befehle. Gerade, wenn du aktuell ein Anfänger bist, ist das erstmal eine Aufgabe, für die du dich erstmal in einiges einlesen musst, wenn du eine Lösung haben möchtest, die nicht nur unter Idealbedingungen funktioniert, sondern auch dann funktioniert, wenn die Dateien, die du einliest, nicht passen. Ich kann dir zwar gerne Pointer in die richtige Richtung geben oder dir sogar ein Programm zeigen, dass das macht, damit kannst du dann aber je nachdem, was du nutzen möchtest, wenig anfangen. Als Anfänger würde ich dir von C++ abraten, aber die Wahl des Tools liegt natürlich bei dir. Es ist schwierig, dir etwas zu empfehlen, wenn ich deinen aktuellen Wissensstand nicht kenne. Wie viel Ahnung hast du im Bereich der Programmierung? Mit welchen Sprachen und Tools hast du schon Erfahrung? Ist das Programm, was du hier schreiben möchtest, so in Stein gemeißelt, oder kannst du das Format des Inputs beliebig abändern (z.B. eine Datei statt vier)? Möchtest du das Programm produktiv nutzen oder schreibst du es, um zu lernen oder nur einmal einzusetzen?

    Der schwierigste Teil der Aufgabe ist es nicht, die Dateien anzulegen, sondern es ist das Einlesen der Textdateien und das Übersetzen in den Typ, den sie eigentlich repräsentieren. Das hab ich im Pseudocode ausgelassen, weil es, je nachdem, welche Sprache und welche Libraries du nutzt, sehr unterschiedlich funktioniert.

  • Letarking Sehr schöne Idee. Und eigentlich weiß ich sogar, dass das Funktioniert. Aber zu Beginn auf die einfachsten Lösungen kommen?... Wo kämen wir da denn hin.

    Pikachamp Ich danke für deine Bemühungen, habe mir allerdings in der Zwischenzeit eine Batch gebastelt, mir der ich das Ganze machen werde.

    Jetzt muss ich zwar die Ausgangswerte von Hand eintippen, aber so viele sind das jetzt auch nicht, dass sich der ganze Aufwand lohnen würde, das komplett zu automatisieren, zumal ich das wahrscheinlich nie wieder brauche XD.