Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Analizar String de un archivo .txt (https://www.clubdelphi.com/foros/showthread.php?t=65161)

qot2287 25-11-2009 01:32:28

Analizar String de un archivo .txt
 
Hola, soy nueva en esto , de un archivo de texto plano, tengo que saber cuantas letras aparecen por linea, y cuantos digitos por linea.

ejemplo:

ab3
3eMssa
ess

el resultado deberia ser
1.- 2 letras, 1 digito
2.- 5 letras, 1 digito
3.- 3 letras, 0 digito

ya se como cargar el archivo de texto y el ciclo para recorrer el archivo, y luego.
Para leer una linea uso Readln(T,s);
y un for i:=1 to lenght(s) do
pero nose como hacer la comparacion si s[i] es letra o un el digito.
como hacerlo comparando con el codigo ASCII s[i]=>41 o s[i]<=90 o s[i]=>97o s[i]<=122 para las letras y s[i]=>30 s[i]<=39 para los digitos...esa esta es mas o menos la idea que tengo

oscarac 25-11-2009 05:25:46

quiza esto te pueda Servir

es una funcion que te detecta si un digito es un numero
Código:

function IsNumeric(s: String) : Boolean;
var
  Code: Integer;
  Value: Double;
begin
  val(s, Value, Code);
  Result := (Code = 0)
end;

Si es true entonces es un numero si no es un caracter

saludos

MichelH 25-11-2009 05:31:15

No soy experto y a lo mejor mi respuesta es muy laboriosa pero espero te sirva de ayuda.

Este codigo compara solo letras y numeros de un archivo, no contaria ningun otro caracter, despues guarda el resultado en otra variable que le puedes hacer lo que quieras:

Código Delphi [-]
procedure TFormMain.SpeedButton1Click(Sender: TObject);
var
  vFile, vResultdo     : TStrings;
  i, j, vLetras, vDigitos : Integer;

begin

  // INICIALIZAR VARIABLE TSTRINGS DONDE SE GUARDARA EL RESULTADO
  vResultdo := TStringList.Create;

  // CARGAR ARCHIVO A VARIABLE TSTRINGS
  vFile := TStringList.Create;
  vFile.LoadFromFile('c:\archivo.txt');

  // RECORRER FILAS
  for i:=0 to (vFile.Count-1) do begin
      vLetras  := 0;
      vDigitos := 0;

      // RECORRER LETRAS POR LETRA DE LA FILA
      for j:= 1 to length( vFile[i] ) do begin

          // pARA LAS LETRAS
          if ( (ord(vFile[i][j]) >= 65) and (ord(vFile[i][j]) <= 90) )  or
             ( (ord(vFile[i][j]) >= 97) and (ord(vFile[i][j]) <= 122) ) then
             vLetras := vLetras + 1

          // PARA LOS NUMEROS
          else if (ord(vFile[i][j]) >= 48) and (ord(vFile[i][j]) <= 57) then
             vDigitos := vDigitos + 1;

      end;

      // GUARDAR RESULTADO EN OTRO TSTRINGS
      vResultdo.Add( IntToStr( i ) + ': ' + IntToStr( vLetras ) + ' letras, ' + IntToStr( vDigitos ) + ' digitos' );

  end;

  // MOSTRAR RESULTADO
  ShowMessage( vResultdo.Text );

end;

Saludos!!

qot2287 25-11-2009 05:53:19

gracias MichelH...justo lo que tenia que hacer..

Neftali [Germán.Estévez] 25-11-2009 10:40:54

Cita:

Empezado por MichelH (Mensaje 347382)
No soy experto y a lo mejor mi respuesta es muy laboriosa pero espero te sirva de ayuda.

Me suena a que le has hecho los deberes... :D:D:D:D


La franja horaria es GMT +2. Ahora son las 15:52:47.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi