![]() |
|
|
#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; |
|
#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 |
|
#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; |
|
#8
|
||||
|
||||
|
Цитата:
для результирующего списка не работает, только при добавлении. Последний раз редактировалось The King Bear, 23.12.2008 в 07:14. |