|
#1
|
||||
|
||||
Сортировщик мыл
Нужно написать программу которая из файла с кучей мыльников будет доставать мыла зарегенные на определенном сайте(сайт задеться), и сохранять их в другой файл
файл тип *.txt 1@mail.ru 2@list.ru 3@mail.ru 4@list.ru 5@mail.ru 6@list.ru 7@list.ru Проблема в том, что не могу сравнить в TStringList значение после "@". |
#2
|
||||
|
||||
Цитата:
Код:
Function ExtractMail(S:String):String; begin Result:=Copy(S,Pos('@',S)+1,Length(S); end; Код:
for index:=0 to list.count-1 do s:= UpperCase(ExtractMail(List[Index])); if s ='MAIL.RU' then list2.add(s); end; — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#3
|
||||
|
||||
Result:=Copy(S,Pos('@',S)+1,Length(S));
не могу разобраться что делает функция, в конечено файле сохраняеться только mail.ru(3 раза), нужно польностью все мыло. Как я понял, UpperCase - переводит все символы в верхний регистр, а как все в нижний преревести? |
#4
|
|||
|
|||
Код:
for index:=0 to list.count-1 do s:= UpperCase(ExtractMail(List[Index])); if s ='MAIL.RU' then list2.add(s); - здесь не преобразованную строку надо а полностью item end; Result:=Copy(S,Pos('@',S)+1,Length(S)); - Копирует из строки S, начиная со следующего за @ символа все что в ней есть. для перевода в нижний регистр функция LowerCase правильный вопрос содержит в себе 90% ответа |
#5
|
||||
|
||||
А зачем +1?
СПС, а если дублирующие встерчаються как их с уже сформированного фаила удалить? Пытался из list1 удалить(list1.delete(s) значение если оно копируется в list2, но почему то постоянно выходит ошибка о кол-ве строк, как этого избежать? Последний раз редактировалось The King Bear, 19.12.2008 в 12:48. |
#6
|
|||
|
|||
+1 затем, что функция Pos возвращает номер символа @, а тебе надо копировать со следующего.
Удалять надо с конца или использовать цикл, отличный от For. Дело в том, что цикл For - цикл с предвычисляемым условием. Т.е. в начале цикла вычисляется условие его окончания. А ты в процессе выполнения цикла удаляешь элементы, т.е. уменьшаешь их кол-во. Вот у тебя ошибка и получается. |
#7
|
|||
|
|||
может проще для результирующего списка задать
Код:
list.Sorted := true; list.Duplicates := dupIgnore; правильный вопрос содержит в себе 90% ответа |
#8
|
||||
|
||||
Цитата:
для результирующего списка не работает, только при добавлении. Последний раз редактировалось The King Bear, 23.12.2008 в 07:14. |