Me ajudem em meu algoritmo! [RESOLVIDO]

Boa tarde GUJ, antes de dizer, desculpe se eu postei na área errada, mas eu queria a sua ajuda para portar esse algoritmo em C# para Java (ou fazendo um novo algoritmo). Motivos: o programa que eu gostei muito é feito em C#, eu tenho a source code dele, e estou portando para java e melhorando o programa, na minha opinião eu portei 75%

Algoritmo em C#

string[] hofFurniFiles = System.IO.File.ReadAllText(thisDir + "gamedata\\furnidata.txt").Split(new string[] { "[\"", "\"],[\"" }, StringSplitOptions.RemoveEmptyEntries); foreach (string f in hofFurniFiles) { try { string[] parts = f.Split(new string[] { "\"", "\"" }, StringSplitOptions.RemoveEmptyEntries); string FileName = ""; if (parts[4].Contains('*')) FileName = parts[4].Split('*')[0]; else FileName = parts[4]; FileName += ".swf"; downloadFile(SwfData.HofFurni + "/" + parts[6] + "/" + FileName, thisDir + "dcr\\hof_furni\\" + FileName, false); } catch { continue; } }

Para vocês terem uma ideia do furnidata.txt, vejam esse site: http://www.habbo.com.br/gamedata/furnidata

downloadFile é um void que eu já portei, usando o HttpURLConnection, BufferedInputStream e OutputStream.

Caso vocês não entendam o que eu queria, imagine que o programa irá pegar somente isso: " [[“s”,“13”,“shelves_norja”,“39635”,“0”,“1”,“1”,"#ffffff,#F7EBBC",“Estante”,“Para itens decorativos”,"","-1","-1","",“1”], ", eu quero é pegar somente duas partes, que é a “shelves_norja” e “39635” (o que está em negrito), e formar uma URL desse jeito: …/39635/shelves_norja.swf, o resto deixa pra lá, ao achar o " ],[ ", irá comecar o algoritmo de novo, pegando somente a parte que está em negrito, e montando uma URL (while resolve isso).

A parte em negrito não tem nome e números definidos, só é a parte em que eu quero pegar o texto e montar uma URL.

Desde já obrigado. jomp16

Galera, eu consegui mais ou menos o que eu queria

[code]try {
bf1 = new BufferedReader(new FileReader(“DOWNLOADS/” + RELEASE_NAME + “/gamedata/furnidata.txt”));
//String testea[] = {Pattern.quote("[") + “”", “”" + Pattern.quote("]") + “,” + Pattern.quote("[") + “”"};
String teste1 = bf1.readLine();
//String blah = bf1.readLine().replaceAll(Pattern.quote("[") + “”", “”);
//String blas = blah.replaceAll(""" + Pattern.quote("]") + “,” + Pattern.quote("[") + “”", “”); //bf1.readLine().replaceAll(""" + Pattern.quote("]") + “,” + Pattern.quote("[") + “”", “”);
String teste2 = teste1.replaceAll(Pattern.quote("[") + “”", “”);
String teste = teste1.replaceAll(""" + Pattern.quote("]"), “”);
String teste3 = teste.replaceAll(""" + Pattern.quote("]") + “,” + Pattern.quote("[") + “”", “”);
String teste4[] = teste3.split(""");
for (int i = 0; i < teste4.toString().length(); i++) {
System.out.println(teste4[3]);
}
//while ((teste1 = bf1.readLine()) != null) {
//String teste2 = teste1.replaceAll(Pattern.quote("[") + “”", “”); //teste1.split(Pattern.quote("[") + “”").toString();
//String teste3 = teste2.replaceAll(""" + Pattern.quote("]") + “,” + Pattern.quote("[") + “”", “”); // teste2.replaceAll(""" + Pattern.quote("]") + “,” + Pattern.quote("[") + “”", “”);
//String testeg = teste1.replaceAll(""" + Pattern.quote("]") + “,” + Pattern.quote("[") + “”", “”" + Pattern.quote("]") + “,” + Pattern.quote("[") + “”\n");
// String teste4[] = teste1.split(""");
// System.out.println(teste4[5]);
//}
} catch (IOException e) {

        }[/code]

Mas ele não está percorrendo todo o txt, alguma alma generosa poderia me ajudar nisso? Por favor! Preciso disso!

Já desse jeito:

[code]try {
bf1 = new BufferedReader(new FileReader(“DOWNLOADS/” + RELEASE_NAME + “/gamedata/furnidata.txt”));
//String testea[] = {Pattern.quote("[") + “”", “”" + Pattern.quote("]") + “,” + Pattern.quote("[") + “”"};
String teste1; // = bf1.readLine();
//String blah = bf1.readLine().replaceAll(Pattern.quote("[") + “”", “”);
//String blas = blah.replaceAll(""" + Pattern.quote("]") + “,” + Pattern.quote("[") + “”", “”); //bf1.readLine().replaceAll(""" + Pattern.quote("]") + “,” + Pattern.quote("[") + “”", “”);
//String teste2 = teste1.replaceAll(Pattern.quote("[") + “”", “”);
//String teste = teste1.replaceAll(""" + Pattern.quote("]"), “”);
//String teste3 = teste.replaceAll(""" + Pattern.quote("]") + “,” + Pattern.quote("[") + “”", “”);
//String teste4[] = teste3.split(""");
while ((teste1 = bf1.readLine()) != null) {
String teste2 = teste1.replaceAll(Pattern.quote("[") + “”", “”); //teste1.split(Pattern.quote("[") + “”").toString();
String teste3 = teste2.replaceAll(""" + Pattern.quote("]") + “,” + Pattern.quote("[") + “”", “”); // teste2.replaceAll(""" + Pattern.quote("]") + “,” + Pattern.quote("[") + “”", “”);
String testeg = teste1.replaceAll(""" + Pattern.quote("]") + “,” + Pattern.quote("[") + “”", “”" + Pattern.quote("]") + “,” + Pattern.quote("[") + “”\n");
String teste4[] = testeg.split(""");
System.out.println(teste4[5]);
}
} catch (IOException e) {

        }[/code]

Ele NÃO percorre a linha toda, ele após pegar o dado, ele parte para a próxima linha, eu só queria que ele percorresse a linha toda até chegar ao ’ "]] ’ , aí ele iria mudar para outra linha, entende? Em parte eu consegui o que eu queria, só o problema é o que eu já relatei, ele não lê tudo.

O resultado é:

shelves_norja table_plasto_square*9 rcandleset prizetrophy2*1 pillar*8 shelves_norja*8 bed_polyfon*7 divider_nor5 tree1 pura_mdl5*8 summer_pool*1 noob_table*5 noob_rug_tradeable*4 diner_sofa_1*4 svnr_fi eco_lamp3 ads_calip_parasol byesw_hotel val_table1 fball_ptch6 hosptl_cab1 wf_act_toggle_state bling11_plant newbie_nest race_trophy sound_set_75 eleblock3 xmas11_throne snowb_divider toy2 mnstr_rebreed_2 TicTacToe lc_window2 xm09_bauble_6 cubie_wallshelf_p

Se vocês verem o http://www.habbo.com.br/gamedata/furnidata , irão ver que ele está pulando a linha, não está lendo toda a linha, portando, me ajudem!

Melhorei meu algoritmo, porém ainda não cumpre o que eu quero, eu tentei de tudo, quebra de linha quando chegar ao “],[” - O \n fica no lugar do , - quebrou a linha, tinha tudo para dar certo, porem essa porra só insiste em pegar só a que começam com o [[ (talvez porque é uma linha separada sem o \n, aí eu fiz um algoritmo que criava um novo arquivo, e fazia um replace antes do if(blah.contains("\n") { printWriter.println(); }, porém quando eu faço isso, o txt fica mais bugado ainda, o String[] não suporta o vazio que o printWriter.println(); faz)

Novo algoritmo

try { bf1 = new BufferedReader(new FileReader("DOWNLOADS/" + RELEASE_NAME + "/gamedata/furnidata.txt")); String teste1; while ((teste1 = bf1.readLine()) != null) { String teste2 = teste1.replace("[\"", "").replace("\"],[\"", ""); String teste4[] = teste2.split("\""); System.out.println(teste4[4]); } } catch (IOException e) { System.out.println(e.getMessage()); }

PRECISO DE AJUDA!

Não é por nada não, mas isso não lembra CSV ou JSON? Acho que daria para você usar alguma coisa parecida com isso. Não capriche muito em expressões regulares :slight_smile:

Eu nunca ouvi falar do CSV ou JSON, por isso eu não sei como é. Se você puder explicar ou postar um exemplo, eu agradeço. E eu não entendi o que é “expressões regulares”. (só sei o básico do Java, mas eu estou programando a cada dia, assim aprendo mais rápido).

Novidades, pedi ajuda para meu amigo gringo que manja de Java, ele me ajudou, aqui segue o código dele:

[code]public static void main(String[] args)
{
try
{
FileInputStream filestream = new FileInputStream(“C:/xampp/htdocs/gamedata/furnidata.txt”);
DataInputStream dataStream = new DataInputStream(filestream);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(dataStream));

		String f;

		while ((f = bufferedReader.readLine()) != null) 
		{
			if (f.equals("") == false)
			{
				String noBrackets = f.replace("[\"", "").replace("\"],[\"", "");
				String backSlashSplit[] = noBrackets.split("\"");
				System.out.println(backSlashSplit[4]);
			}
		}
	}
	catch (Exception e)
	{
		e.printStackTrace();
	}
}[/code]

E o resultado do algoritmo com ele é:

http://pastie.org/4751518

Eu feliz por o algoritmo estar pronto e funcionando, eu implementei em meu projeto, resultado? Sempre dá a mesma resposta que o meu algoritmo dava, eu testei isso em IntelliJ IDEA, Netbeans, Eclipse, até tentei criar um projeto do zero e criei um .java e compilei usando o javac, mas essa merda sempre dá a mesma resposta! Eu me pergunto isso: por que será que com meu amigo gringo ele funcionou, mas comigo não funcionou?! Preciso de respostas! Desde já agradeço, jomp16

Boas notícias!

Outro meu amigo que manja de C# e Java portou o algoritmo e funcionou em meu sistema!

[code]String fileContents = “”;
String lineBuffer;

BufferedReader bf1 = new BufferedReader(new FileReader(“furnidata.txt”));
while((lineBuffer = bf1.readLine()) != null) {
fileContents += lineBuffer;
}
bf1.close();

String[] hofFurniFiles1 = fileContents.split("\[\"");
for(String e : hofFurniFiles1) {
if(e.length() < 4)
continue;

String[] hofFurniFiles2 = e.split("\\\"\\]\\,\\[\\\"");
for(String f : hofFurniFiles2) {
    if(f.length() < 4)
        continue;

    String[] parts = f.split("\\\"");
    String FileName = parts[4].split("\\*")[0];
    System.out.println(FileName);
}

} [/code]

Até que enfim eu consegui o que eu queria, e eu posso fechar esse tópico :wink: