Naja, kann man ja ändern, falls einem türkisch nicht liegt
Suche Beispiel für Adressverwaltung
Michael, DANKE, das ist was zum lesen!
Damit werde ich mich mal auseinandersetzten. Sieht auf den ersteb Blick genau aus wie das was ich machen will, nur mit anderen Feldinhalten natürlich.
Ich habe in meinem Programm Kunden (Firman), Artikel (Beleuchtungsmaterial), Personal (Beleuchter, Fahrer) und erstelle daraus per Selektion Angebote, Rechnungen und Auswertungen.
Da ich schon immer ein Sicherheitfreak war (Daten immer in AScii damit man sie noch mit anderen Mitteln auslesen, retten kann) mache ich das mit relativen Files aber auf ascii-basis. Alle Systemparameter in Flat-Files (sequential ascii).
Ich Danke. Melde mich zum Ergebnis und stelle fest "Hier werde ich geholfen"
 
			
			
									
									Damit werde ich mich mal auseinandersetzten. Sieht auf den ersteb Blick genau aus wie das was ich machen will, nur mit anderen Feldinhalten natürlich.
Ich habe in meinem Programm Kunden (Firman), Artikel (Beleuchtungsmaterial), Personal (Beleuchter, Fahrer) und erstelle daraus per Selektion Angebote, Rechnungen und Auswertungen.
Da ich schon immer ein Sicherheitfreak war (Daten immer in AScii damit man sie noch mit anderen Mitteln auslesen, retten kann) mache ich das mit relativen Files aber auf ascii-basis. Alle Systemparameter in Flat-Files (sequential ascii).
Ich Danke. Melde mich zum Ergebnis und stelle fest "Hier werde ich geholfen"
aus Pure(r) Lust am Programmieren 
						Habe hier auch was für dich.
Hat nur überschaubare 156 Zeilen, aber habe ich gerade extra für dich als PB-Anfänger geschrieben.
4 Felder: Vorname, Nachname, Alter und PB-Version einer Person.
 
Alle Angaben werden als String gespeichert, weil es ja nicht nötig ist, damit zu rechnen, also braucht man die Zahlenangaben nicht erst noch unnötig konvertieren.
Auch auf Textdateibasis. Du kannst dir die erzeugte Datei ruhig mal ansehen und manipulieren. Das verwendete Trennzeichen in der Datei ist ein Tabulator. Alles weitere nötige siehst du in den Kommentaren. Was ich nicht kommentiert habe, wird dir deutlich, wenn du dir den entsprechenden Befehl in der Hilfe nachschlägst (draufklicken und F1 drücken).
			
			
									
									Hat nur überschaubare 156 Zeilen, aber habe ich gerade extra für dich als PB-Anfänger geschrieben.
4 Felder: Vorname, Nachname, Alter und PB-Version einer Person.
Alle Angaben werden als String gespeichert, weil es ja nicht nötig ist, damit zu rechnen, also braucht man die Zahlenangaben nicht erst noch unnötig konvertieren.
Auch auf Textdateibasis. Du kannst dir die erzeugte Datei ruhig mal ansehen und manipulieren. Das verwendete Trennzeichen in der Datei ist ein Tabulator. Alles weitere nötige siehst du in den Kommentaren. Was ich nicht kommentiert habe, wird dir deutlich, wenn du dir den entsprechenden Befehl in der Hilfe nachschlägst (draufklicken und F1 drücken).
Code: Alles auswählen
EnableExplicit
Enumeration 
	#fenster
	#liste
	#vorname
	#nachname
	#alter
	#pb_version
	#eintragen
	#eintrag_loeschen
	#alles_loeschen
	#laden
	#speichern
	#counter
EndEnumeration
Procedure speichern()
	; Als Trennzeichen wird Chr(9) statt wie im Gadget Chr(10) benutzt,
	; so kann man ganz leicht einen Eintrag pro Zeile abspeichern und
	; wir brauchen kein spezielles Dateiformat wie INI oder XML
	Protected n, i, datei$
	datei$=SaveFileRequester("Wohin speichern?", "", "Text-Datei (*.txt)|*.txt", 0)
	If datei$
		datei$+".txt" ; Dateiendung manuell hinzufügen, der Requester macht das nicht automatisch
		If FileSize(datei$) <> -1 And MessageRequester("Frage", "Die Datei existiert bereits. Überschreiben?", #PB_MessageRequester_YesNo) = #PB_MessageRequester_No
				MessageRequester("Information", "Dem Wunsch entsprechend wird die Datei nicht überschrieben. Abbruch.")
		Else
			If CreateFile(0, datei$)
				Protected erzeugte_zeile$
				For n=0 To CountGadgetItems(#liste)-1 ; Index der Einträge nullbasiert!
					erzeugte_zeile$=""
					For i=0 To 3 ; nullbasiert; gehe jede Spalte jeden Eintrags durch und führe sie zu einer Zeile zusammen
						erzeugte_zeile$+GetGadgetItemText(#liste, n, i)+Chr(9)
					Next
					WriteStringN(0, erzeugte_zeile$) ; hierdurch entsteht am Dateiende eine Leerzeile, was beim Lesen zu einem Leereintrag führt. Beim Einlesen darauf achten! Vergleiche mit WriteString()
				Next
				CloseFile(0)
				MessageRequester("Erfolg", "Die Daten wurden erfolgreich gespeichert.")
			Else
				MessageRequester("Fehler", "Die Datei konnte nicht angelegt werden.")
			EndIf
		EndIf
	Else
		MessageRequester("Information", "Das Speichern der Datei wurde abgebrochen.")
	EndIf
EndProcedure
Procedure laden()
	; Da wir als Trennzeichen Chr(9) benutzen, das Gadget aber als Trennzeichen
	; Chr(10) erwartet, wenden wir ReplaceString() auf jede gelesene Zeile an
	Protected datei$, zeile$
	datei$=OpenFileRequester("Einen Datensatz öffnen", "", "Text-Datei (*.txt)|*.txt|Alle Dateien (*.*)|*.*", 0)
	If datei$
		If ReadFile(0, datei$)
			ClearGadgetItems(#liste) ; vor dem Laden die Liste leeren
			While Not Eof(0) ; solange Dateiende NICHT erreicht...
				zeile$=ReadString(0) ; ...lese eine Zeile
				If zeile$ ; die Leerzeile, die beim Speichern passiert, hierdurch abfangen
					zeile$=ReplaceString(zeile$, Chr(9), Chr(10))
					AddGadgetItem(#liste, -1, zeile$)
				EndIf
			Wend
			CloseFile(0)
			MessageRequester("Erfolg", "Der Datensatz wurde eingelesen.")
		Else
			MessageRequester("Fehler", "Die Datei konnte nicht gelesen werden.")
		EndIf
	Else
		MessageRequester("Information", "Das Laden einer Datei wurde abgebrochen.")
	EndIf
EndProcedure
Procedure counter()
	Protected anzahl=CountGadgetItems(#liste)
	SetGadgetText(#counter, "Anzahl der Einträge: "+Str(anzahl))
EndProcedure
OpenWindow(#fenster, 0, 0, 640, 500, "Beispielhafte Dateiverwaltung", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
	ListIconGadget(#liste, 5, 5, 630, 350, "Vorname", 200, #PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_FullRowSelect|#PB_ListIcon_GridLines)
		AddGadgetColumn(#liste, 1, "Nachname", 200)
		AddGadgetColumn(#liste, 2, "Alter", 50)
		AddGadgetColumn(#liste, 3, "PB Version", 140)
		AddGadgetItem(#liste, -1, "Max"+Chr(10)+"Mustermann"+Chr(10)+"42"+Chr(10)+"3.94")
	Frame3DGadget(#PB_Any, 5, 355, 630, 140, "Ein-/Ausgabe")
	TextGadget(#PB_Any, 10, 370, 100, 14, "Vorname")
	TextGadget(#PB_Any, 205, 370, 100, 14, "Nachname")
	TextGadget(#PB_Any, 400, 370, 40, 14, "Alter")
	TextGadget(#PB_Any, 445, 370, 100, 14, "PB Version")
	StringGadget(#vorname, 10, 385, 185, 20, "")
	StringGadget(#nachname, 205, 385, 185, 20, "")
	SpinGadget(#alter, 395, 385, 45, 20, 0, 150, #PB_Spin_Numeric)
		SetGadgetState(#alter, 20)
	ComboBoxGadget(#pb_version, 445, 385, 135, 20, #PB_ComboBox_Editable)
		AddGadgetItem(#pb_version, -1, "3.30")
		AddGadgetItem(#pb_version, -1, "3.94")
		AddGadgetItem(#pb_version, -1, "4.00")
		AddGadgetItem(#pb_version, -1, "4.10")
		AddGadgetItem(#pb_version, -1, "4.20")
		AddGadgetItem(#pb_version, -1, "4.30")
		SetGadgetState(#pb_version, 0)
	TextGadget(#counter, 10, 410, 250, 14, "Anzahl der Einträge: 1")
	ButtonGadget(#eintragen, 395, 410, 185, 20, "Eintragen")
	ButtonGadget(#eintrag_loeschen, 395, 435, 185, 20, "Eintrag löschen")
	ButtonGadget(#alles_loeschen, 395, 460, 185, 20, "Liste löschen")
	ButtonGadget(#laden, 200, 435, 185, 20, "<--| Laden")
	ButtonGadget(#speichern, 200, 460, 185, 20, "-->| Speichern")
Define position
Repeat
	Select WaitWindowEvent()
		Case #PB_Event_CloseWindow
			End
		Case #PB_Event_Gadget
			Select EventGadget()
				Case #liste
					position=GetGadgetState(#liste)
					If  position <> -1
						SetGadgetText(#vorname, GetGadgetItemText(#liste, position, 0))
						SetGadgetText(#nachname, GetGadgetItemText(#liste, position, 1))
						SetGadgetText(#alter, GetGadgetItemText(#liste, position, 2))
						SetGadgetText(#pb_version, GetGadgetItemText(#liste, position, 3))
					EndIf
				Case #eintragen
					position=GetGadgetState(#liste)
					If  position = -1
						AddGadgetItem(#liste, position, GetGadgetText(#vorname)+Chr(10)+GetGadgetText(#nachname)+Chr(10)+GetGadgetText(#alter)+Chr(10)+GetGadgetText(#pb_version))
					Else
						SetGadgetItemText(#liste, position, GetGadgetText(#vorname), 0)
						SetGadgetItemText(#liste, position, GetGadgetText(#nachname), 1)
						SetGadgetItemText(#liste, position, GetGadgetText(#alter), 2)
						SetGadgetItemText(#liste, position, GetGadgetText(#pb_version), 3)
					EndIf
					SetGadgetText(#vorname, "")
					SetGadgetText(#nachname, "")
					SetGadgetState(#alter, 20)
					SetGadgetState(#pb_version, 0)
					counter()
				Case #eintrag_loeschen
					position=GetGadgetState(#liste)
					If position <> -1
						RemoveGadgetItem(#liste, position)
					EndIf
					counter()
				Case #alles_loeschen
					ClearGadgetItems(#liste)
					counter()
				Case #laden
					laden()
					counter()
				Case #speichern
					speichern()
					counter()
			EndSelect
	EndSelect
ForEverPB 4.30
						Code: Alles auswählen
Macro Happy
 ;-)
EndMacro
Happy EndDanke.
Vor allem habe ich die Prozedur speichern(), laden() und counter() ausgegliedert und als extra Procedure geschrieben, damit man es einfacher hat, das Programm zu verstehen.
Das Eventhandling, also das Auswerten von WaitWindowEvent() und EventGadget() bevorzuge ich mit Select/Case zu erledigen, aber das kann jeder selbst gestalten.
			
			
									
									Vor allem habe ich die Prozedur speichern(), laden() und counter() ausgegliedert und als extra Procedure geschrieben, damit man es einfacher hat, das Programm zu verstehen.
Das Eventhandling, also das Auswerten von WaitWindowEvent() und EventGadget() bevorzuge ich mit Select/Case zu erledigen, aber das kann jeder selbst gestalten.
PB 4.30
						Code: Alles auswählen
Macro Happy
 ;-)
EndMacro
Happy EndLeute, Ihr seid SUPER.
Ich habe mir das angesehen und habe gute Anregungen bekommen.
Es ging ja hauptsächlich darum, das Prinzip beim codieren in PB zu erkennen.
Habe früher viel in auf Großrechner mit PL 1 und FOCUS gearbeitet neben meiner GW-Basic Programmierung.
Nun werde ich die nächsten Tage mal was entwerfen, dann melde ich mich wieder.
Habe jetzt auch die Vollversion gekauft
 
Güße an alle "Helfer"
Niels
P.S. Habe das Türkisch zum besseren Verständnis eingedeutscht
			
			
									
									Ich habe mir das angesehen und habe gute Anregungen bekommen.
Es ging ja hauptsächlich darum, das Prinzip beim codieren in PB zu erkennen.
Habe früher viel in auf Großrechner mit PL 1 und FOCUS gearbeitet neben meiner GW-Basic Programmierung.
Nun werde ich die nächsten Tage mal was entwerfen, dann melde ich mich wieder.
Habe jetzt auch die Vollversion gekauft
Güße an alle "Helfer"
Niels
P.S. Habe das Türkisch zum besseren Verständnis eingedeutscht
aus Pure(r) Lust am Programmieren 
						- 
				Kaeru Gaman
 - Beiträge: 17389
 - Registriert: 10.11.2004 03:22
 
wo wir schon dabei sind...Andesdaf hat geschrieben:> Das Eventhandling, also das Auswerten von WaitWindowEvent() und EventGadget() bevorzuge ich mit Select/Case zu erledigen, aber das kann jeder selbst gestalten.
Mach ich auch, finde ich besser als diese ewigen If Abfragen.
Code: Alles auswählen
   Select WaitWindowEvent()
...
         Select EventGadget() Code: Alles auswählen
EventID = WaitWindowEvent()
EvGadget = EventGadget()
   Select EventID
...   
         Select EvGadget das kann immerhin mal vorkommen.
vor allem verhindert es, dass man (Anfänger) versehentlich mehrfach das WindowEvent abfängt.
solche Beispiele:
Code: Alles auswählen
Repeat
  Select WaitWindowEvent()
    ...
  EndSelect
Until WindowEvent() = #PB_Event_CloseWindowso muss es korrekt aussehen:
Code: Alles auswählen
Repeat
  EventID = WaitWindowEvent()
  Select EventID
    ...
  EndSelect
Until EventID = #PB_Event_CloseWindow- Thorsten1867
 - Beiträge: 1360
 - Registriert: 04.02.2005 15:40
 - Computerausstattung: [Windows 10 x64] [PB V5.7x]
 - Wohnort: Kaufbeuren
 - Kontaktdaten:
 
Wenn die Daten als Klartext gespeichert werden sollen, wäre die Verwendung von XML vielleicht eine gute Idee.
Man kann damit sicher auch einfacher auf die gespeicherten Daten zugreifen.
			
			
													Man kann damit sicher auch einfacher auf die gespeicherten Daten zugreifen.
					Zuletzt geändert von Thorsten1867 am 13.02.2009 16:41, insgesamt 1-mal geändert.