Hulp gezocht met een replace/omzet script

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • walkstyle
  • Registratie: December 2012
  • Laatst online: 27-06-2024
Beste Tweakers,

Ik heb een groot tekst bestand met elke rij dit:
code:
1
193.189.117.139 # lfd: (smtpauth) Failed SMTP AUTH login from 193.189.117.139 (PL/Poland/193.189.117.139.host.e-ring.pl): 5 in the last 3600 secs - Sun Feb 22 07:43:53 2015


En ik zoek een script of manier om het om te zetten in:
SQL:
1
SQL-Query INSERT INTO `admin_fail`.`banned_ips` (`id`, `ip`, `hostname`, `iso`, `date_time`) VALUES (NULL, '193.189.117.139', NULL, 'PL', NULL);


Dus hij moet uit de eerste code zeg maar het eerste woord (IP-adres) eruit halen en zetten bij 2e Value , verder moet die bij de eerste code de landcode eruit halen (PL) en die bij de 4e Value vervangen.

Het is voor een open-source project dus hoop dat iemand kan helpen hierbij.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

En wat had je zelf al geprobeerd? We willen je best helpen maar we gaan dus niet je probleem voor je oplossen zodat je makkelijk kan copy/pasten... Je geeft niet eens aan met welke technieken je werkt. Zie De Quickstart.

Je kan het trouwens met een relatief simpele regular expression oplossen.

[ Voor 18% gewijzigd door NMe op 14-08-2015 17:35 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • walkstyle
  • Registratie: December 2012
  • Laatst online: 27-06-2024
Ik ben geen PHP Programmeur , maar het gaat om een systeem op PHP en MySQL.
Heb het zelf geprobeerd via notepad om zeg maar dingen te vervangen helaas lukte dit niet.

Heb wel wat met preg_replace lopen spelen maar gezien ik geen developer ben ging dat niet echt goed.

Het is ook voor een open-source project maar ik wil best een vergoeding geven indien iemand mij kan helpen.

Acties:
  • 0 Henk 'm!

  • Jogai
  • Registratie: Juni 2004
  • Laatst online: 10-09 21:04
Dit belooft dat je sql kan loslaten op een csv: http://www.scout-soft.com/sql/.
Als je je bron wat kommas geeft is het misschien te doen.

Klik hier om op linkedIn lid te worden van de Freelance Tweakers groep.


Acties:
  • 0 Henk 'm!

  • Douweegbertje
  • Registratie: Mei 2008
  • Laatst online: 08-09 15:03

Douweegbertje

Wat kinderachtig.. godverdomme

walkstyle schreef op vrijdag 14 augustus 2015 @ 18:09:
Ik ben geen PHP Programmeur , maar het gaat om een systeem op PHP en MySQL.
Heb het zelf geprobeerd via notepad om zeg maar dingen te vervangen helaas lukte dit niet.

Heb wel wat met preg_replace lopen spelen maar gezien ik geen developer ben ging dat niet echt goed.

Het is ook voor een open-source project maar ik wil best een vergoeding geven indien iemand mij kan helpen.
Dus wil je een kant en klare oplossing? Daar is vraag en aanbod voor. Devschuurder werven? Gebruik Vraag & Aanbod!

Je geeft ook aan dat je geen PHP programmeur bent, maar dus wel een programmeur? De denkwijze en bepaalde functies zijn niet erg verschillend van andere talen, dus met enige ervaringen in andere talen heb je dit zo in elkaar.


Ik weet dat dit Tweakers is, en ik zou je graag helpen maar op het moment dat we voor iedereen kant en klare meuk gaan aanleveren.. dan ontgaat het nut een beetje van een vraagbaak, ongedacht of je project nu opensource is, of dat iemand een actieve tweaker is of niet etc.

Kijk, als je zelf moeite in iets wilt steken, en dingen wilt gaan proberen.. prima; kom dan met de dingen op een fatsoenlijke manier waar je op vast loopt. Dan wordt je heus wel verder geholpen. En als je een concrete oplossing wilt; huur dan iemand in.


ps. je bent vast niet de enige. Google gewoon eens op "PHP parse log" . Simpel voorbeeld: https://github.com/kassner/log-parser Hier kun je het één en ander vandaan halen. Overigens, kom ook niet direct vragen stellen over dit.. eerst zelf proberen en als je uiteindelijk nog een vraag hebt: duidelijk formuleren met o.a. wat je zelf hebt geprobeerd

[ Voor 11% gewijzigd door Douweegbertje op 14-08-2015 21:18 ]


Acties:
  • +1 Henk 'm!

  • Sgreehder
  • Registratie: Juni 2004
  • Laatst online: 24-06 14:35
Voorgaande reacties zou ik bijna niet sneller kunnen intikken dan de behoorlijk eenvoudige expressie zelf:

http://sandbox.onlinephpf...2327b5ebc8495a8e20f5e7d9c

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Sgreehder schreef op zondag 16 augustus 2015 @ 22:13:
Voorgaande reacties zou ik bijna niet sneller kunnen intikken dan de behoorlijk eenvoudige expressie zelf:

http://sandbox.onlinephpf...2327b5ebc8495a8e20f5e7d9c
En daar wordt de topicstarter hoe precies wijzer van? Geen uitleg, magisch stukkie code zonder comments om te copy/pasten etc. etc.
Give a man a fish and feed him for a day. Teach a man how to fish and feed him for a lifetime.
En nu kan topicstarter volgende week weer een nieuw topic openen wanneer 'ie een iets andere case heeft waarbij jouw specifieke oplossing niet werkt. Geef dan op z'n minst wat tekst-en-uitleg erbij. Maar ja, regex in anderhalve zin uitleggen is natuurlijk niet zo makkelijk ;)

[ Voor 20% gewijzigd door RobIII op 16-08-2015 22:18 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Sgreehder
  • Registratie: Juni 2004
  • Laatst online: 24-06 14:35
Prima, geef je toch wat meer uitleg erbij. Alsof je daar niet zelf niet kan achterkomen met een internetverbinding.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/^(\d+\.\d+\.\d+\.\d+).+?\(([A-Z]+)\/.+$/

    ^ assert position at start of the string
    1st Capturing group (\d+\.\d+\.\d+\.\d+)
        \d+ match a digit [0-9]
            Quantifier: + Between one and unlimited times, as many times as possible, giving back as needed [greedy]
        \. matches the character . literally
        \d+ match a digit [0-9]
            Quantifier: + Between one and unlimited times, as many times as possible, giving back as needed [greedy]
        \. matches the character . literally
        \d+ match a digit [0-9]
            Quantifier: + Between one and unlimited times, as many times as possible, giving back as needed [greedy]
        \. matches the character . literally
        \d+ match a digit [0-9]
            Quantifier: + Between one and unlimited times, as many times as possible, giving back as needed [greedy]
    .+? matches any character (except newline)
        Quantifier: +? Between one and unlimited times, as few times as possible, expanding as needed [lazy]
    \( matches the character ( literally
    2nd Capturing group ([A-Z]+)
        [A-Z]+ match a single character present in the list below
            Quantifier: + Between one and unlimited times, as many times as possible, giving back as needed [greedy]
            A-Z a single character in the range between A and Z (case sensitive)
    \/ matches the character / literally
    .+ matches any character (except newline)
        Quantifier: + Between one and unlimited times, as many times as possible, giving back as needed [greedy]
    $ assert position at end of the string

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Sgreehder schreef op zondag 16 augustus 2015 @ 22:20:
Alsof je daar niet zelf niet kan achterkomen met een internetverbinding.
Je kunt overal zelf achter komen met een internetverbinding. Wat is dat nou voor argument?

De "uitleg" die je geeft zal iemand die nog nooit een regex heeft gezien ook niet veel wijzer maken; voor die mensen is 't gewoon een magische brei aan letters, leestekens etc. zonder enige betekenis. Ook de waarom de regex op een specifieke manier is opgebouwd wordt uit je "uitleg" niet duidelijk(er). TS zal na lezen van je "uitleg" nog steeds niet in staat zijn zélf een regex te schrijven en is dus, netto, nog steeds geen steek wijzer.

Lang verhaal kort: er is een reden waarom we in onze Quickstart zo hameren op eigen inzet, laten zien wat men al heeft gezocht/gevonden/geprobeerd, want dan kunnen we inhaken op 't punt waar iemand blijft steken en hem/haar vanaf dat punt verder helpen in plaats van de oplossing voorgekauwd en wel op een zilveren dienblaadje aan te reiken en dit forum tot een afhaalchinees te laten degraderen.

[ Voor 24% gewijzigd door RobIII op 16-08-2015 22:26 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • hellum
  • Registratie: Oktober 2007
  • Laatst online: 29-08 16:36
Ik zou het op deze manier oplossen (uit het hoofd, code niet getest).
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
    $file = fopen("bron.txt", "r");
    if ($file) {
        while (($line = fgets($file)) !== false) {
            $ip = explode(" # ", $line)[0];
            $query = "SQL-Query INSERT INTO `admin_fail`.`banned_ips` (`id`, `ip`, `hostname`, `iso`, `date_time`) VALUES (NULL, '".$ip."', NULL, 'PL', NULL);";
            // Doe nog iets met de query 
        }

        fclose($file);
    } else {
        echo "Bronbestand niet gevonden";
?>

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Hij wil het IP en de landcode uit die string halen. Jij hebt de landcode voor het gemak maar even hardcoded erin gezet. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • hellum
  • Registratie: Oktober 2007
  • Laatst online: 29-08 16:36
NMe schreef op zondag 16 augustus 2015 @ 22:37:
Hij wil het IP en de landcode uit die string halen. Jij hebt de landcode voor het gemak maar even hardcoded erin gezet. ;)
|:( |:( lezen is ook een vak, zal het morgen even aanpassen

Acties:
  • 0 Henk 'm!

  • Sgreehder
  • Registratie: Juni 2004
  • Laatst online: 24-06 14:35
Niet raar, misschien voor een beginner ook iets makkelijker te herleiden dan een regex. Je kunt op deze wijze ook de landcode herleiden.

code:
1
2
$ip = trim(reset(explode('#', $code))); // 193.189.117.139
$iso = substr(reset(explode('/', $code)), -2); // PL (ISO 3661 alpha-2)

Acties:
  • 0 Henk 'm!

  • Douweegbertje
  • Registratie: Mei 2008
  • Laatst online: 08-09 15:03

Douweegbertje

Wat kinderachtig.. godverdomme

Sgreehder schreef op zondag 16 augustus 2015 @ 22:13:
Voorgaande reacties zou ik bijna niet sneller kunnen intikken dan de behoorlijk eenvoudige expressie zelf:

http://sandbox.onlinephpf...2327b5ebc8495a8e20f5e7d9c
Klopt.
Net zoals dat je inhoudelijk niets toevoegt, iets voorkauwen en even een stukje code neergooien is inderdaad heel makkelijk. Ik hoop dat je ooit inziet waarom we geen kant en klare oplossingen bieden.
Pagina: 1