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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.06.2009, 12:31   #1
Tirendus
Форумчанин
 
Аватар для Tirendus
 
Регистрация: 20.03.2009
Сообщений: 272
Сообщение Delphi7, алгоритм для tsrtinglist

Всем привет Вот пытаюсь составить нормальный алгоритм для небольшого xml файла на работе, но никак не могу додумать его до конца.

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
f1,f2: tstringlist;
i,j,x: integer;
b: boolean;
s, isadult: string;
begin
f1:= tstringlist.Create;
f2:= tstringlist.Create;
i:=0;
j:=1;
x:=2;
repeat
    repeat
      b:=false;
      if i<=f1.Count-3 then
        begin
        b:=f1[i]=f1[i+3];
        i:=i+3;
        end;
    until not b;
 f2.Add('  <jadjar>');
 f2.add('    <jad>');
 f2.Add('      <name>'+f1[i-3]+'.jad</name>');
 f2.Add('    </jad>');
 f2.add('    <jar>');
 f2.Add('      <name>'+f1[i-3]+'.jar</name>');
 f2.Add('    </jar>');
 f2.add('        <supportedHandsets>');
  while j<(i+2) do          // проблематичная зона кода
    begin
      f2.Add('<handset><make>'+f1[x]+'</make><model>'+f1[j]+'</model></handset>');
      j:=j+3;
      x:=x+3;
    end;                      // проблематичная зона кода
until (j+3)>f1.Count;
Код проходит по всем строкам текстовика, вот пример самого текстовика:

Цитата:
CloseCall_Nokia7210_en
7210
Nokia
CloseCall_Nokia7210_en
2650
Nokia
CloseCall_Nokia7210_en
3100
Nokia
CloseCall_Nokia7210_en
3108
Nokia
CloseCall_Nokia7210_en
3120
Nokia
CloseCall_Nokia7210_en

Собственно он берет все одинаковые строки i (CloseCall_Nokia7210_en), вставляет их в нужные тэги по 1 разу, пока i = i + 3, потом переходит на j и x и все j и x подставляет в нужные тэги ниже i.


В чём собственно проблема
Скрипт почему-то берет на один элемент j и x больше... не могу понять как точно поставить while.

Спасибо за помощь
Tirendus вне форума Ответить с цитированием
Старый 19.06.2009, 13:01   #2
ОДИНОЧЕСТВО В СЕТИ
Любопытная Вредина
Участник клуба
 
Аватар для ОДИНОЧЕСТВО В СЕТИ
 
Регистрация: 19.06.2009
Сообщений: 1,285
По умолчанию

Код:
until (j+3)>f1.Count-1
Цитата:
if i <> (i+3) then j:= (i-2)
i всегда будет не равно (i+3) поэтому и не работает!!!
Дурь - это особая форма материи, которая не возникает ниоткуда и не исчезает никуда, а лишь переходит из одной головы в другую.

Последний раз редактировалось ОДИНОЧЕСТВО В СЕТИ; 19.06.2009 в 13:12.
ОДИНОЧЕСТВО В СЕТИ вне форума Ответить с цитированием
Старый 19.06.2009, 13:08   #3
Tirendus
Форумчанин
 
Аватар для Tirendus
 
Регистрация: 20.03.2009
Сообщений: 272
По умолчанию

Проблема не в этом, а вот в этом j:=j+3; прога берет на один элемент больше именно из-за этого увеличения j, но как его увеличивать так, что б не брался один лишний элемент каждый раз, я просто не понимаю. попробовал
Код:
if i <> (i+3) then j:= (i-2)
так программа вообще не работает.
Tirendus вне форума Ответить с цитированием
Старый 19.06.2009, 13:51   #4
Anatole
Форумчанин
 
Аватар для Anatole
 
Регистрация: 07.04.2009
Сообщений: 245
По умолчанию

до на чала цикла while у вас известно значение і и j. поэтому можно использовать цикл for, например так:
Код:
for k := 1 to i div 3 do
begin
      f2.Add('<handset><make>'+f1[x]+'</make><model>'+f1[j]+'</model></handset>');
      j:=1+k*3;
      x:=x+3;
    end;                      // проблематичная зона кода
тогда проще регулировать количество повторений цикла
Всякое безобразие должно быть единообразным. Тогда это называется порядком.
Anatole вне форума Ответить с цитированием
Старый 19.06.2009, 14:03   #5
Tirendus
Форумчанин
 
Аватар для Tirendus
 
Регистрация: 20.03.2009
Сообщений: 272
По умолчанию

спасибо, но кажеться я нашел решение проблемы проще

Код:
  while j<(i+2) do
заменил на
Код:
while j<i do
Tirendus вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызов контекстной справки для компонента из Help-файла в Delphi7 Olyshka14 Помощь студентам 0 12.06.2009 20:00
алгоритм для бенчмарка CraZZy RabbIt Общие вопросы Delphi 9 02.03.2009 22:01
Создание инсталлятора для программы, написанной на Delphi7 Anna_4493155 Общие вопросы Delphi 2 18.09.2008 09:12
Direct Mysql Objects v.1.1 для Delphi7 shepelin БД в Delphi 5 28.03.2008 13:23
Алгоритм для Pascal Trojan-PSW.Win32 Помощь студентам 6 29.01.2008 10:17