Also schreibe ich eine kleine Racket-Anwendung, die eine (sehr schlecht formatierte) TXT-Datei analysiert und eine .csv-Datei ausgibt, mit der in Excel gearbeitet werden kann. Als erstes öffne ich ein kleines Fenster mit einer Schaltfläche, die einen Dateidialog öffnet, so dass der Benutzer die Datei auswählen kann, die konvertiert werden soll (genau wie jedes Programm, das einen geöffneten Dateiauswahldialog startet). Ich habe mich online umgesehen und kann dazu nichts finden. Dies wird eine native Anwendung sein, also sind die Dinge, die ich beim POST-Zugriff auf Webserver gefunden habe, nicht relevant. Wie kannst du das in Racket machen?Wie erstellt man einen Datei-Upload-Button im Racket?
Antwort
Die Prozeduren get-file
und put-file
existieren in #lang racket/gui
. Beide können verwendet werden, um Dateipfadnamen von Benutzern über einen Dialog zu erhalten. get-file
ist auf die Auswahl bestehender Dateien ausgerichtet, während put-file
auf die Schaffung neuer Dateien ausgerichtet ist.
Betrachten Sie das folgende Beispiel, die den folgenden:
- Es schafft ein Fenster mit einem "Select File" Button enthält.
- Wenn auf die Schaltfläche geklickt wird, erscheint ein Dialogfeld zur Auswahl einer Datei (kann die .txt-Datei zur Konvertierung sein).
- Sobald die Textdatei ausgewählt ist, wird ein weiterer Dialog zur Auswahl einer Datei zum Speichern der konvertierten Daten geöffnet (kann die CSV-Datei sein).
#lang racket/gui
;; Prints file's contents line by line
(define (print-each-line input-file)
(define line (read-line input-file))
(unless (eof-object? line)
;; 'line' here represents a line of txt file's contents
;; The line can be processed/modified to any desired output, but
;; for the purposes of this example, the line will simply be
;; printed the way it is without any "processing".
(println line)
(print-each-line input-file)))
;; Convert txt to csv by printing each line of txt
;; to the csv file using print-each-line (above)
(define (convert txt csv)
(define in (open-input-file txt))
(with-output-to-file csv
(lambda() (print-each-line in)))
(close-input-port in))
;; Make a frame by instantiating the frame% class
(define frame (new frame% [label "Example"]))
;; Make a button in the frame
(new button% [parent frame]
[label "Select File"]
;; Callback procedure for a button click:
[callback
(lambda (button event)
(define txt (get-file))
(define csv (put-file))
(convert txt csv))])
;; Show the frame by calling its show method
(send frame show #t)
Es ist nicht klar, was Sie brauchen. Wenn Sie wissen möchten, wie man mit Dateien arbeitet, siehe Abschnitt File ports, aber wenn Sie wissen müssen, wie man GUI-Objekte erstellt und verwendet, siehe Windowing. Erstellen Sie GUI-Anwendungen auf der Grundlage von GTK (die in der Racket-Implementierung verwendet werden), es ist keine triviale Aufgabe für einen neuen Benutzer. Es ist nicht meine Sache, aber ich denke, wenn Sie einige RAD (wie Lazarus für Objekt Pascal, MS Visual Studio für C#) nehmen, können Sie Ihre Aufgabe schneller und einfacher als GUI ohne Text als Text schreiben.
- 1. Wie schreibe ich einen Exponenten im Racket?
- 2. Wie passt man, im Match in Racket?
- 3. Webseite im Racket erstellen?
- 4. Wie erstellt man eine leere veränderbare Liste in Racket?
- 5. Wie man Elemente in einer Liste in Strings im Racket
- 6. Makrodefinierendes Makro im Racket?
- 7. Wie erstellt man ein sicp-aromatisiertes Racket-Skript und lässt es einen einzelnen Wert ausgeben?
- 8. Lambda im Racket erklärt
- 9. Trunks im Racket zerschneiden
- 10. Wie implementiert man Racket-Stil-Struktur im Schema?
- 11. Wie erstellt man einen DataAccessLayer?
- 12. Wie erstellt man einen Systemwiederherstellungspunkt?
- 13. Wie erstellt man einen SSAS-Server im multidimensionalen Modus?
- 14. Wie erstellt man einen bunten Würfel im A-Frame?
- 15. Wie erstellt man einen Titel mit mehreren Zeilen im Bokeh?
- 16. Wie erstellt man einen Grid-Kalender im iPhone?
- 17. Wie erstellt man einen neuen Service im MEAN Stack Framework?
- 18. Wie man einen technischen Indikator im quantmod-Paket erstellt
- 19. Wie erstellt man einen Rahmen für den Text im TextBlock?
- 20. Wie erstellt man einen Server im Shell-Skript?
- 21. Fehler beim Definieren im Racket
- 22. POST/GET Bindungen im Racket
- 23. RACKET Wie erstelle ich einen Score Counter?
- 24. Wie mache ich eine Zählliste im Racket zwischen zwei Variablen
- 25. Lösen eines Puzzlespiels im Racket
- 26. Expanded Form Falte im Racket
- 27. Wie erstellt man UILayoutGuide im Interface Builder?
- 28. Remove-if-not im Racket
- 29. Wie erstellt man einen [] Rahmen in HTML?
- 30. Wie erstellt man einen gebogenen Gradienten?
Vielen Dank !! Genau das musste ich lernen, wie das funktioniert. Ich lese jetzt mehr über Frames. Danke für die Hilfe – matzy
Gern geschehen :) – assefamaru