Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сравнение числа с маской\обработка строки 
V
    Опции темы
overfe1
Дата 12.2.2006, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 12.2.2006

Репутация: нет
Всего: нет



то есть есть файл с числами ( gen.txt) нужно из него взять построчно и сравнить каждую строку с маской и записать в файл sorted.txt,то есть например в gen.txt все числа от 10 до 99 и маска у меня x9 то в sorted.txt запишутся все числа заканчивающиеся на 9..
вот кусок кода,я как только не пробывал,нормально сортироватся не хочет,то записывает число если есть хоть один символ из маски то ещё что%)
помогите плизз,очень надо
или хотя бы подскажите с помошью чего можно выполнить такую сортировку =)
Цитата

var
fo,fi: textfile;
s,w,x,i: string;
n,m: integer;
begin
x :='x';
w :=edit3.Text;
m :=Length(w);
AssignFile( Fo, 'gen.txt' );
Reset( Fo );
assignfile(fi,'sorted.txt');
rewrite(fi);
n :=0;
while not eof( Fo ) do
begin
Readln(Fo,s);
вот здесь нужна помощь по обработке
writeln(fi,s);
end;
CloseFile(Fo);
CloseFile(Fi);


Это сообщение отредактировал(а) overfe1 - 12.2.2006, 13:41
PM MAIL   Вверх
remax
Дата 12.2.2006, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент
**


Профиль
Группа: Участник Клуба
Сообщений: 686
Регистрация: 7.4.2002
Где: Украина, Харьков

Репутация: нет
Всего: 5



Из предположения, что есть только двузначные числа и маска млжет быть одного из трех видов
1) x(число), например x9
2) (число)x, например 9x
3) xx

x-строковая переменная, маска
s-строковая переменная, число

Код

If ((x[1]='x')  and (x[2]=s[2])) or
   ((x[2]='x')  and (x[1]=s[1])) or
    (x='xx')
  then  { Добавляем в sort.txt}
    writeln(fi,s);


При желании, легко эту реализацию распостранить на одно значные, трех значные и пр.

Это сообщение отредактировал(а) remax - 12.2.2006, 16:31


--------------------
Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку
PM MAIL ICQ Skype   Вверх
volvo877
Дата 12.2.2006, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



overfe1, попробуй вот так (для простоты я сделал с массивами, но думаю, что переделать под твою задачу не составит труда...):
Код
const
  n = 10;
  arr: array[1 .. n] of string =
    ('11', '12', '13', '14', '15',
     '23', '24', '35', '37', '45');

var
  i, j: integer;
  s, mask: string;
  isOk: boolean;
begin
  mask := 'XX';
  for i := 1 to n do begin

    isOk := true;

    if length(arr[i]) = length(mask) then begin
      s := arr[i];
      for j := 1 to length(mask) do begin
        isOk := isOk and ((mask[j] = 'X') or (mask[j] = s[j]));
      end;

      if isOk then writeln(arr[i]);
    end;

  end;
end.

PM MAIL   Вверх
overfe1
Дата 12.2.2006, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 12.2.2006

Репутация: нет
Всего: нет



remax спасибо,кст сначала код был чуть не правильный,я исправил,а тут захожу у тебя тоже исправлен =)) ты меня натолкнул на решение ( я не знал что в условном операторе можно лделать по действия м всё теперь все понятно =))

volvo877 благодарю сейчас буду разбиратся smile
PM MAIL   Вверх
overfe1
Дата 12.2.2006, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 12.2.2006

Репутация: нет
Всего: нет



Цитата(remax @ 12.2.2006, 14:37)
Из предположения, что есть только двузначные числа и маска млжет быть одного из трех видов
1) x(число), например x9
2) (число)x, например 9x
3) xx

x-строковая переменная, маска
s-строковая переменная, число

Код

If ((x[1]='x')  and (x[2]=s[2])) or
   ((x[2]='x')  and (x[1]=s[1])) or
    (x='xx')
  then  { Добавляем в sort.txt}
    writeln(fi,s);


При желании, легко эту реализацию распостранить на одно значные, трех значные и пр.

всё прекрасно работает,но если к примеру числа не 2-значные а 3-х получается намного больше вариантов =))
а представь если они 7-ми значные ? варианты растут в огромной прогресси,надо придумать как это все пустить по циклу =)))
позже буду думать smile

Это сообщение отредактировал(а) overfe1 - 12.2.2006, 17:38
PM MAIL   Вверх
volvo877
Дата 12.2.2006, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



overfe1, поэтому я и предложил тебе свой вариант... А ты его даже не попробовал... smile Вот так всегда...
PM MAIL   Вверх
darkart
Дата 12.2.2006, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 379
Регистрация: 9.11.2005

Репутация: нет
Всего: 31



Вариант...
Код

program MaskStr;
procedure CreateMaskFile(strSrcFileName,strResFileName,strMask:string);
{Процедура берет слова из файла с именем strSrcFileName, сравнивает каждое слово с маской и если слово удовлетворяет маске то записывает его в файл с именем strResFileName.
Примечание:
если символ маски не входит в константу UsedSymbols, то он считается символом любого символа, также любой символ не входящий в UsedSymbols считается разделителем в файле.
}
const
  UsedSymbols=['0'..'9'];{список нужных символов}
var
  bolResult:boolean;{флаг}
  ch:char;{считываемый символ}
  i,len:integer;{i-счетчик, len-длина строки}
  strTemp:string;{считываемое слово}
  FIn,FOut:textfile;{FIn-входной файл, FOut-выходной}
begin
  AssignFile(FIn,strSrcFileName);{связывание переменной}
  AssignFile(FOut,strResFileName);{связывание переменной}
  reset(FIn);{открытие для чтения}
  rewrite(FOut);{открытие для перезаписи}
  while not eof(FIn) do{пока не конец файла}
  begin
    strTemp:='';{инициализация}
    read(FIn,ch);{чтение символа}
    while not(eof(FIn) or (ch in UsedSymbols)) do {пока символа ch нет в списке нужных}
      read(FIn,ch);{чтение след. символа}
    while not eof(FIn) and (ch in UsedSymbols) do{пока символ нам подходит}
    begin
      strTemp:=strTemp+ch;{добавляем символ}
      read(FIn,ch);{читаем следующий}
    end;
    len:=Length(strTemp);{узнаем длину считанного слова}
    if len=Length(strMask) then{если длина слова совпадает с длиной файла}
    begin
      bolResult:=true;{инициализация}
      i:=1;{инициализация счетчика}
      while (i<=len) and bolResult do{перебираем все символы слова}
      begin
        if strMask[i] in UsedSymbols then{если символ в UsedSymbols, то смотрим символ маски}
          bolResult:=strMask[i]=strTemp[i];
        inc(i);
      end;
    {выход из цикла произошел при i>len либо при bolResult=false}
      if (i>len) and bolResult then writeln(FOut,strTemp);{проверили все символы и не нашли ошибок}
    end;
  end;
  CloseFile(FOut);{закрытие файла}
  CloseFile(FIn);{закрытие файла}
end;
var
  strSrcFileName,strResFileName,strMask:string;
begin
  writeln('Please enter source file name:');
  readln(strSrcFileName);
  writeln('Please enter result file name:');
  readln(strResFileName);
  writeln('Please enter a mask:');
  readln(strMask);
  CreateMaskFile(strSrcFileName,strResFileName,strMask);
  writeln('ok');
  readln;
end.

PM MAIL WWW ICQ Skype GTalk   Вверх
overfe1
Дата 12.2.2006, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 12.2.2006

Репутация: нет
Всего: нет



Цитата(volvo877 @ 12.2.2006, 17:39)
overfe1, поэтому я и предложил тебе свой вариант... А ты его даже не попробовал... smile Вот так всегда...


если чесно я не всё там понял smile я пробывал,просто е получилось его исправить его под мой код (так как я не всё понял) а так ещё раз спасибо,обязательно завтра попробую =))
darkart спасибо завтра попробую%)

Это сообщение отредактировал(а) overfe1 - 12.2.2006, 23:09
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0843 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.