Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Dagma Collela

Reescrever texto sem repetir nem 1 linha C#

Recommended Posts

Olá galera, estou lendo text normal e reescrevendo, só que esse txt, e uma importação de um sistema, para outro, até ai ok!
Esses dias deu probleminha, esta vindo linhas repetidas, não me pergunte pq, pois e um sistema privado.

Dai veio a necessidade de ter que retirar as linhas repetidas, pois quando vai ser efetuada consulta no MYSQl, ele fala que nao pode ser realizada pq esta retornando mais de uma query. ok

Então fiz um código e ele, ate tava funcionando, mas agora as linhas estao vindo mista no txt, ele nao funfa mais. Oque preciso, ler o arquivo exportado do sistema, e reescrever ele, mas ao mesmo tempo que estiver reescrevendo preciso tar lendo e comparando as linhas, no caso se ja tiver a linha escrita nao reescrever ok? sei sou péssimo para expor meu problema! kkk

Abaixo o código que utilizei.. Depois que fiz esse lembrei que ja fiz um parecido! Sorry!..

 


            //Stream que lerá o arquivo original
            StreamReader Leitor = new StreamReader(@"Z:\Internet\AVALIACAOPARCIAL.txt", Encoding.GetEncoding("iso-8859-1"));

            //Stream que gerará o arquivo modificado
            StreamWriter Escreve = new StreamWriter(@"Z:\Internet\AVALIACAOPARCIALNovo.txt");

            //Variável que recebe a linha lida naquele momento
            String Linha = "";

            //Enquanto não for o final do arquivo original
            while (!(Leitor.EndOfStream))
            {
                //Linhar recebe a linha lida naquela interação
                Linha = Leitor.ReadLine();

                // Aqui define se a linha atual será escrita, ou não
                if (!(Linha.Substring(0, 0) == Leitor.ReadLine()))
                {
                    Escreve.WriteLine(Linha);
                }
            }
            //Fecha o stream de leitura
            Leitor.Close();
            //Fecha o stream de escrita.
            Escreve.Close();

Compartilhar este post


Link para o post
Compartilhar em outros sites

Porque você não dá um SELECT DISTINCT no MySQL? Para comparar se já existem linhas repetidas você precisaria ter todas as linhas em um array onde você ia ter que ficar comparando, isso pesa muito na memória.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então eu tentei SELECT DISTINCT no mysql, mas o problema que uso sub select, dai não consegui implementar o select DISTINCT, tem o fato dos parâmetros que uso na pesquisa

 

SELECT
      (SELECT nomeDisciplina FROM  disciplina AS tbDisciplina, alunos
       WHERE tbDisciplina.codDisciplina = tbAvaliacaoParcial.codDisciplina
       AND tbAvaliacaoParcial.alunos_codAluno = alunos.codAluno) AS disciplinaDescricao,
      (
        ELECT DISTINCT (@atividade1) notaConceito from avaliacaoparcial as tbavaliacaoparcialsub
        where tbavaliacaoparcialsub.codDisciplina = tbavaliacaoparcial.codDisciplina
        and tbavaliacaoparcialsub.nomeAvaliacao = @atividade1
        and tbavaliacaoparcialsub.codAvaliacao = tbavaliacaoparcialsub.codAvaliacao
        AND tbavaliacaoparcialsub.alunos_codAluno = tbavaliacaoparcial.alunos_codAluno


         ) AS atividade1,


         (
         SELECT DISTINCT (@atividade2) notaConceito from avaliacaoparcial as tbavaliacaoparcialsub
         where tbavaliacaoparcialsub.codDisciplina = tbavaliacaoparcial.codDisciplina
         and tbavaliacaoparcialsub.nomeAvaliacao = @atividade2
         and tbavaliacaoparcialsub.codAvaliacao = tbavaliacaoparcialsub.codAvaliacao
         AND tbavaliacaoparcialsub.alunos_codAluno = tbavaliacaoparcial.alunos_codAluno


           )  AS atividade2,
           (
         SELECT DISTINCT (@atividade3)  notaConceito from avaliacaoparcial as tbavaliacaoparcialsub
          where tbavaliacaoparcialsub.codDisciplina = tbavaliacaoparcial.codDisciplina
          and tbavaliacaoparcialsub.nomeAvaliacao = @atividade3
          and tbavaliacaoparcialsub.codAvaliacao = tbavaliacaoparcialsub.codAvaliacao
          AND tbavaliacaoparcialsub.alunos_codAluno = tbavaliacaoparcial.alunos_codAluno


           )  AS atividade3


          FROM avaliacaoparcial as tbAvaliacaoParcial
          WHERE tbAvaliacaoParcial.anoLetivo = '2014'
          AND tbAvaliacaoParcial.alunos_codAluno = @CodAluno
          AND tbAvaliacaoParcial.codEtapa = '1'
          AND tbAvaliacaoParcial.codDisciplina = @disciplina


          GROUP BY codDisciplina
          ORDER BY disciplinaDescricao"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas pelo que eu to vendo aqui na sua query ela é um select com vários selects dentro, o que eu estou propondo para você é algo do tipo

SELECT DISTINCT * 
FROM
(

<SUA QUERY ATUAL>

)

Ele deve eliminar as recorrências duplicadas, caso isso não aconteça então algo que você fez na query, talvez alguma ligação entre tabelas, esteja errada. Lembre-se de sempre ligar as tabelas por suas chaves primárias.

 

Mas tenha em mente o seguinte: O DISTINCT só vai eliminar linhas repetidas se todas as colunas da linha forem exatamente iguais às de outra linha, então se qualquer uma das colunas for diferente ele não vai remover, vai continuar duplicado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deu mesmo erro.

Eu verifiquei, e as tabelas estão relacionadas corretamente,

As linhas estão totalmente repetidas.

Oque eu acho que possa ser, eu ter entendido errado, então vou te mostrar como eu fiz.

SELECT DISTINCT * 
FROM
(

<Aqui dentro dos parentes, eu coloquei todo meus select, mostrado na postagem #3.>

)as sp

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se o dinstinct ainda está mostrando linhas iguais significa que em alguma parte elas não são iguais... porque caso contrário ele deveria suprimi-las.

 

Ao invés de utilizar selects de várias tabelas, já pensou em usar um inner join?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por exemplo, eu não do select em varias tabelas apenas em 2,

Os SubSelects, são para enviar as informações para GridView.

A minha tabela esta a sim "Resumidamente"

 

nomeAvaliacao | Nota

Prova Mensal | 4.0

ponto Trabalho | 4.0

etc...

 

Os SubSelect, uso para pegar nomeAvaliacao e Nota, a sim mando para o GridView.

Eu fui confirmar, mas as linhas estão exatamente (100%) iguais.

Duro é que o sistema na qual importo essas informações, que esta me passando os dados a sim!

Eu até pensei em reformular minha tabela de uma maneira que facilita-se a leitura no DB, só que para cada serie eu tenho uma variante, de nome de avaliação e nota.

Por isso achei que fosse melhor, ler e reescrever um outro arquivo sem as linhas repetidas, por que dai eu colocaria no DB, e a leitura ficaria mais fácil, só que essas linhas estão vindo misturadas no arquivo de texto!. Ai fico complexo pra mim. Antes elas vinha juntas tipo uma embaixo da outra, dai eu ate conseguia remover, e agora por algum motivo elas estão vindo misturadas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então cara, mas o problema de linhas repetidas não diz respeito ao programa, e sim ao banco. Alguma ligação entre essas tabelas que você colocou está fazendo com que ele retorne mais de um registro por nota ou por atividade. O que você provavelmente pode fazer é criar uma View para as atividades e, sobre esta view, criar outra view para filtrá-las no seu sistema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então o software que me da esses dados que estou tentando arrumar, e de uma outra empresa, eles liberaram, essa exportação de qualquer jeito, Pois eles vendem o sistema online, e para empresa que trabalho não viável comprar, e pagar manutenção, como essa empresa exige. Então estou criando um sistema online a partir dessa exportação que software deles me passa. então só da pra mim trabalhar com essas exportações que ta vindo duplicadas!..

Agora estou travado, nesse arquivo, único que ta me dando tanto trabalho.

Só para reforça, eu estou lendo esses arquivos e inserindo no MYSQL para que o sistema, possa passar online, sem ter nem uma ligação com sistema dos caras alem do mais pq tem senha para tudo. ou seja então preciso arrumar jeito de inserir isso no banco de dados que criei. esse arquivo único que ta me dando tanto trabalho.

Se tiver mais alguma coisa que eu possa fazer aqui para arrumar isso agradeço, até vou tentando outras alternativas, não recomendadas Obrigado!. Aguardando!..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Foi o que eu disse, você vai precisar melhorar sua query, sugiro que você poste ela na nossa área de bancos de dados, provavelmente alguém lá (talvez o Motta) responda para você e remova essas duplicatas ai podemos continuar com a parte do sistema em si.

 

Existem outros meios de se remover linhas duplicadas via sistema, porém não vou falar que esse é uma boa solução, pois exige um processamento muito maior, as vezes para algo muito simples.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.