Delphi combinaçoes - ninguem resolve e muito dificil
09/12/2003
0
tenho um txt no seguinte formato
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 2 3 4 5 6 7 8 9 10 11 12 13 14 16
1 2 3 4 5 6 7 8 9 10 11 12 13 14 17
1 2 3 4 5 6 7 8 9 10 11 12 13 14 18
são linhas contendo apenas 15 numeros por linhas.
gostaria de uma ajuda, quero ler este txt do seguinte modo, tenho uma combo com os seguintes itens
7p e 8i
8p e 7i
quando eu selecionar a 1 opção 7p e 8i quero que ele leia o txt e selecione apenas as linhas que existem 7 numeros pares e 8 impares e jogue esta linha em um memo.
Alguem pode me ajudar?
Snipes
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 2 3 4 5 6 7 8 9 10 11 12 13 14 16
1 2 3 4 5 6 7 8 9 10 11 12 13 14 17
1 2 3 4 5 6 7 8 9 10 11 12 13 14 18
são linhas contendo apenas 15 numeros por linhas.
gostaria de uma ajuda, quero ler este txt do seguinte modo, tenho uma combo com os seguintes itens
7p e 8i
8p e 7i
quando eu selecionar a 1 opção 7p e 8i quero que ele leia o txt e selecione apenas as linhas que existem 7 numeros pares e 8 impares e jogue esta linha em um memo.
Alguem pode me ajudar?
Snipes
Snipes
Curtir tópico
+ 0
Responder
Posts
09/12/2003
Tnaires
Olá snipes
Eu não sei como puxar essas linhas do arquivo, pois nunca trabalhei com arquivos texto no delphi. Mas o complicado mesmo é implementar essa busca por pares e ímpares.
Tente o seguinte código:
Supondo que a opção seja determinada por dois checkboxes de nomes respectivos opcao8p7i e opcao7p8i.
He he... Deve haver maneira mais simples... Sucesso...
Eu não sei como puxar essas linhas do arquivo, pois nunca trabalhei com arquivos texto no delphi. Mas o complicado mesmo é implementar essa busca por pares e ímpares.
Tente o seguinte código:
procedure ParesImpares (linha: string); var token: string; // Conterá o número no formato string npares, nimpares, i: integer; // Para armazenar a qtd de números begin // Inicializando variáveis... npares := 0; nimpares := 0; token := ´´; for i := 1 to Length(linha) do begin if linha[i] <> ´ ´ then // Se o caractere atual não for espaço... token := token + linha[i] // Acrescente o caractere ao token else begin if StrToInt(token) mod 2 = 0 then // Se for par... Inc(npares) // Incremente qtd de números pares else // Se for ímpar... Inc(nimpares); // Incremente qtd de números ímpares token := ´´; // Reinicializar token end; end; // O if abaixo só adiciona a linha ao memo se a opção escolhida // corresponder ao número de pares e ímpares correspondente. if ((npares = 8) and (nimpares = 7) and (opcao8p7i.Checked)) or ((npares = 7) and (nimpares = 8) and (opcao7p8i.Checked)) then Memo1.Lines.Add(linha); end;
Supondo que a opção seja determinada por dois checkboxes de nomes respectivos opcao8p7i e opcao7p8i.
He he... Deve haver maneira mais simples... Sucesso...
Responder
09/12/2003
Deus
Acho que essa coisa de ´ninguém resolve´ é pq ninguém tentou com muita paciência, não? :) Pq não é difícil de jeito nenhum. Meu computador está quebrado, e estou usando o da minha irmã - sem Delphi - logo, este código que vou colocar aqui [b:a66262dc6c]não[/b:a66262dc6c] foi testado por mim, ou seja.. é possível, claro, que dê um erro de compilação ou que não faça a tarefa, mas acho difícil - e, se for o caso, o problema é mínimo. :) De qualquer forma:
Bem, se você quiser adicionar as linhas a um ComboBox, é só colocar o seguinte código no [i:a66262dc6c]OnClick[/i:a66262dc6c] do ComboBox:
OK? Avise-me se funcionou, quero saber se meu compilador mental precisa de uns ajustes! ;) Abraços!
fuction stRetornaLinhas(sArq: String; iPares, iImpares: Integer): TStringList; function stRetornaTexto(sArquivo: String): TStringList; var tfTexto: TextFile; stTexto: TStringList; stTmp: String; begin stTexto := TStringList.Create; try AssignFile(tfTexto, sArquivo); Reset(tfTexto); while not Eof(tfTexto) do begin ReadLn(tfTexto, stTmp); stTexto.Add(Trim(stTmp)); end; except end; Result := stTexto; end; var stTemp: String; stlTemp, stlTexto: TStringList; i, iiCount, ipCount: Integer; begin stlTexto := TStringList.Create; stlTemp := TStringList.Create; stlTemp := sRetornaTexto(sArq); for i := 0 to Pred(stlTexto.Count) do begin iiCount := 0; ipCount := 0; stTemp := stlTexto.Strings[i]; while (Pos(´ ´, stTemp) > 0) do begin if ((StrToInt(Trim(Copy(stTemp, 1, Pos(´ ´, stTemp))))) mod 2 = 0) then inc(ipCount) else inc(iiCount); Delete(stTemp, 1, Pos(´ ´, stTemp)); end; if (iPares = ipCount) and (iImpares = iiCount) then begin stTemp := stlTemp.Strings[i]; stlTexto.Add(stTemp); end; end; Result := stlTexto; end;
Bem, se você quiser adicionar as linhas a um ComboBox, é só colocar o seguinte código no [i:a66262dc6c]OnClick[/i:a66262dc6c] do ComboBox:
Case ComboBox.ItemIndex of 0: Memo1.Lines := RetornaLinhas(´C:\Teste.Txt´, 7, 8); 1: Memo1.Lines := RetornaLinhas(´C:\Teste.Txt´, 8, 7); end;
OK? Avise-me se funcionou, quero saber se meu compilador mental precisa de uns ajustes! ;) Abraços!
Responder
Clique aqui para fazer login e interagir na Comunidade :)