Pele todos los caracteres ASCII no imprimibles

9

Su desafío, si está codificado para aceptarlo, se ejecuta de la siguiente manera:

Puede elegir uno de los siguientes dos desafíos para implementar:

Desafío # 1

  • Leer de un archivo a.txt
  • Escriba solo caracteres ASCII imprimibles (valores 32-126) en un archivo b.txt

Desafío # 2

  • Con un archivo a.txt, elimine todos los caracteres del archivo excepto los caracteres ASCII imprimibles (valores 32-126)

Especificaciones sobre a.txt

a.txt es un archivo de texto sin formato que puede incluir cualquier valor ASCII de 0-255 (incluso indefinido / control) y su tamaño puede variar hasta 1 GB.

Victorioso

La respuesta con la menor cantidad de código fuente en bytes gana.

Timtech
fuente
@Malachi Eso es algo grande; ¿Cómo sugieres que lo suba?
Timtech
Tu criterio ganador es incorrecto. Por ejemplo, podría simplemente. Agregue un comentario realmente largo a mi código y gane.
Mhmd
2
@ user689 Y así sería si tuviera un programa extremadamente lento. Supongo que quiso decir que gana menos puntaje.
Oberon
1
@Malachi, pero eso significaría que más lento es mejor, y la pregunta está etiquetada con el código más rápido .
Oberon
@amon Lo haré code-golf en su lugar.
Timtech

Respuestas:

6

sh

Desafío 1, 24 23 caracteres

tr -dc \ -~<a.txt>b.txt
Bonificación : variaciones en el conjunto de caracteres para eliminar.
tr -dc " -~
"<a.txt>b.txt                       # preserves printables + line feed

tr -dc "[:space:] -~"<a.txt>b.txt   # preserves printables + whitespace
Luciérnaga
fuente
1
Puedes sacar el espacio antes<
Tobia
¡Estás en lo correcto! Es tan horrible que lo olvidé. : D
FireFly
1

Bash + Perl

Desafío 1 - 31 bytes

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

Desafío 2 - 28 bytes

perl -i -petr/\ -~//cd a.txt
amon
fuente
Hmm, corrió e hizo que los b.txtotros personajes permanecieran.
Timtech
@Timtech no puede reproducirse, vim muestra no imprimibles para mí (al mirar el b.txtdesafío 1)
amon
1

Ambos son el desafío 1.

C - 132 caracteres

#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 caracteres

file("b.txt","w").write(filter(lambda x:'~'>=x>' ',file("a.txt").read()))
Oberon
fuente
¿Es este Python 3?
Timtech
Python one no funciona con 3.3.3. Editar: Parece que primero debes crear el archivo.
Timtech
Lo ejecuté en Python 2.7 (r27: 82525).
Oberon el
1

Brainfuck: 92

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

Brainfuck no puede abrir archivos, por lo que utiliza la redirección stdin / stdout (# 1)

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

El mismo código en Extended Brainfuck : 68

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

PowerShell (43, 43)

Desafío 1: (43)

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

Desafío 2: (43)

(gc -raw a.txt) -replace"[^ -x7e]","">a.txt
microbiano
fuente
¿Por qué no usar en ~lugar de x7e? También puedes dejar el ,""argumento y mantener el mismo efecto, creo.
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
fuente
0

Desafío # 1

Rubí (52)

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

Retina , 7 bytes

Regex simple para eliminar ASCII no imprimible.

[^ -~]

Pruébalo en línea!

Entrada de prueba copiada de esta publicación SO .

mbomb007
fuente
Creo que te estás perdiendo el a/b.txtaspecto de lectura / escritura del desafío
Jo King el
1
@JoKing Retina no puede abrir archivos. Igual que esta respuesta , entonces está bien.
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

Pruébalo en línea!

sergiol
fuente
0

K4 , 36 33 bytes

Solución:

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

Explicación:

Lo anterior es para el Desafío A, reemplazar el b.txtde a.txtpor Desafío 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"
callejero
fuente
0

Burlesque - 21 bytes

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

Esto puede acortarse reemplazando 128con '<DEL>(donde DEL es el carácter de eliminación) pero no estoy seguro de cómo puedo publicar un DEL aquí (también reemplaza el31 y luego también puede deshacerse del **)).

Además, en la versión WIP puedes jugar golf a esto :un:ln.

mroman
fuente