Recomendados: [Música] [Ciencia] [Religión y Espiritualidad]

[Volver] [Catálogo] [★]
Estás en el hilo 96291 de /t/.
 
URL
 (Para eliminar tu post, opcional)
Lee las Reglas antes de participar. Formatos disponibles: GIF, JPG, MP3, MP4, OGG, PDF, PNG, SWF, WEBM.
Tamaño máximo: 24 MB. Los metadatos se borran automáticamente.
En este tablón puedes publicar código con [code].
Este tablón es Safe For Work.

LateGame: Black souls II
YureiScreen: Especial de Jojo's: Stone Ocean


No abuses de los hilos de consultas técnicas. Trata de aportar contenido, opiniones, experiencias, recursos, en lugar de pedirlos.
Si quieres colaborar con el desarrollo de Hispachan, tienes toda la información en esta página.

Ayuda a un anon tonto
[A]
retarded apu.jpg 38.82KB 474x318 [G] [Y] [I] [S] [T]
96291 Ayuda a un anon tonto
Anónimo

/#/ 96291 []

He pensado en blockear las ips no deseadas en el archivo de hosts, para ello estoy utilizando las listas de los addblockers. El problema es que muchas veces salen repetidas asi que he decidido crear un script en java para filtrar las listas antes de agregarlas.

El problema es que deja de comprobarlo si las urls estan escritas al final del fichero y no logro entender porque. Además falla si le añades modificaciones para que deje de dar un error cada vez que encuentra una puta almohadilla de un comentario. He gastado tanto tiempo en esto que para este punto me lo he tomado como algo personal, así que agradecería mucho la ayuda.

Este es el código infernal, se que es malo pero soy muy inexperto en esto:

import java.io.BufferedReader;
import java.io.BufferedOutputStream;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.File;
import java.io.FileNotFoundException;

public class BuscarRepetidos {

final static String hosts =
System.getProperty("os.name").toLowerCase().contains("win")?
"C:\\Windows\\System32\\drivers\\etc\\hosts":"/etc/hosts";

public static void main(String[] args) throws IOException {
if (args.length!=2) {
System.out.println("Este programa necesita 2 argumentos.\n"
+ "El primero corresponde a la ruta del archivo la lista de urls para agregar al archivo de hosts."
+ "El segundo la ruta hacia un fichero de salida donde además de filtrar las no urls y agregar"
+ "la dirección nula de bloqueo, también. ");
System.exit(-1);
}

String[] lista = new String[cuentaLineas(args[0])];
BufferedReader br = new BufferedReader(new FileReader(args[0]));
BufferedWriter bw = new BufferedWriter(new FileWriter(args[1]));

int i=0;

for (String s; (s=br.readLine())!=null;) {
if (s.contains("0.0.0.0")) //comprueba que no existan valores repetidos en la propia lista y que siga el patron
lista[i++] = s;
if (s.equals("") || s.charAt(0)=='#') bw.write(s + '\n');
}
System.out.println(String.format("lista.length: %s", lista.length));
br.close();

try {
br = new BufferedReader(new FileReader(hosts));
boolean enLista = false;
for(String s: lista) {
for (String t; (t=br.readLine())!=null && !enLista;) /*if (!t.contains("#") && !t.equals(""))*/ {
try {
enLista = s.contains(t.replaceAll("\t", " ").split(" ")[1]);
} catch (Exception e) {
System.err.println(String.format("Error en \"%s\"", t));
}
}
if (!enLista) bw.write(s + '\n');
else System.out.println(String.format("Valor \"%s\" esta repetido.", s));
enLista = false;
}
br.close();
bw.close ();
} catch (Exception e) {e.printStackTrace();}

}

public static int cuentaLineas(String s) throws IOException {
File f = new File(s);
if (!f.exists()) {
System.err.println("El archivo no existe.");
System.exit(-1);
}
int count = 0;
BufferedReader br = new BufferedReader(new FileReader(f));
for (String line; (line=br.readLine())!=null;)
if (line.contains("0.0.0.0")) count++;
br.close();
return count;
}

}


>> AnónimoOP /#/ 96292 [X]
>>96291 (OP)
El codigo con el identado adecuado:
https://pastebin.com/pHtLAzP8

>> AnónimoOP /#/ 96293 [X]
>>96291 (OP)
Actualizacion: he logrado resolver parte de mis problemas, tenia cerrado el BufferReader fuera del bucle.

>> Anónimo /#/ 96306 [X]

try {
boolean enLista = false;
for(String s: lista) {
br = new BufferedReader(new FileReader(hosts));
for (String t; (t=br.readLine())!=null && !enLista;) /*if (!t.contains("#") && !t.equals(""))*/ {
try {
enLista = s.contains(t.replaceAll("\t", " ").split(" ")[1]);
} catch (Exception e) {
System.err.println(String.format("Error en \"%s\" \"%s\"", s, t));
}
}
if (!enLista) bw.write(s + '\n');
else System.out.println(String.format("Valor \"%s\" esta repetido.", s));
enLista = false;
br.close();
}
bw.close ();
} catch (Exception e) { e.printStackTrace();}

Cual es la forma correcta de implementar esto? Necesito que el primer for vuelva a establecer el BufferedReader al inicio del fichero, pero se que esta no es la forma apropiada.

>> Anónimo /#/ 96328 [X]
>>96291 (OP)
>script en java
ayy mis kekes.

>> Anónimo /#/ 96340 [X]
>>96291 (OP)
¿Qué mierda pasa con la mente de los windowns? Java no es la herramienta adecuada para eso.
>muh pero python/js/shellscript bad
Un programador de verdad utiliza la herramienta más adecuada para un problema determinado.

>> Anónimo /#/ 96384 [X]
>>96340
>Java no es la herramienta adecuada para eso.
1-.Funciona.
2.-No soy muy bueno en python.
3.-Si supiese leer/programar sabrías que ese script sirve para linux.

>> Anónimo /#/ 96388 [X]
>>96384
>no saber el lenguaje más sencillo del mundo
Kek
>Si supiese leer/programar sabrías que ese script sirve para linux
Sigue siendo una herramienta poco adecuada para lo que describes. Ya sé que gracias a JVM basta con cambiar c:\pajamental\hosts a /etc/hosts para hacerlo multiplataforma, pero python también es multiplataforma y se pueden manipular strings sin tanta paja.

>> Anónimo /#/ 96394 [X]
>>96388
>ese control de daño

>> Anónimo /#/ 96395 [X]
No irónicamente Perl podría resolver esto, o AWK. Incluso Powershell. Más abajo había un anon con un ejemplo en Perl.


 | 
[Volver] [Catálogo] [Favoritos]