ich wollte mal fragen, inwieweit Ihr ChatGPT oder andere KI beim Programmieren mit PB nutzt und ob Ihr evtl. dazu einige Tipps auf Lager habt. Ob es sich evtl. lohnt, ChatGPT Plus für Programmierarbeiten mit PB zu verwenden.
Ich selber gehöre ja dem älteren Semester an, wie Ihr an meiner Hardwareausstattung erkennen könnt. Habe ein paar PB-Projekte verwirklicht, die auch kommerziell von meinen Kunden genutzt werden. Programmieren ist für mich aber eher eine Nebenbeschäftigung, die mir dann allerdings auch Spaß macht. (Wenn niemend drängt)
Ich war heute Morgen super begeistert. Ich benötigte auf die Schnelle für mich ein simples Batch-Script, um per robocopy meine auf dem Netzlaufwerk befindlichen Dateien lokal abzugleichen.
Nichts löschen, sondern nur neuere Dateien kopieren und ggf. ältere mit gleichem Namen überschreiben. Wer robocopy kennt, kennt die Anzahl der Parameter.
Anstatt alle Parameter zu durchforsten, kam ich auf die Idee, mal ChatGPT zu fragen und erhielt sofort das funktionierende Script:
Code: Alles auswählen
robocopy "Z:\Quelle" "D:\Ziel" /E /XO
Die Fragerunde ging dann immer weiter (willst du noch dies oder jenes), bis ich letztendlich erstmal zufrieden war und ein schönes kleines Programm erhalten habe.
ChatGPT vertat sich anfangs noch mit den Parametern der Funktionen ReadPreferenceString() und WritePreferenceString(). Hier wurden fälschlicherweise 3 statt 2 Parameter verlangt.
Das konnte ich aber wiederum mit Übermittlung meiner PB Version meinem Gegenüber mitteilen. Nach ein paar Sekunden Recherche wurde mir dann recht gegeben. ChatGPT hatte sich vertan und die Parameter der Funktion mit einer anderen Programmiersprache verwechselt. Nach durchforsten der PB-Dokumentation durch ChatGPT wurde dann auch dies berichtigt.
Hier die Code-Zeilen im Original, die mir übermittelt wurden. Der Start wäre allerdings verbesserungswürdig. Man hat den Eindruck, es passiert erstmal nichts.
Code: Alles auswählen
; #########################################################
; Backup Tool in PureBasic
; Autor: [Dein Name]
; Version: 1.3
; Datum: 04.10.2025
;
; Änderungen:
; - Quelle und Ziel per Dialog auswählbar
; - Zuletzt genutzte Pfade werden in BackupTool.ini gespeichert
; - Fortschrittsanzeige + Log im GUI
; - NEU: Log kann in eine Textdatei gespeichert werden
; #########################################################
EnableExplicit
Global totalFiles, copiedFiles, src.s, dst.s
Global iniFile.s = GetPathPart(ProgramFilename()) + "BackupTool.ini"
;---------------------------------
; INI-Funktionen (korrigiert)
;---------------------------------
Procedure LoadSettings()
If OpenPreferences(iniFile)
PreferenceGroup("Paths")
src = ReadPreferenceString("Source", "")
dst = ReadPreferenceString("Target", "")
ClosePreferences()
Else
src = ""
dst = ""
EndIf
EndProcedure
Procedure SaveSettings()
If CreatePreferences(iniFile)
PreferenceGroup("Paths")
WritePreferenceString("Source", src)
WritePreferenceString("Target", dst)
ClosePreferences()
EndIf
EndProcedure
;---------------------------------
; Zählt alle Dateien im Quellordner (rekursiv)
;---------------------------------
Procedure.i CountFiles(src.s)
Protected dir, entry.s, type, count.i = 0
dir = ExamineDirectory(#PB_Any, src, "*.*")
If dir
While NextDirectoryEntry(dir)
entry = DirectoryEntryName(dir)
type = DirectoryEntryType(dir)
If type = #PB_DirectoryEntry_File
count + 1
ElseIf type = #PB_DirectoryEntry_Directory
If entry <> "." And entry <> ".."
count + CountFiles(src + "\" + entry)
EndIf
EndIf
Wend
FinishDirectory(dir)
EndIf
ProcedureReturn count
EndProcedure
;---------------------------------
; Kopiert neuere Dateien (rekursiv) + Fortschritt + Log
;---------------------------------
Procedure CopyNewerFiles(src.s, dst.s)
Protected dir, entry.s, fileSrc.s, fileDst.s
Protected type, dateSrc.q, dateDst.q, progress.i
; Zielverzeichnis sicherstellen
If FileSize(dst) = -1
CreateDirectory(dst)
EndIf
dir = ExamineDirectory(#PB_Any, src, "*.*")
If dir
While NextDirectoryEntry(dir)
entry = DirectoryEntryName(dir)
type = DirectoryEntryType(dir)
If type = #PB_DirectoryEntry_File
fileSrc = src + "\" + entry
fileDst = dst + "\" + entry
dateSrc = GetFileDate(fileSrc, #PB_Date_Modified)
dateDst = GetFileDate(fileDst, #PB_Date_Modified)
If dateDst = 0 Or dateSrc > dateDst
If CopyFile(fileSrc, fileDst)
AddGadgetItem(5, -1, "Kopiert: " + fileDst)
Else
AddGadgetItem(5, -1, "FEHLER: " + fileDst)
EndIf
EndIf
; Fortschritt aktualisieren
copiedFiles + 1
progress = copiedFiles * 100 / totalFiles
SetGadgetState(4, progress) ; Progressbar
SetGadgetText(3, "Bearbeite: " + entry) ; Status
WindowEvent() ; UI aktualisieren
ElseIf type = #PB_DirectoryEntry_Directory
If entry <> "." And entry <> ".."
CopyNewerFiles(src + "\" + entry, dst + "\" + entry)
EndIf
EndIf
Wend
FinishDirectory(dir)
EndIf
EndProcedure
;---------------------------------
; Log in Datei speichern
;---------------------------------
Procedure SaveLog(filePath.s)
Protected i, count
count = CountGadgetItems(5)
If count = 0
MessageRequester("Info", "Es gibt kein Log zum Speichern.", #PB_MessageRequester_Ok)
ProcedureReturn
EndIf
If CreateFile(0, filePath)
For i = 0 To count - 1
WriteStringN(0, GetGadgetItemText(5, i))
Next
CloseFile(0)
MessageRequester("Info", "Log gespeichert unter: " + filePath, #PB_MessageRequester_Ok)
Else
MessageRequester("Fehler", "Konnte Log-Datei nicht erstellen.", #PB_MessageRequester_Ok)
EndIf
EndProcedure
;---------------------------------
; Hauptprogramm mit GUI + Log + Pfadauswahl + INI
;---------------------------------
LoadSettings()
If OpenWindow(0, 100, 100, 650, 500, "Backup Tool", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
TextGadget(0, 10, 20, 100, 20, "Quelle:")
StringGadget(1, 110, 20, 400, 20, src)
ButtonGadget(10, 520, 20, 100, 20, "Auswählen")
TextGadget(11, 10, 50, 100, 20, "Ziel:")
StringGadget(2, 110, 50, 400, 20, dst)
ButtonGadget(12, 520, 50, 100, 20, "Auswählen")
ButtonGadget(13, 10, 80, 120, 30, "Backup starten")
ButtonGadget(14, 150, 80, 120, 30, "Log speichern")
StringGadget(3, 10, 120, 630, 25, "Status: bereit", #PB_String_ReadOnly)
ProgressBarGadget(4, 10, 160, 630, 20, 0, 100, #PB_ProgressBar_Smooth)
ListViewGadget(5, 10, 190, 630, 280) ; Log-Ausgabe
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case 10 ; Quelle auswählen
src = PathRequester("Quellordner auswählen", GetGadgetText(1))
If src <> ""
SetGadgetText(1, src)
EndIf
Case 12 ; Ziel auswählen
dst = PathRequester("Zielordner auswählen", GetGadgetText(2))
If dst <> ""
SetGadgetText(2, dst)
EndIf
Case 13 ; Backup starten
src = GetGadgetText(1)
dst = GetGadgetText(2)
If src = "" Or dst = ""
MessageRequester("Fehler", "Bitte Quelle und Ziel auswählen!", #PB_MessageRequester_Ok)
Else
SaveSettings() ; letzte Pfade sichern
ClearGadgetItems(5)
SetGadgetText(3, "Zähle Dateien...")
copiedFiles = 0
totalFiles = CountFiles(src)
If totalFiles > 0
SetGadgetText(3, "Starte Backup...")
SetGadgetState(4, 0)
CopyNewerFiles(src, dst)
AddGadgetItem(5, -1, "--- Backup abgeschlossen ---")
SetGadgetText(3, "Backup abgeschlossen! (" + Str(totalFiles) + " Dateien geprüft)")
Else
SetGadgetText(3, "Keine Dateien gefunden.")
EndIf
EndIf
Case 14 ; Log speichern
If dst <> ""
SaveLog(dst + "\BackupLog.txt")
Else
Define filePath.s = SaveFileRequester("Log speichern unter...", "BackupLog.txt", "Textdateien|*.txt", 0)
If filePath <> ""
SaveLog(filePath)
EndIf
EndIf
EndSelect
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver
EndIf
Freue mich über Rückmeldungen.