In: eine Zeichenfolge ohne Zeilenumbrüche *
Ermöglicht dem Benutzer das Bearbeiten und Übermitteln der Zeile
Out: die geänderte Zeichenfolge (optional mit einem nachgestellten Zeilenumbruch)
Der Zeileneditor muss dem Benutzer mindestens Folgendes erlauben:
Bewegen Sie einen sichtbaren Cursor nach links und rechts
Zeichen an der Cursorposition einfügen und / oder überschreiben
Zeichen an der Cursorposition entfernen
Senden Sie die neue Zeichenfolge, dh beenden Sie die Bearbeitung, damit die geänderte Zeichenfolge zurückgegeben / gedruckt / angezeigt / gespeichert wird ... (ohne weiteren Text)
Geschätzt, aber nicht erforderlich:
Erklärung Ihres Codes.
Link zu einer Online-Test-Site, die Ihr Programm / Ihre Funktion demonstrieren kann
ein animiertes Bild, das die Verwendung demonstriert (TIO erlaubt beispielsweise keine Interaktivität)
Hinweis:
Tastenkombinationen sind nur Vorschläge
GUI oder visuelles Styling ist nicht erforderlich
Beispiele
Im Folgenden wird der Cursor mit dargestellt _
.
In: Just some text
Benutzer darf bearbeiten:
Just some text_
Benutzer drückt ←neunmal (linke Pfeiltaste)
Just ̲some text
Benutzer drückt Delviermal
Just ̲ text
Benutzer drückt Benutzer drückt aus:any
Just any_text
Enter
Just any text
In: Remove me
Benutzer darf bearbeiten:
Remove me_
Benutzer drückt Backspaceneunmal
_
Benutzer drückt aus: (leere Zeichenfolge)Enter
* Um triviale Editorlösungen zu vermeiden, muss dies entweder über eine andere Eingabemethode als die Bearbeitungsbefehle erfolgen oder durch einen Zeilenumbruch oder ähnliches von diesen getrennt sein.
quelle
Antworten:
APL (Dyalog) , 5 Bytes
Dies ist eine Tradition, also benutze sie
Rufen Sie es dann mit auf
a
, und geben Sie anschließend die Startzeichenfolge ein. Anschließend können Sie die Zeichenfolge bearbeiten.quelle
JavaScript (ES6),
15 bis14 ByteIch verstehe nicht, warum das so viele positive Stimmen bekommt!
Ein Byte dank Adáms Vorschlag, dass ich die ursprüngliche Eingabe in der anzeige , gespeichert
prompt
.Versuch es
quelle
""
durch0
oder sogar ersetzens
(damit der Benutzer den Originaltext während der Bearbeitung weiterhin sehen kann - eine nette Funktion).Bash 4.x, 25 Zeichen
Probelauf:
(Zeile 2 oben war die interaktive Bearbeitung, Zeile 3 die Ausgabe des resultierenden Texts.)
quelle
-bash: read: -i: invalid option
?man
sagt nurers
sind Flaggen erlaubt.-ei
-i
wurde in Bash 4.0 eingeführt (veröffentlicht im Februar 2009) - "-i text Use TEXT as the initial text for Readline".cat
wartet nur auf eingehenden Stream, für den die Shell keine Bearbeitungsfunktionen bereitstellt. Zumindest nicht standardmäßig.Bash + Vi / Vim, 14 Bytes
vi
zu aliased istvim
auf macOS, weiß ich nicht über anderen OSes.quelle
:wq!
oder drücken:x
, also denke ich schon. OP ist ein bisschen unklar, was als das qualifiziert.HTML + JavaScript (ES6),
77 6664 ByteHTML
JavaScript
10 Bytes dank Jörg Hülsermann und 2 Bytes dank Luke.
quelle
oninput
stattdessen verwenden.oninput
Brände, wennEnter
gedrückt wirde.which==13?alert(t.value):0
->e.which-13||alert(t.value)
spart zwei Bytes.Python 2 ,
275200 BytesKein Gewinner, aber hier ist es:
Erläuterung:
Dies funktioniert durch Umkehren der Eingabe (mit
[::-1]
) und Ausschließen und Einfügen von Zeichen in diese umgekehrte Eingabe, sodass sich der Cursor nicht bewegen muss. Kehrt es beim Drucken erneut um.Verwendung:
[Tab] -Taste zum Bewegen nach rechts
[Strg + C] zum Bewegen nach links
[Backspace] zum Löschen von
[Return] zum Beenden der Bearbeitung
Jede andere Taste wird in den Text eingefügt
Beispiel:
Am Beispiel von OP
In:
Just some text
Just some text>
Just some> text
Benutzer drückt Ctrl+CfünfmalJust > text
Benutzer drückt BackspaceviermalJust any> text
Benutzer drückt Benutzer drückt Out:anyJust any> text
EnterJust any text
Inline Editor Version:
Wenn der Text inline bearbeitet werden soll, fügen Sie
,'\r',
am Ende derprint
Anweisung Folgendes hinzu :quelle
-
und+
zu tun, aber der Editor wäre nicht in der Lage , diese Zeichen zu akzeptieren , dann\t
und\v
?C + NCURSES, 573 Bytes
Prüfung
Just some text
.a
dannn
danny
.Enter
zum Beenden.Detailliert
quelle
KEY_*
durch die entsprechenden Ganzzahlen ersetzen , um einige Bytes zu sparen?VBScript,
23 bis40 Bytesquelle
C #, 53 Bytes
Wo
s
ist eine Zeichenfolge zu ändern und die Ausgabe ist der neue Wert.SendKeys.SendWait : Sendet die angegebenen Schlüssel an die aktive Anwendung und wartet darauf, dass die Nachrichten verarbeitet werden.
oder 74 Byte, wenn wir uns nicht in einem Windows Forms-Kontext befinden:
quelle
Ruby,
9192284 BytesDadurch wird ein Readline-Pre-Input-Hook erstellt, der den Text einfügt und dann erneut anzeigt. Danach wird irb durcheinander gebracht, also stelle sicher, dass dies von einer Datei ausgeführt wird. Wird als Lambda ausgeführt, wird die Eingabezeichenfolge als Argument verwendet und die Ausgabezeichenfolge zurückgegeben.
Hierbei wird die Readline-Bibliothek zum Bearbeiten von Zeilen verwendet. Meine vorherige Antwort erlaubte nur Leerzeichen.
Das ist wirklich, wirklich selbsterklärend.
Edit: Ich wurde um eine Erklärung gebeten. Dies ist äquivalent zuputs(gets)
.gets
gibt einen String mit einem Zeileneditor ein.puts
gibt es aus.quelle
r.insert_text(s).redisplay
und entfernen Sie Folgendes;
. Übrigens, so wie ich unsere Richtlinien verstehe, sollten Sie erwähnen, dass Ihr Code ausgeführt wirdirb
, da Sie dies ansonstenReadline
in Ihrem Code benötigen würden .PHP + HTML, 26 Bytes
Der Browser fügt das schließende Tag automatisch hinzu
$ _GET Verwenden einer URL wie
http://example.com?0=input
als Eingabe Erstellt in einem HTML<input value=input
Und dies ist die Ausgabe für die Zeichenfolge-Eingabe
quelle
autofocus
, dass der Cursor am Anfang drin ist. Andere HTML-Elemente können Sie auch bearbeiten, wenn Sie das Attribut festlegencontenteditable
test></input><script>alert("Hi");//some malicious code\n</script>
Tcl, 17
Online-Dolmetscher saugen nur, um es zu demonstrieren, dann zeige ich einige Bilder von einer Windows-Befehlsshell:
Testfall 1
Testfall 2
quelle
AHK , 32 Bytes
InputBox
speichert alles, was als Variable eingegeben wurde,s
und gibt eine Startaufforderung für die Variable aus, bei1
der es sich um den ersten übergebenen Parameter handelt.Send
sendet Tastatureingaben an das aktuelle Fenster. In diesem Fall ist es der Inhalt vons
.MsgBox
war eine Option, aber zum GolfenSend
ist 2 Bytes kürzer.quelle
Excel VBA-Direktfenster-Befehl - 22 Byte
quelle
inputbox(0,,"Hi")
speichert ein Byte[a1]=inputbox(0,,[a1])
oder sonst was, wohin gehta
das? Das Speichern in einer Variablen ist keine gültige Ausgabemethode .ZX Spectrum BASIC, 7 Bytes
Trivial, der Vollständigkeit halber enthalten (
INPUT
und jeweilsPRINT
ein Byte-Token).quelle
a$
?a$
per Tastatureingabe;a$
wird mit demINPUT
Schlüsselwort überschrieben.SmileBASIC, 138 Bytes
Erzeugt eine Funktion
E
mit 1 Argument und 0 Ausgängen. (Ausgabe wird in der Konsole angezeigt)Die maskierten Zeichen sollten die eigentlichen Symbole sein, aber sie würden hier nicht angezeigt.
Kontrollen:
Das Einfügen / Löschen von Zeichen ist rückwärts, daher ist die Verwendung sehr ärgerlich (sollte aber dennoch die Anforderungen erfüllen).
quelle
Windows-Befehlsinterpreter, 16 Byte
Das ist sehr trivial; der befehlsinterpreter ist quasi ein "zeileneditor".
quelle
Commodore BASIC (C64Mini, C64 / 128, VIC-20 usw.) 179 tokenisierte BASIC-Bytes
Dies sollte im Geschäftsmodus eingegeben werden (Groß- / Kleinschreibung)
Ermöglicht grundlegende Textbearbeitung + Löschen + Neue Zeile. Die maximale Größe
a$
aller Zeichenfolgen in Commodore BASIC beträgt 255 Zeichen. Wenn Sie also mehr Zeichen eingeben, stürzt das Programm ab. Ich werde einen Weg finden, um> 255 Zeichen zu machen, wenn das nötig ist.quelle