Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Нужен несложный парсер. (https://forum.antichat.xyz/showthread.php?t=130462)

fasty 19.07.2009 15:51

Нужен несложный парсер.
 
Вобщем нужно из такого вида акков:
mail@mail.ru
password
-----------------
Сделать

mail@mail.ru:password


Кто сможет помогите,заранее благодарен.

Fata1ex 19.07.2009 15:58

Вид файла:
Код:

мыло1
пасс1
мыло2
пасс2

?

fasty 19.07.2009 16:05

мыло1
пасс1

мыло2
пасс2

мыло3
пасс3

mailbrush 19.07.2009 16:14

PHP код:

<?php

$i 
1;
foreach (
file('mails.txt') as $line)
{
    
$line trim($line);
    if (
$line)
    {
        
$i++;
        if (!(
$i 2))
            echo 
$line;
        else
            echo 
';' $line "<br>\r\n";
    }
}

?>

Без использования регулярок, прочих функций - только цикл и эхо.

fasty 19.07.2009 16:26

Спасибо большое.

Fata1ex 19.07.2009 16:38

Я опоздал :(
Хотя у mailbrush'a, по-моему, что-то не то :)
added: у него все то, просто я кривой :(

Код:

#!/usr/bin/env python3

import sys

filename = sys.argv[1]
emails = []
passwords = []
tmp = 1
 
for line in open(filename):
    if line.strip():
        emails.append(line.strip()) if tmp % 2 == 1 else passwords.append(line.strip())
        tmp += 1
           
for i in range(len(emails)):
    temp = emails[i] + ':' + passwords[i]
    print(temp, file = open("out.txt", "a"))

in.txt
Код:

lala@mail.ru
password1

coco@mail.ru
password2

kaka@mail.ru
password3

out.txt
Код:

lala@mail.ru:password1
coco@mail.ru:password2
kaka@mail.ru:password3

сделал чуть короче (

mailbrush 19.07.2009 16:41

Fata1ex, мой работает :)
added: не увидел added :)

cupper 19.07.2009 20:23

Код:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
# Водной файл берем либо из параметра при запуске скрипта, либо по дефолту input.txt
# Запис производиться в файл output.txt
try:
        filename = sys.argv[1]
        print "Используется файл с данными " + filename,
except IndexError:
        print "Испольуется стандартный файл с данными input.txt",
        filename="input.txt"

try:
        f1 = open(filename, "r")
        f2 = open("output.txt", "w")
except IOError:
        print "Чёта я файл открыть немогу :("
        exit(1)

while 1:
          f2.write(f1.readline()[0:-1] + ':' + f1.readline())
          print temp,
          sNull = f1.readline()
          if not sNull:
                  break
         
f2.close()
f1.close()

Вход
Код:

AdfsdA
222222

BsfsddfB
444444

CgjjjfggdfC
444444

Выход:
Код:

AdfsdA:222222
BsfsddfB:444444
CgjjjfggdfC:444444

Чем он лучьше скрипта написанного Fata1ex:
1.
Код:

for line in open(filename):
    if line.strip():
        emails.append(line.strip()) if tmp % 2 == 1 else passwords.append(line.strip())
        tmp += 1

Объем используемой оперативки на прямую хависит от объема вхоного файла - это Бэд
2.
Код:

for i in range(len(emails)):
    temp = emails[i] + ':' + passwords[i]
    print(temp, file = open("out.txt", "a"))

Зачем столько раз открывать файл на дозапись ?

PHP незнаю, так что тут молчу.
PS. все сделано исключительно в образовательных целях, и только ради интереса

mailbrush 19.07.2009 21:49

Ну или самый короткий вариант:
PHP код:

<?php

$i 
1;
foreach (
file('mails.txt') as $line)
{
    
$line trim($line);
    if (
$line)
    {
        
$i++;
        echo 
$i ';' $line "<br>\r\n" $line;
    }
}

?>


login999 19.07.2009 23:08

cupper, ты не прав насчет первой претензии к фаталексу, он не читает файл в оперативку, конструкция open(filename) не читает файл, а получает хэндлер на него, а когда он делат for line in filehandler то там идет итератор и построчное чтение, так что это пох :D, насчет второго - это маленькие слабости py3k , там поправить -дело пары сек, нужно просто в print передавать хэндлер, но это так лирика :D
И раз уж меряетесь пиписьками, то всуну и я свою кривую реализацию

Код:

#! usr/bin/env python
#-*-encoding:cp1251-*-

try:
    with open("input.txt") as inpt:
        with open("out.txt", "a") as out:
            account = {"mail":None,
                      "password":None}
            for line in inpt:
                line = line.translate(None, "\r\n")
                if not line:
                    out.write("{0}:{1}\n".format(account["mail"], account["password"]))
                    account["mail"] = None
                    account["password"] = None
                elif not account["mail"]:
                    account["mail"] = line
                elif not account["password"]:
                    account["password"] = line
except Exception, e:
    print e

на входе input.txt, на выходе будет out.txt
P.S. cupper, понял что смутило в твоем коде - бесконечный цикл


Время: 17:29