Dicts. File.

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
BlackJack

So könnte man es in Io ausdrücken:

Code: Alles auswählen

#!/usr/bin/env io

toSubtract := Map clone
File clone openForReading("test2.txt") do(
    foreachLine(line,
        parts := line split
        toSubtract atPut(parts first, parts last asNumber)
    )
    close
)

File clone openForReading("test.txt") do(
    foreachLine(line,
        (line findSeq("Figur:") == 0) ifTrue(
            parts := line split
            name := parts at(1)
            value := parts at(2) asNumber
            line = parts atPut(2, value - toSubtract at(name)) join(" ")
        )
        line println
    )
    close
)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

shuang hat geschrieben:Von meinem Kumpel ist es vorgegeben, weil wir ein Spiel spielen und das Spiel programmieren wollen. Er wollte das so, also mach ich es so ;)
Zum Programmieren gehört auch, dass man schlechte Entwürfe überdenkt und ggf. wegwirft! Nur weil Dein Kumpel keine Kenntniss von sinnvollen Standard Formaten hat, bedeutet das ja nicht, dass man sich an solchen Problemen festbeißen muss.
Wieso eigl, ist die Problematik so sehr komplex?
Ist sie nicht. Man kann das auch recht einfach so parsen - aber wozu?
Wie kann man die Aufgabe in 4Min lösen ?? :)
So:
Script
Data File

Nutzt doch einfach ein Standard Format für alle ausgelagerten Flat File Daten. Dann spart Ihr Euch beim Parsen viel Arbeit!
Benutzeravatar
shuang
User
Beiträge: 45
Registriert: Montag 5. April 2010, 14:30

Danke für die Hilfe bisher, doch die optimale Lösung habe ich immernoch nicht. :shock: Könnt ihr mir bitte zeigen, wenn es eigl doch recht einfach ist dies in der Form zu parsen. Wie ich das durchzuführen habe.


Im ersten Text:
-----------------
Name: Peter
Figur: Bettler 4
Name: Guenther
Figur: Truil 10
Name: Clark
Figur: Brotlexa 38

Text2:
-------------------

Bettler 2
Truil 3
Brotlexa 8

------------------

die Werte aus Text 2 werden im Text1 subtrahiert.
Ergebnis
Name: Peter
Figur: Bettler 2

Name: Guenther
Figur: Truil 7

Name: Clark
Figur Brotlexa 30
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

shuang hat geschrieben:Danke für die Hilfe bisher, doch die optimale Lösung habe ich immernoch nicht.
Was stört Dich an meiner Lösung?
Benutzeravatar
shuang
User
Beiträge: 45
Registriert: Montag 5. April 2010, 14:30

@ Hyperion. Das Problem ist einfach das ich die Werte nicht verändern kann. Oder mache ich da was falsch?
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

@Shuang: Zeige uns doch bitte deinen Code und sag uns dann wo genau es hängt. In diesem Forum wird dir keiner eine Komplettlösung posten. Sonst können wir auch gleich mit deinem Kumpel in Kontakt treten und mit ihm an seinem Spiel arbeiten. Du wärst dann natürlich raus aus dem Team.
Benutzeravatar
shuang
User
Beiträge: 45
Registriert: Montag 5. April 2010, 14:30

Das Problem habe ich mehrmals geschildert :)

Datei 1
Datei 2

Date3 = Datei 1(werte) - Datei 2(werte)

Im Grunde ist das alles. :shock:
BlackJack

@shuang: Das zu generelle zu lösende Problem haben wir mittlerweile verstanden. Die Frage war nach den *konkreten* Problemen mit *Deinem* Quelltext und wie der aussieht.

Oder halt was Du gegen bessere Alternativen hast. Wenn das keine Hausaufgabe ist, dann steht auch das Datenformat zur Debatte.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

shuang hat geschrieben:Das Problem habe ich mehrmals geschildert :)

Datei 1
Datei 2

Date3 = Datei 1(werte) - Datei 2(werte)

Im Grunde ist das alles. :shock:
Um das so umzusetzen, könntest Du Du die Klasse 'file' ableiten und `__sub__()` implementieren :)

Code: Alles auswählen

class MyFile(file):
    def __sub__(self, other):
        # hier passiert die Magie der "Dateisubtraktion"
        return neues_dateiobjekt # Datei3
Warum ignorierst Du die Hinweise der anderen, das Datenformat zu ändern, wenn Du doch eigentlich dazu in der Lage wärst? (Hausaufgabe noch nicht fertig? :twisted: ) Das empfiehlt Dir keiner, um Dich zu ärgern, sondern weil es gute Gründe dafür gibt.

Achtung, die obige Sache mit der Dateisubtraktion ist nur Spass
Benutzeravatar
shuang
User
Beiträge: 45
Registriert: Montag 5. April 2010, 14:30

Im Grunde brauche ich den Code von Gkuhl , dass leider nur als Fortran Code existiert. Sein Ergebnis steht auf Seite 3. 8)
BlackJack

@shuang: Im Grunde müsstest *Du* das dann einfach mal schreiben was Du brauchst. Es sieht nicht so aus als würde das jemand anderes für Dich machen. Zumindest nicht in Python. :-)
Benutzeravatar
shuang
User
Beiträge: 45
Registriert: Montag 5. April 2010, 14:30

*lol*
Alle antworten die ich erhalten habe, sagen aus, dass es so leicht sei :)
Doch keiner kann es so schnell lösen :).

Ich möchte sehen wie sich eie Wert aus einer Datei 1 durch das Wert in einer 2ten Datei verändert werden kann.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

shuang hat geschrieben:*lol*
Alle antworten die ich erhalten habe, sagen aus, dass es so leicht sei :)
Doch keiner kann es so schnell lösen :).
Und wie kommst du darauf, dass wir dein Problem loesen muessten nur weil es leicht ist?
BlackJack

@shuang: Ich hab's schon längst gelöst. Bevor ich's in Io angegangen bin. War wirklich ganz leicht und schnell implementiert.
Benutzeravatar
shuang
User
Beiträge: 45
Registriert: Montag 5. April 2010, 14:30

Versteh ich grad nicht? Wieso seh ich dann dein Lösungsweg nicht @ Blackjack :)?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

shuang hat geschrieben:Versteh ich grad nicht? Wieso seh ich dann dein Lösungsweg nicht @ Blackjack :)?
Na weil das deine Aufgabe ist, nicht unsere. Netter Versuch eine fertige Lösung zu erbetteln, aber darauf fällt nach vier Seiten Thread keiner mehr rein.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

weil du es selber versuchen sollst

verdammt zu spät
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Benutzeravatar
shuang
User
Beiträge: 45
Registriert: Montag 5. April 2010, 14:30

Wieso erbetteln?
Ich komm mit der Problematik nicht klar :)
Wenn ihr die Lösung verstecken wollt. Na Bitte. Viel Spass.
Ich kann eben nocht nicht so toll programmieren.


:K :K :K :K :K
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Bisher hast du einfach nur das Problem code los beschriebene.
bla1.txt hat geschrieben:Name: Peter
Figur: Bettler 4
Name: Guenther
Figur: Truil 10
Name: Clark
Figur: Brotlexa 38
bla2.txt hat geschrieben:Bettler 2
Truil 3
Brotlexa 8

Code: Alles auswählen

with open("bla1.txt") as f:
    for line in f:
        if line.startswith("Figur:"):
            figur1, zahl1 = line.split()[1:]
            handle = open("bla2.txt")
            for line2 in handle:
                figur2, zahl2 = line2.split()
                if figur1 == figur2:
                    zahl1 =  int(zahl1) - int(zahl2)
            handle.close()
            print "Figur: {0} {1}".format(figur1, zahl1)
        else:
            name = line.split()[1]
            print "Name: {0}".format(name)
Ich habe zwar keine Ahnung was das soll, und es gibt sicher 20bessere Lösungen für das Problem, aber du kannst es ja einfach übernehmen und gut ist, bei deiner nächsten Frage, zeigst du dann mehr Eigeninitiative ok? :-D
BlackJack

@Sr4l: Davon träumst aber wohl nur dass das jetzt den OP zur Eigeninitiative motivieren wird.

@shuang: Es ist ja kein Problem nicht so toll programmieren zu können. Es zwingt Dich ja auch keiner dazu. Aber wenn Du es lernen möchtest, dann musst Du halt auch etwas dafür tun. Und immer wider stur die Aufgabenstellung wiederholen ist eben betteln nach einer fertigen Lösung.
Antworten