Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2011, 17:30   #1
VankaNV
Новичок
Джуниор
 
Регистрация: 11.12.2011
Сообщений: 2
По умолчанию Независимый регистр(поиск)

Привет всем.
Имеется код поиска, как сделать независимый регистр?
заранее спасибо.


Код:
procedure poisk(var a: ft);
var i: integer;
  zk: spisok;
  Brand: string;
begin
  clrscr;
  reset(a);
  writeln('Vvedite brand dlja poiska ');
  readln(Brand);
  writeln('spisok s zadannym brandom ');
  while not eof(a) do
  begin
    read(a, zk);
    if zk.brand = Brand then
    begin
      write(' ', zk.brand);
    write(' ', zk.model);
    write(' ', zk.year);
    write(' ', zk.size);
    write(' ', zk.color);
    write(' ', zk.sex);
    write(' ', zk.price);
    write(' ', zk.height);
      writeln;
    end;
  end;
  close(a);
  writeln;
  readln;
end;
VankaNV вне форума Ответить с цитированием
Старый 12.12.2011, 20:16   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

нужно обе строки приводить к одному и тому регистру (либо нижнему - LowerCase, либо вверхнему - UpperCase).

Если в brand может быть исключительно латиница - тогда это совсем легко (см. функцию UpCase() )
если же в строке может быть в том числе и кириллица, то прийдётся использовать чуть более сложные варианты.
можно, например, такой взять:
Код:
function StrUpper(Str: PChar): PChar; assembler;
asm
        PUSH    DS
        CLD
        LDS     SI,Str
        MOV     BX,SI
        MOV     DX,DS
@@1:    LODSB
        OR      AL,AL
        JE      @@2
        CMP     AL,'a'
        JB      @@1
        CMP     AL,'z'
        JA      @@1
        SUB     AL,20H
        MOV     [SI-1],AL
        JMP     @@1
@@2:    XCHG    AX,BX
        POP     DS
end;



var
  s2 : PChar;
begin
  s2 := 'В щи добавляет не только французский сыр но и CalaMber';
  s2 := StrUpper(s2);
  WriteLn(s2);
end.
или модификация - такой вариант:
Код:
function UpChar (c:char):char;
Label	U1,U2,U6;
begin
  asm
	MOV	AL,c
	CMP	AL,060h
	JNA	U6
        CMP     AL,07Ah
        JA	U1
	SUB	AL,20h
        JMP     U6
U1:	CMP	AL,09Fh
	JNA	U6
	CMP	AL,0AFh
	JA	U2
        SUB	AL,20h
        JMP     U6
U2:	CMP	AL,0DFh
	JNA	U6
	CMP	AL,0EFh
        JA	U6
        SUB	AL,50h
U6:     MOV     [BP-1],AL
  end;
end;

function Upper(s:string):string;
var i:byte;
begin
  for i:=1 to byte(s[0]) do s[i]:=UpChar(s[i]);
  Upper:=s;
end;


var
  s : string;
begin
  s := 'Маша добавляет в щи французский сыр CalaMber?';
  s := Upper(s);
  WriteLn(s);
end.
или, если вариант с ассемблерной вставкой кажется слишком сложным/непонятным/опасным, можно попробовать ещё такой вариант:
Код:
function UpperRus(s : string) : string;
const 
  LoRus = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя';
  UpRus : string = 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ';
var i : integer;
begin
  for i:=1 to Length(s) do
    if Pos(s[i],LoRus)>0 then s[i] := UpRus[Pos(s[i],LoRus)]
    else s[i] := UpCase(s[i]);
  UpperRus := s
end;

begin
  Write(UpperRus('test is Only Best В чаще юга жил был цитрус!'));
  readln
end.
ну и дальше у себя пишите:
Код:
if UpperRus(zk.brand) = UpperRus(Brand) then
...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.12.2011, 08:23   #3
VankaNV
Новичок
Джуниор
 
Регистрация: 11.12.2011
Сообщений: 2
По умолчанию

Спасибо большое, upcase как раз то что нужно.

Еще вопрос, чтоб уж не создавать новую тему:
есть процедура вывода данных, как пронумеровать каждую строчку?
VankaNV вне форума Ответить с цитированием
Старый 15.12.2011, 10:54   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,726
По умолчанию

выводить номер перед выводом строки
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Независимый проект Pro100Chel Общие вопросы C/C++ 17 18.06.2010 23:12
Невыводит регистр ax DrHome Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 26.04.2010 00:08
регистр vitalik007 Общие вопросы Delphi 2 15.09.2007 02:41