Seite 1 von 2

Verfasst: Samstag 21. August 2004, 19:58
von mawe
Hi lionking!

Milan und Dookie haben Dir ja schon sehr gute Tipps (mit "pp" - schrecklich :() gegeben. Wenn Du es ganz einfach haben willst, könntest Du es so versuchen:
Artikeldatei (artdat.dat):

Code: Alles auswählen

Name Nummer Preis Pfand Verkaufte_heute Lagerbestand Ladenbestand 
Cola 1.0 0.5 0.25 0.0 0.0 0.0 
Kekse 2.0 1.0 0.0 0.0 0.0 0.0 
Broetchen 3.0 0.75 0.0 0.0 0.0 0.0 
Pfand 0.0 -0.25 0.0 0.0 0.0 0.0 

Code: Alles auswählen

# einlesen
f = file("artdat.dat","r")
self.art = [x.split() for x in f.readlines()]
for i in xrange(0,len(self.art),1):
	for j in xrange(0,len(self.art[i]),1):
		try:
			self.art[i][j] = float(self.art[i][j])
		except: pass

# schreiben
f = file("artdat.dat","w")
for i in xrange(0,len(self.art),1):
	for j in xrange(0,len(self.art[i]),1):
		f.write("%s " % str(self.art[i][j]))
	f.write("\n")
Gruß, mawe

Verfasst: Samstag 21. August 2004, 20:09
von Milan
Hi. Das einlesen sollte wenn so aussehen, sonst gibts ne leere Liste :wink: (wegen des x.split()[0])

Code: Alles auswählen

# einlesen
f = file("artdat.dat","r")
self.art = [x.split()[0] for x in f]
for i in self.art:
	for j in xrange(0,len(i),1):
		try:
			i[j] = float(i[j])
		except: pass
Ansonsten seh ich da keine Probleme, jetzt gibts 3 Möglichkeiten und das einbauen musst du schon selber machen. Am Anfang einmal einlesen und bei Bedarf speichern (nur ausführen davon) sollte dir ein leichtes sein. Alle drei sind auch im editor leicht zu bearbeiten, wobei ich allerdings CSV vorziehen würde :wink: Ist auch mit excel zu bearbeiten und macht nicht soviel zusätzlichen Speicherplatz weg wie XML...

Verfasst: Samstag 21. August 2004, 20:17
von lionking
so ist die liste aufgebaut:

Code: Alles auswählen

self.art=[
               ['Name','nummer','preis','pfand','verkauftheute','lagerbestand','ladenbestand'],
               ['Cola', 1, 0.5, 0.25, 0, 0, 0], 
               ['Kekse', 2, 1.00, 0, 0,0,0], 
               ['Broetchen', 3, 0.75, 0, 0,0,0],
               ['pfand',0,-0.25,0,0,0,0],
               ]

Verfasst: Samstag 21. August 2004, 20:20
von mawe
Hi!

@Milan:
Versteh nicht was Du meinst. Hast Du Deine Methode ausprobiert? Ich bekomm dann als self.art folgendes:

Code: Alles auswählen

['Name', 'Cola', 'Kekse', 'Broetchen', 'Pfand']
Ist glaub ich nicht das Gewünschte :wink:

Gruß, mawe

Verfasst: Samstag 21. August 2004, 20:33
von Milan
Hi, hast recht... Ich hatte gerade was anderes gedacht, nämlich dass nur der Zeilenumsprung weggemacht werden müsste... Ist schon ok.

Verfasst: Samstag 21. August 2004, 20:37
von mawe
Milan hat geschrieben: Alle drei sind auch im editor leicht zu bearbeiten, wobei ich allerdings CSV vorziehen würde Ist auch mit excel zu bearbeiten und macht nicht soviel zusätzlichen Speicherplatz weg wie XML...
Ich finde auch daß XML für eine so einfache Aufgabe etwas Overkill ist :wink:
Zum Thema Excel (Microsoft :shock: [mawe macht reflexartig eine Handbewegung um böse Geister abzuwehren]):
Wenn man in der Artikeldatei als Trennzeichen ein ";" verwendet und dann folgendes ändert:

Code: Alles auswählen

# einlesen
...
self.art = [x.split(';') for x in f.readlines()] 
...
# schreiben
...
f.write("%s;" % str(self.art[i][j]))
...
kann man meine Methode und Excel (:shock:) verwenden (hihi! 8))

Gruß, mawe

Verfasst: Samstag 21. August 2004, 20:44
von Milan
HI. Dann muss ich wieder einsprechen, das ist der Grund warum ich extra importiere. Es könnten Semikolon (bzw Kommata) in der Datei sein, die zu den Namen gehöhren und somit auseinander gerissen werden und andererseits trennst du jetzt den Zeilenumsprung beim letzten Listenmitglied nicht mehr ab :P :lol:
mawe hat geschrieben:Zum Thema Excel (Microsoft :shock: [mawe macht reflexartig eine Handbewegung um böse Geister abzuwehren])
Dann nimm halt ein Posix-Äquivalent, gibts ja genug von :D .

Verfasst: Samstag 21. August 2004, 20:53
von mawe
Milan hat geschrieben: ... trennst du jetzt den Zeilenumsprung beim letzten Listenmitglied nicht mehr ab
:oops: Hast recht. Verd$#@!! :wink:
Milan hat geschrieben: Es könnten Semikolon (bzw Kommata) ...
Spaltet Excel auch bei ,, ich dachte es nimmt nur ;. Daß nämlich ein Semikolon in diesen Daten vorkommt ist unwahrscheinlich, finde ich. Aber Du hast schon recht, das ist alles etwas zu unsicher.

Gruß, mawe

Verfasst: Samstag 21. August 2004, 21:02
von Milan
Hi. Das mit den Kommaspalten... keine Ahnung. Zur Sicherheit kann man ja mal nen eigenen Dialekt definieren:

Code: Alles auswählen

class MyDialect(csv.excel):
    delimiter=";"
    lineterminator="\n"
Den muss man dann beim erzeugen von Reader/writer Objekten mit angeben:

Code: Alles auswählen

...
    reader=csv.reader(filename,MyDialect)
...
    writer=csv.writer(filename,MyDialect)
...

Verfasst: Samstag 21. August 2004, 21:15
von mawe
Hi! Gute Idee :D. Jetzt soll aber mal lionking entscheiden, welche Methode er verwendet. Wer weiß, ob er überhaupt was von Excel (:shock: :D) wissen will :wink:

Gruß, mawe

Verfasst: Samstag 21. August 2004, 21:36
von lionking
ich denke ich werde maves erste version nehmen, scheint mir am einfachsten...
Exel usw. brauch ich nich, man sollte die datei nur mit nem texteditor bearbeiten können...

und es funktioniert... Danke schonmal, vielleicht hab ich demnächst noch ne frage...
bis dann

Verfasst: Samstag 21. August 2004, 22:44
von lionking
so da kommt auch schon die nächste frage...

Code: Alles auswählen

self.bon=Tkinter.Text(bonframe, relief="groove", bd = "1", width = "40", height="8")
self.bon.grid(row=1, column=0)
in diesem "virtuellen kassenbon" werden die einzelnen artikel die verkauft wurden angezeigt...
jedoch wenn der inhalt zu gross wird geht es am unteren rand einfach weiter, und man sieht es nich mehr...
wie mache ich das, dass er automatisch runterscrollt?

Verfasst: Sonntag 22. August 2004, 06:41
von mawe
Hi!

Dafür gibt's see:

Code: Alles auswählen

self.bon.see("end")
Wenn du auch noch eine Scrollbar dazuhaben willst, könntest Du das so machen:

Code: Alles auswählen

import Tkinter

class ScrolledText(Tkinter.Text):
	def __init__(self,parent):
		self.scrollbar = Tkinter.Scrollbar(parent)
		self.scrollbar.pack(side="right",fill="y")
		Tkinter.Text.__init__(self,parent,width=40,height=8,yscrollcommand=self.scrollbar.set)
		self.see("end")
		self.scrollbar.config(command=self.yview)

		
root = Tkinter.Tk()
st = ScrolledText(root)
st.pack()
root.mainloop()
Oder Du verwendest gleich PMW. Da ist sowas schon dabei.

Gruß, mawe