Avatar billede ohmish Nybegynder
14. maj 2003 - 03:02 Der er 27 kommentarer og
1 løsning

Regulære udtryk, hiv værdier ud af txtfil. Del 2.

Dette spørgsmål er en fortsættelse af http://www.eksperten.dk/spm/352245

Jeg har en txt-fil med en lang liste, der efter lidt explode og andet forbehandling ser sådan her ud for hvert medlem:

================================================
Subject: Nyt medlem!

Below is the result of your feedback form.  It was submitted by (hans@hans.dk) on Thursday, August 9, 2001 at 14:59:03

Navn: Hans
Gade: Hansegade 999
Postnr: 1234
By: Hanseby
Alder: 35
Instrument: Violin
Stilart: Folk/country
Reference: Hjemmesidelink
Kommentar: Jeg mener ikke at blah blah.
|

Og efter at ha kørt det igennem lidt regulære udtryk, er alle værdier adskilt og klar til at smide i database.

Hans
Hansegade 999
1234
Hanseby
35
Violin
Folk/country
Hjemmesidelink
Jeg mener ikke at blah blah.

Men hvad gør jeg hvis linierne ikke altid er ens sat op (rækkefølge)..
og hvad med sidste linie (som også kan variere)?
"Kommentar: " er det sidste felt. Hvis det ikke findes kan det jo ikke bruges som "opdeler" med regulære udtryk.

Skabelonen på hvert afsnit kan variere en smule, alt efter om personen har udfyld felterne. Dvs. hvis feltet "Kommentar: " er tomt skrives der slet ikke Kommentar: .

Felterne "gade, postnr og by" var valgfrit så det er ikke altid det er med. "Navn" og "reference" er altid med.

Er det muligt at lave et par "eller" hist og pist, f.eks adskilt med "|"?
jeg ka itt hitt ud af'et.
Avatar billede Slettet bruger
14. maj 2003 - 03:09 #1
Så vidt jeg forstår vil Navnet altid komme før adressen ikke og adressen før postnr, osv. ik'?
Avatar billede Slettet bruger
14. maj 2003 - 03:19 #2
I det tilfælde kan du bruge følgende... til at generere regexp'et...
og så bruges $parts_in_str til at sætte værdierne de rigtige steder....
<?php
$str = "Navn: Hans
Gade: Hansegade 999
Postnr: 1234
By: Hanseby
Alder: 35
Instrument: Violin
Stilart: Folk/country
Reference: Hjemmesidelink
Kommentar: Jeg mener ikke at blah blah";

$regexp = "";
$parts = array("Gade","Postnr","By","Alder","Instrument", "Stilart", "Reference","Kommentar");
$parts_in_str = array();
foreach($parts as $value)
{
    if(strpos($str,$value)!==false)
    {
        $regexp .= "($value: )(((.)|(\\n))*)";
        $parts_in_str[] = $value;
    }
}
$regexp = "/".$regexp."/i";
?>
Avatar billede ohmish Nybegynder
14. maj 2003 - 03:22 #3
jo. puuha det er svært.

Felter der SKULLE udfyldes var:
Navn, email (dén har jeg), by og reference. så de er altså sikre.
Det er et gammelt tilmeldingssystem jeg lavede i 99, og det har ændret sig lidt undervejs, men jeg har aldrig fået det opdateret før nu.

Hvis man sætter det op er rækkefølgen altid (parentes=mulige):

Navn:
( Gade: )
( Postnr: )
By:
( Alder: )
( Instrument: )
( Stilart: )
Reference:
( Andet sted: )
( Kommentar: )
Avatar billede Slettet bruger
14. maj 2003 - 03:25 #4
Ok... håber du kan se logikken i det ovenstående...
Og så er det det med hver femte i $matches....
når du har kørt det ovenstående og preg_match så fortsæt med følgende.....
$i=2;
$newinfo = array();
foreach($part_in_str as $value)
{
    $newinfo[$value]=$matches[$i];
    $i+=5;
}
Avatar billede k-asp-er Nybegynder
14. maj 2003 - 03:30 #5
<!--Du skal have en database, der skal åbnes for skrivning og så følgen asp-kode, der er en form, der smider værdierne direkte i tabellen "mitinput"

Kode i toppen af asp-siden

-->
<%
       
        if request.form("save") <> "" then
               
        navn = request.form("navn")
        gade = request.form("gade")
        zip = request.form("zip")
        town = request.form("town")
        alder = request.form("alder")
        instrument = request.form("instrument")
        stilart = request.form("stilart")
        reference = request.form("reference")
        kommentar = request.form("kommentar")
        set ins = db.execute("insert into mitinput (navn,gade,zip,town,alder,instrument,stilart,reference,kommentar) values ('" & navn & "','" & gade & "','" & zip & "','" & town & "','" & alder & "','" & instrument & "','" & stilart & "','" & reference & "','" & kommentar & "')")       
       
%>   

<!-- selve formen -->
<html>
<HEAD>
<TITLE> denneside.asp</TITLE>
<HEAD>
<BODY>

<form name='save' action="denneside.asp" method="post">

<table cellpadding="0" cellspacing="0" border="1">
        <tr>
                <td>Navn</td>
                <td><input name="navn" size="30" ></td>
        </tr>
        <tr>
                <td>Gade</td>
                <td><input name="gade" size="30" ></td>
        </tr>
        <tr>
                <td>Postnummer/By</td>
                <td><input name="zip" size="10" >/<input name="town" size="20" ></td>
        </tr>
        <tr>
                <td>Alder</td>
                <td><input name="alder" size="30" ></td>
        </tr>
        <tr>
                <td>Instrument</td>
                <td><input name="instrument" size="30" ></td>
        </tr>
        <tr>
                <td>Stilart</td>
                <td><nobr><input name="stilart" size="30" ></td>
        </tr>
        <tr>
                <td>Reference</td>
                <td><input name="reference" size="30" ></td>
        </tr>
        <tr>
                <td>Kommentar<br><br></td>
                <td><TEXTAREA name="kommentar" rows="4" cols="37"></TEXTAREA><br><br></td>
        </tr>
        <tr>
                <td></td>
                <td><input type="submit" name="save" value="Send">&nbsp;<INPUT type="Reset" value="Slet"></td>
        </tr>

         
</table>
</BODY>
</HTML>
Avatar billede ohmish Nybegynder
14. maj 2003 - 03:38 #6
kasper du har vist misforstået det...
Avatar billede jakoba Nybegynder
14. maj 2003 - 03:39 #7
hvorfor smider du feltnavnene væk? ville idealet ikke være et assocoativt array:

$formdata = array(
  "Navn" => "Hans",
  "Gade" => "Hansegade 999",
  "Postnr" => "1234",
  "By" => "Hanseby",
  "Alder" => "35",
  "Instrument" => "Violin",
  "Stilart" => "Folk/country",
  "Reference" => "Hjemmesidelink",
  "Kommentar" => "Jeg mener ikke at blah blah."
);

hvor rækkefølgen er underordnet. og det er nemt at checke whilke felter der er udfyldt.
Avatar billede Slettet bruger
14. maj 2003 - 03:42 #8
jakoba>>Han skal have smidt X antal text filer ind i en database....
Filerne er på det angivne format ovenover. Indholdet til navn, gade osv. skal så trækkes ud og lægges ind i databasen.
Avatar billede ohmish Nybegynder
14. maj 2003 - 03:42 #9
regin> ka du sætte det hele sammen? jeg ka sgu ikke lige overskue det nu. ikke min hjemmebane, det du disker op med :)
Avatar billede Slettet bruger
14. maj 2003 - 03:45 #10
Nu har jeg ikke testet det... men det burde virke... *GG*
Hvis der ikke kommer noget ordentligt output så lav lige en echo $regexp i bunden....

<?php
$str = "Navn: Hans
Gade: Hansegade 999
Postnr: 1234
By: Hanseby
Alder: 35
Instrument: Violin
Stilart: Folk/country
Reference: Hjemmesidelink
Kommentar: Jeg mener ikke at blah blah";

$regexp = "";
$parts = array("Gade","Postnr","By","Alder","Instrument", "Stilart", "Reference","Kommentar");
$parts_in_str = array();
foreach($parts as $value)
{
    if(strpos($str,$value)!==false)
    {
        $regexp .= "($value: )(((.)|(\\n))*)";
        $parts_in_str[] = $value;
    }
}

$regexp = "/".$regexp."/i";
$matches = array();
preg_match($regexp, $medlem, $matches);
$newinfo = array();
$i=2;
foreach($part_in_str as $value)
{
    $newinfo[$value]=$matches[$i];
    $i+=5;
}
print_r($newinfo);
?>
Avatar billede ohmish Nybegynder
14. maj 2003 - 03:52 #11
ay caramba. jeg prøver lige. man burde ha gode chancer på Niels Bohr hvis man mestrer det her.
Avatar billede ohmish Nybegynder
14. maj 2003 - 03:59 #12
Warning: Invalid argument supplied for foreach() in c:\www\medlemmer\index.php on line 32
Array ( )
Avatar billede Slettet bruger
14. maj 2003 - 04:01 #13
type fejl....
foreach($part_in_str as $value) skal rettes til
foreach($parts_in_str as $value)
Avatar billede ohmish Nybegynder
14. maj 2003 - 04:01 #14
echo $regexp gir dette:

/(Gade: )(((.)|(\n))*)(Postnr: )(((.)|(\n))*)(By: )(((.)|(\n))*)(Alder: )(((.)|(\n))*)(Instrument: )(((.)|(\n))*)(Stilart: )(((.)|(\n))*)(Reference: )(((.)|(\n))*)(Kommentar: )(((.)|(\n))*)/i
Avatar billede ohmish Nybegynder
14. maj 2003 - 04:03 #15
nu gir print_r($newinfo); dette:

Array ( [Gade] => [Postnr] => [By] => [Alder] => [Instrument] => [Stilart] => [Reference] => [Kommentar] => )
Avatar billede ohmish Nybegynder
14. maj 2003 - 04:04 #16
jeg ved ikke.. er der noget du ikke har fortalt, som du regner med jeg selv finder ud af? hehe
Avatar billede Slettet bruger
14. maj 2003 - 04:05 #17
Ret $parts til:
$parts = array("Navn", "Gade","Postnr","By","Alder","Instrument", "Stilart", "Reference","Kommentar");
Hvad giver print_r($matches);????
Avatar billede ohmish Nybegynder
14. maj 2003 - 04:08 #18
newinfo giver: Array ( [Navn] => [Gade] => [Postnr] => [By] => [Alder] => [Instrument] => [Stilart] => [Reference] => [Kommentar] => )

matches giver: Array ( )

regexp giver: /(Navn: )(((.)|(\n))*)(Gade: )(((.)|(\n))*)(Postnr: )(((.)|(\n))*)(By: )(((.)|(\n))*)(Alder: )(((.)|(\n))*)(Instrument: )(((.)|(\n))*)(Stilart: )(((.)|(\n))*)(Reference: )(((.)|(\n))*)(Kommentar: )(((.)|(\n))*)/i
Avatar billede Slettet bruger
14. maj 2003 - 04:12 #19
Endnu en åndsvag type fejl.... $medlem og $str...

<?php
$str = "Navn: Hans
Gade: Hansegade 999
Postnr: 1234
By: Hanseby
Alder: 35
Instrument: Violin
Stilart: Folk/country
Reference: Hjemmesidelink
Kommentar: Jeg mener ikke at blah blah";

$regexp = "";
$parts = array("Navn","Gade","Postnr","By","Alder","Instrument", "Stilart", "Reference","Kommentar");
$parts_in_str = array();
foreach($parts as $value)
{
    if(strpos($str,$value)!==false)
    {
        $regexp .= "($value: )(((.)|(\\n))*)";
        $parts_in_str[] = $value;
    }
}

$regexp = "/".$regexp."/i";
$matches = array();
preg_match($regexp, $str, $matches);
$newinfo = array();
$i=2;
foreach($parts_in_str as $value)
{
    $newinfo[$value]=$matches[$i];
    $i+=5;
}
print_r($newinfo);
?>

?>
Avatar billede ohmish Nybegynder
14. maj 2003 - 04:12 #20
her er min kode:

<?php

$filename = 'medlemmer.txt';
$fp = fopen($filename, "r");
$contents = fread($fp, filesize($filename));
$contents = explode('|', $contents);

foreach($contents as $text) {

if ($text) {
$regexp = "";
$parts = array("Navn", "Gade", "Postnr", "By", "Alder", "Instrument", "Stilart", "Reference", "Kommentar");
$parts_in_str = array();

foreach($parts as $value) {
    if(strpos($text,$value)!==false) {
        $regexp .= "($value: )(((.)|(\\n))*)";
        $parts_in_str[] = $value; }
}

$regexp = "/".$regexp."/i";
$matches = array();
preg_match($regexp, $medlem, $matches);
$newinfo = array();
$i=2;

foreach($parts_in_str as $value) {
    $newinfo[$value]=$matches[$i];
    $i+=5; }

echo "newinfo giver: "; print_r($newinfo);
echo "<br>matches giver: "; print_r($matches);
echo "<br>regexp giver: ".$regexp;
echo "<br>$text<br><br>";

    }
}

fclose($fp);

?>
Avatar billede ohmish Nybegynder
14. maj 2003 - 04:13 #21
ah ok. jeg har sat point lidt op :)
Avatar billede Slettet bruger
14. maj 2003 - 04:14 #22
Den ovenover virker... testede lige på min egen...
Avatar billede ohmish Nybegynder
14. maj 2003 - 04:14 #23
nu er matches perfekt. hurrah
Avatar billede Slettet bruger
14. maj 2003 - 04:16 #24
Så vil jeg daffe i seng...
Avatar billede ohmish Nybegynder
14. maj 2003 - 04:17 #25
Næsten da..

Array ( ) Array ( [0] => Navn: Tommy Præst Møller Gade: spanien 15 a Postnr: 8000 By: Århus Alder: 19 Instrument: Guitar mundharmonika Stilart: blues Reference: Ven Kommentar: Det er en rigtig lækker side i har ( Super ) PÅ forhånd tak . T P Møller

hvordan behandler jeg så dét.. opdeling osv?
Avatar billede Slettet bruger
14. maj 2003 - 04:20 #26
Det er $newinfo du skal bruge...
I mit giver ovenstående m. print_r($newinfo):
Array ( [Navn] => Tommy Præst Møller [Gade] => spanien 15 a [Postnr] => 8000 [By] => Århus [Alder] => 19 [Instrument] => Guitar mundharmonika [Stilart] => blues [Reference] => Ven [Kommentar] => Det er en rigtig lækker side i har ( Super ) PÅ forhånd tak . T P Møller )
Det skulle ikke være så svært at håndtere...
Avatar billede ohmish Nybegynder
14. maj 2003 - 04:23 #27
aah. sorry, jeg byttede rundt. tak ska du ha :)

læg et svar
Avatar billede Slettet bruger
14. maj 2003 - 04:24 #28
Anytime... :P
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester