Memo No Delphi/Firemonkey (Visualizar na vertical)
Boa tarde. Tenho o seguinte código abaixo que me retorna a quantidade de vezes que uma numeração saiu por coluna.
Não estou conseguindo fazer com que a visualização no MemoPosicao fique na horizontal (25 linhas e 15 Colunas).
Para testarem o que estou fazendo alimentar o MemoResultado com essas linhas abaixo:
02 03 05 06 09 10 11 13 14 16 18 20 23 24 25
01 04 05 06 07 09 11 12 13 15 16 19 20 23 24
01 04 06 07 08 09 10 11 12 14 16 17 20 23 24
01 02 04 05 08 10 12 13 16 17 18 19 23 24 25
01 02 04 08 09 11 12 13 15 16 19 20 23 24 25
01 02 04 05 06 07 10 12 15 16 17 19 21 23 25
01 04 07 08 10 12 14 15 16 18 19 21 22 23 25
01 05 06 08 09 10 13 15 16 17 18 19 20 22 25
03 04 05 09 10 11 13 15 16 17 19 20 21 24 25
02 03 04 05 06 08 09 10 11 12 14 19 20 23 24
02 06 07 08 09 10 11 12 16 19 20 22 23 24 25
01 02 04 05 07 08 09 10 11 12 14 16 17 24 25
03 05 06 07 08 09 10 11 13 14 15 16 17 19 23
01 02 05 06 07 09 13 14 15 18 19 20 21 23 25
01 02 04 06 08 10 12 15 16 18 19 21 23 24 25
02 05 06 07 08 10 12 13 15 17 19 21 23 24 25
01 02 03 05 06 07 09 13 14 16 17 18 19 20 21
02 06 07 08 10 11 14 15 17 18 19 20 22 23 24
02 05 06 07 08 10 11 13 14 15 16 17 20 23 24
03 04 06 07 08 09 10 14 16 17 18 19 20 23 24
01 02 04 05 08 11 14 16 18 19 20 22 23 24 25
01 02 03 04 05 06 07 09 10 12 13 14 15 22 25
01 03 04 05 06 08 10 11 12 14 16 17 18 19 20
01 02 03 05 07 10 11 14 17 19 20 21 23 24 25
01 02 03 04 05 06 07 09 13 14 16 20 22 23 24
Poderiam me ajudar.
procedure TForm1.Button1Click(Sender: TObject); var Linha: TStringList; Dezenas: array [1..15, 1..25] of Integer; Resultado: string; i, j, k: Integer; begin // Inicializa a matriz de contagem de dezenas por posição for i := 1 to 15 do for j := 1 to 25 do Dezenas[i, j] := 0; // Percorre linha a linha do MemoResultado for i := 0 to MemoResultado.Lines.Count - 1 do begin Linha := TStringList.Create; try Linha.Delimiter := ' '; Linha.StrictDelimiter := True; Linha.DelimitedText := MemoResultado.Lines[i]; // Conta as dezenas por posição for j := 0 to Linha.Count - 1 do begin k := StrToInt(Linha[j]); Inc(Dezenas[j mod 15 + 1, k]); end; finally Linha.Free; end; end; // Monta a string de resultados Resultado := ''; for i := 1 to 15 do begin for j := 1 to 25 do Resultado := Resultado + IntToStr(Dezenas[i, j]) + #9; // Adiciona o valor separado por TAB Resultado := Resultado + sLineBreak; // Adiciona uma quebra de linha ao final de cada linha end; // Exibe o resultado no MemoObsForasDoFiltros MemoPosicao.Text := Resultado; end;
Não estou conseguindo fazer com que a visualização no MemoPosicao fique na horizontal (25 linhas e 15 Colunas).
Para testarem o que estou fazendo alimentar o MemoResultado com essas linhas abaixo:
02 03 05 06 09 10 11 13 14 16 18 20 23 24 25
01 04 05 06 07 09 11 12 13 15 16 19 20 23 24
01 04 06 07 08 09 10 11 12 14 16 17 20 23 24
01 02 04 05 08 10 12 13 16 17 18 19 23 24 25
01 02 04 08 09 11 12 13 15 16 19 20 23 24 25
01 02 04 05 06 07 10 12 15 16 17 19 21 23 25
01 04 07 08 10 12 14 15 16 18 19 21 22 23 25
01 05 06 08 09 10 13 15 16 17 18 19 20 22 25
03 04 05 09 10 11 13 15 16 17 19 20 21 24 25
02 03 04 05 06 08 09 10 11 12 14 19 20 23 24
02 06 07 08 09 10 11 12 16 19 20 22 23 24 25
01 02 04 05 07 08 09 10 11 12 14 16 17 24 25
03 05 06 07 08 09 10 11 13 14 15 16 17 19 23
01 02 05 06 07 09 13 14 15 18 19 20 21 23 25
01 02 04 06 08 10 12 15 16 18 19 21 23 24 25
02 05 06 07 08 10 12 13 15 17 19 21 23 24 25
01 02 03 05 06 07 09 13 14 16 17 18 19 20 21
02 06 07 08 10 11 14 15 17 18 19 20 22 23 24
02 05 06 07 08 10 11 13 14 15 16 17 20 23 24
03 04 06 07 08 09 10 14 16 17 18 19 20 23 24
01 02 04 05 08 11 14 16 18 19 20 22 23 24 25
01 02 03 04 05 06 07 09 10 12 13 14 15 22 25
01 03 04 05 06 08 10 11 12 14 16 17 18 19 20
01 02 03 05 07 10 11 14 17 19 20 21 23 24 25
01 02 03 04 05 06 07 09 13 14 16 20 22 23 24
Poderiam me ajudar.
Rubens Pena
Curtidas 0
Respostas
Arthur Heinrich
05/03/2024
Aparentemente, seu problema está na montagem final:
Pelo que entendi, o primeiro índice indica a coluna, que vai de 1 a 15. O segundo índice é a linha.
Ao montar o resultado, você deve montar linha a linha, concatenando o conteúdo de cada coluna. Portanto, o loop externo, deve ser o da linha e não o da coluna.
Porém, há uma otimização que você pode fazer. Não é necessário criar e destruir o TStringList a cada linha retornada do Memo.
// Monta a string de resultados Resultado := ''; for i := 1 to 15 do begin for j := 1 to 25 do Resultado := Resultado + IntToStr(Dezenas[i, j]) + #9; // Adiciona o valor separado por TAB Resultado := Resultado + sLineBreak; // Adiciona uma quebra de linha ao final de cada linha end;
Pelo que entendi, o primeiro índice indica a coluna, que vai de 1 a 15. O segundo índice é a linha.
Ao montar o resultado, você deve montar linha a linha, concatenando o conteúdo de cada coluna. Portanto, o loop externo, deve ser o da linha e não o da coluna.
// Monta a string de resultados Resultado := ''; for j := 1 to 25 do begin for i := 1 to 15 do Resultado := Resultado + IntToStr(Dezenas[i, j]) + #9; // Adiciona o valor separado por TAB Resultado := Resultado + sLineBreak; // Adiciona uma quebra de linha ao final de cada linha end;
Porém, há uma otimização que você pode fazer. Não é necessário criar e destruir o TStringList a cada linha retornada do Memo.
Linha := TStringList.Create; try Linha.Delimiter := ' '; Linha.StrictDelimiter := True; // Percorre linha a linha do MemoResultado for i := 0 to MemoResultado.Lines.Count - 1 do begin Linha.DelimitedText := MemoResultado.Lines[i]; // Conta as dezenas por posição for j := 0 to Linha.Count - 1 do begin k := StrToInt(Linha[j]); Inc(Dezenas[j mod 15 + 1, k]); end; end; finally Linha.Free; end;
GOSTEI 0