Entfernen Sie alle nicht druckbaren ASCII-Zeichen

9

Ihre Herausforderung lautet, falls Sie codiert sind, um sie anzunehmen, wie folgt:

Sie können eine der folgenden zwei Herausforderungen auswählen, die implementiert werden sollen:

Herausforderung Nr. 1

  • Aus einer Datei lesen a.txt
  • Schreiben Sie nur druckbare ASCII-Zeichen (Werte 32-126) in eine Datei b.txt

Herausforderung Nr. 2

  • a.txtLöschen Sie mit einer Datei alle Zeichen in der Datei mit Ausnahme der druckbaren ASCII-Zeichen (Werte 32-126).

Technische Daten auf a.txt

a.txt ist eine reine Textdatei, die beliebige ASCII-Werte von 0 bis 255 (auch undefiniert / Steuerelement) enthalten kann und deren Größe bis zu 1 GB betragen kann.

Gewinnen

Die Antwort mit der geringsten Menge an Quellcode in Bytes gewinnt.

Timtech
quelle
@ Malachi Das ist ziemlich groß; Wie schlagen Sie vor, dass ich es hochlade?
Timtech
Ihr Gewinnkriterium ist falsch. Zum Beispiel könnte ich nur. Fügen Sie meinem Code einen wirklich langen Kommentar hinzu und gewinnen Sie.
Mhmd
2
@ user689 Und so wäre es, wenn ich ein extrem langsames Programm hätte. Ich nehme an, er meinte, dass die geringste Punktzahl gewinnt.
Oberon
1
@ Malachi, aber das würde bedeuten, dass langsamer besser ist und die Frage mit dem schnellsten Code versehen ist .
Oberon
@amon Ich mache es stattdessen Code-Golf.
Timtech

Antworten:

6

Sch

Herausforderung 1, 24 23 Zeichen

tr -dc \ -~<a.txt>b.txt
Bonus : Variationen des zu löschenden Zeichensatzes.
tr -dc " -~
"<a.txt>b.txt                       # preserves printables + line feed

tr -dc "[:space:] -~"<a.txt>b.txt   # preserves printables + whitespace
FireFly
quelle
1
Sie können den Raum vorher <
herausnehmen
Du hast Recht! Es ist nur so flüchtig, dass ich es vergessen habe. : D
FireFly
1

Bash + Perl

Herausforderung 1 - 31 Bytes

perl -petr/\ -~//cd a.txt>b.txt

Herausforderung 2 - 28 Bytes

perl -i -petr/\ -~//cd a.txt
amon
quelle
Hmm, es lief und ließ die b.txtaber anderen Charaktere bleiben.
Timtech
@ Timtech kann nicht reproduzieren, vim zeigt keine nicht druckbaren für mich (wenn man sich b.txtHerausforderung 1 ansieht )
amon
1

Beide sind Herausforderung 1.

C - 132 Zeichen

#include<stdio.h>
k;main(){FILE*f=fopen("a.txt","rb");FILE*g=fopen("b.txt","w");while(!feof(f))(k=getc(f))>31&&k<127&&putc(k,g);}

Python - 78 Zeichen

file("b.txt","w").write(filter(lambda x:'~'>=x>' ',file("a.txt").read()))
Oberon
quelle
Ist das Python 3?
Timtech
Der Python funktioniert nicht mit 3.3.3. Bearbeiten: Es scheint, dass Sie die Datei zuerst erstellen müssen.
Timtech
Ich habe es auf Python 2.7 (r27: 82525) ausgeführt.
Oberon
1

Brainfuck: 92

+[[->+>+<<]>>>++++++++[->++++++++++++<<---->]>--[<<[->]>[<]>-]<+<[[-]>-<]>[[-]<<.>>]<<[-]<,]

Brainfuck kann keine Dateien öffnen, daher verwenden Sie die stdin / stdout-Umleitung (# 1).

bf strip.bf < a.txt > b.txt

Der gleiche Code in Extended Brainfuck : 68

+[(->+>+)3>8+(->12+<<4-)>2-[<<[->]>[<]>-]<+<([-]>-)>([-]2<.)2<[-]<,]
Sylwester
quelle
1

PowerShell (43, 43)

Herausforderung 1: (43)

(gc -raw a.txt) -replace"[^ -x7e]","">b.txt

Herausforderung 2: (43)

(gc -raw a.txt) -replace"[^ -x7e]","">a.txt
mikrobiell
quelle
Warum nicht ~statt verwenden x7e? Sie können auch das ,""Argument weglassen und den gleichen Effekt beibehalten, den ich glaube.
Etan Reisner
0

iX3, 388

Set  in [c]:  '1'
Loop start   ([c]  of 1  to 999999999)
   Read from file  'a.txt' into [T] (read from [c], 1 bytes)
   Modify text  '[T]' into [R] (code in Hex)
   Set  in [N]:  '&H[R]' (calculate)
   If  True: '([N]=10)'
      Write into file  'b.txt' line '' (Append)
   End If
   If  True: '([N]>31)&([N]<127)'
      Write into file  'b.txt' line '[T]' (Append, no linefeed)
   End If
Loop end
Timtech
quelle
0

Herausforderung Nr. 1

Rubin (52)

 IO.write (f="a.txt"),IO.read(f).gsub(/\p{Cntrl}/,'')
daniero
quelle
0

Netzhaut , 7 Bytes

Einfacher Regex zum Entfernen von nicht druckbarem ASCII.

[^ -~]

Probieren Sie es online aus!

Testeingabe aus diesem SO-Beitrag kopiert .

mbomb007
quelle
Ich denke, Sie vermissen den Lese- / Schreibaspekt a/b.txtder Herausforderung
Jo King
1
@JoKing Retina kann keine Dateien öffnen. Gleich wie diese Antwort , also ist es okay.
mbomb007
0

Tcl , 122 123 Bytes

set g [open b.txt w]
lmap c [split [read [open a.txt]] ""] {scan $c %c v
if $v>31&$v<127 {puts -nonewline $g $c}}
close $g

Probieren Sie es online aus!

Sergiol
quelle
0

K4 , 36 33 Bytes

Lösung:

`b.txt 1:{x@&31<x*127>x}@1:`a.txt

Erläuterung:

Oben ist für Herausforderung A, ersetzen Sie b.txtfür a.txtfür Herausforderung B.

`b.txt 1:{x@&31<x*127>x}@1:`a.txt / the solution
                         1:`a.txt / binary read (1:) "a.txt"
                        @         / apply to 
         {             }          / lambda taking 1 implicit arg (x)
                  127>x           / 127 greater than?
                 *                / multiply by
                x                 / x
             31<                  / 31 less than?
            &                     / indices where true
          x@                      / index into x at these indices
`b.txt 1:                         / binary write to "b.txt"
Streetster
quelle
0

Burlesque - 21 Bytes

{**{31.>}{127.<}m&}f[

Dies kann verkürzt werden, indem das 128durch ersetzt wird '<DEL>(wobei DEL das Löschzeichen ist), aber ich bin nicht sicher, wie ich hier ein DEL posten kann (ersetzen 31Sie auch das und dann können Sie das auch loswerden **).

In der WIP-Version können Sie dies auch bis zum Golf spielen :un:ln.

mroman
quelle