Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pascal 尝试验证文本文件中的字符时出现循环卡滞_Pascal_Freepascal - Fatal编程技术网

Pascal 尝试验证文本文件中的字符时出现循环卡滞

Pascal 尝试验证文本文件中的字符时出现循环卡滞,pascal,freepascal,Pascal,Freepascal,我必须制作一个程序,从文本文件中读取一些“随机”的字母和数字字符串,并检查它们是否满足某些条件,从而使它们成为有效的密码 条件为:-正好有4位数字 -正好有8个字符 -至少有一个大写字母和一个小写字母 程序读取文件并输出有效密码的数量 这是文本文件的格式: “eR68G12a 91jY643ebjp eRty74kLh 24fG92 aj85gt32 dGb9357jKoup2”(单线) 守则: ' 程序Ej23\u版本3; 变量 char1,char2:char; mayus,减号:布尔;//

我必须制作一个程序,从文本文件中读取一些“随机”的字母和数字字符串,并检查它们是否满足某些条件,从而使它们成为有效的密码

条件为:-正好有4位数字 -正好有8个字符 -至少有一个大写字母和一个小写字母

程序读取文件并输出有效密码的数量

这是文本文件的格式: “eR68G12a 91jY643ebjp eRty74kLh 24fG92 aj85gt32 dGb9357jKoup2”(单线)

守则: '

程序Ej23\u版本3;
变量
char1,char2:char;
mayus,减号:布尔;//mayus和减号分别为大写和小写
cantDigitos、Cantcharacteres、contrasenasValidas:整数;
datos:文本;
开始
赋值(datos,'datos_guia3_ej23.txt');重置(datos);
contrasenasValidas:=0;
char1:='';
Read(datos,char2);
而不是eof(DATO)呢
开始
梅尤斯:=假;减:=假;腕趾:=0;角字符:=0;
如果是(char1='')和(char2''),那么//检查它是否是这个词的开头
开始
而不是eof(DATO)和(char2'')执行
开始
腕关节:=腕关节+1;
如果char2=UPCASE(char2),则//如果字符2等于字符2的大写版本,则字符2为大写
马尤斯:=真的
其他的
如果(字符2位于['0'..'9']),则
cantDigitos:=cantDigitos+1
其他的
减:=真;
如果是eof(datos),那么//当它到达文件末尾时,它还会读取并检查最后一个字符
如果char2=UPCASE(char2),则
马尤斯:=真的
其他的
如果(字符2位于['0'..'9']),则
cantDigitos:=cantDigitos+1
其他的
减:=真;
结束;
如果减号和mayus and(cantDigitos=4)和(cantCaracteres=8),则//如果满足所有条件,则密码有效,并将其添加到计数器中
contrasenasValidas:=contrasenasValidas+1;
char1:=char2;Read(datos,char2)//此时char2应该是一个空字符,因此它将该值传递给char1并读取下一个字符
终点
结束;
书面文件(contrasenasValidas);
结束。

但是当我运行它时,它只是停留在那里,只有提示滴答作响

问题在于您读取文件的方式(一个字符接一个字符)

最好一次读完,然后逐个检查八个字符的所有序列

uses
  SysUtils;

var
  LFile: TextFile;
  LStr, LSubStr: string;
  LStartIndex: integer;
  LExit: boolean;

begin
  AssignFile(LFile, 'Datos_guia3_ej23.txt');
  Reset(LFile);
  ReadLn(LFile, LStr); // Get the whole line

  LStartIndex := 1; // Search all 8 characters sequences, starting from the first character
  LExit := FALSE;
  repeat
    LSubStr := Copy(LStr, LStartIndex, 8);
    if Length(LSubStr) = 8 then
    begin
      // Here check other conditions
      // ...

      Inc(LStartIndex);
    end else
      LExit := TRUE;
  until LExit;

  CloseFile(LFile);
end.

使用调试器解决问题。我们不是调试器的替代者。
uses
  SysUtils;

var
  LFile: TextFile;
  LStr, LSubStr: string;
  LStartIndex: integer;
  LExit: boolean;

begin
  AssignFile(LFile, 'Datos_guia3_ej23.txt');
  Reset(LFile);
  ReadLn(LFile, LStr); // Get the whole line

  LStartIndex := 1; // Search all 8 characters sequences, starting from the first character
  LExit := FALSE;
  repeat
    LSubStr := Copy(LStr, LStartIndex, 8);
    if Length(LSubStr) = 8 then
    begin
      // Here check other conditions
      // ...

      Inc(LStartIndex);
    end else
      LExit := TRUE;
  until LExit;

  CloseFile(LFile);
end.