Avatar billede micfog Nybegynder
17. april 2007 - 21:24 Der er 5 kommentarer og
1 løsning

Parse Ini File eller lignende funktion

Hej,

Jeg har en txt-fil som minder om en .ini fil, hvori der opstår en masse værdier. De er delt ind i hovedkategorier, og dernæst underpunkter med tilknyttede værdier

Eksempel: TEST.INI
[FRONT]
Rideheight L/R=106/106
Spring seat height=30/31.5
Spring=140-60-120

[DOWNLOAD]
TRIGGER (1/min)=0
Run total (s)=3171
Run recording (s)=1129
Start of download=24.09.2006 10:37:52

Alt i alt, minder det jo meget om en .ini-fil, men funktionen Parse_ini_file i PHP kan ikke lide når der er atypisk tegn, såsom "(" eller "/" og meget mere.

Er der en anden måde, hvorpå jeg kan få hevet overskrifterne ud af denne fil og måske endda selv vælge HVILKE jeg ønsker ud. Problemet er samtidig, at jeg ikke ønsker den øverste del af filen som starter med [FRONT] ud, men kun [DOWNLOAD] sektionen.

Parse_ini_file funktionen propper dem i et array, det ville jeg egentlig også være tilfreds med :-) Værdierne skal ligges i en mysql_query INSERT og dernæst lagres i en database - så en nem løsning i den retning, ville være værdsat

Mange tak! Jeg er ret meget "kørt fast" i denne opgave, så jeg håber I kan hjælpe - derfor også de høje point!
Avatar billede micfog Nybegynder
17. april 2007 - 21:26 #1
Når jeg skriver at det "Overskrifterne" jeg ønsker hevet ud, så mener jeg selvfølgelig VÆRDIERNE under en specifik overskrift! Beklager fejlen!
Avatar billede windcape Praktikant
18. april 2007 - 04:51 #2
preg_match , og følgende expression kan nok gøre tricket: "/\[([A-Z]+)\]/"
Avatar billede micfog Nybegynder
18. april 2007 - 17:54 #3
Koden jeg indtil videre benytter er:

<?php
$file_array = parse_ini_file("Jyllands-R2-JM-01.HED", true);
print_r ($file_array);
Avatar billede coderdk Praktikant
18. april 2007 - 21:57 #4
Prøv:

<?php

    function my_parse_ini_file( $file, $processSections = false )
    {
        $lines = file( $file );
        $result = array();
        $curkey = '';
        foreach ( $lines as $line )
        {
            $line = trim( $line );
            if ( $line[0] == '[' && $line[ strlen( $line ) - 1 ] == ']' )
            {
                if ( $processSections )
                {
                  $curkey = substr( $line, 1, strlen( $line ) - 2 );
                  $result[$curkey] = array();
                }
            }
            elseif ( $line != '' && strpos( $line, '=') !== false )
            {
                list( $key, $val ) = explode( "=", $line, 2 );
                $key = trim( $key );
                $val = trim( $val );
                if ( !$processSections )
                {
                    $result[$key] = $val;
                }
                else
                {
                    if ( $curkey != '' )
                    {
                        $result[$curkey][$key] = $val;
                    }
                }
            }
        }
        return $result;
    }
   
    $res = my_parse_ini_file( "test.ini", true );
    var_dump( $res );

?>
Avatar billede micfog Nybegynder
18. april 2007 - 22:22 #5
Det virker - AL RESPEKT for det! Den sidenote jeg havde til mit spørgsmål, var om jeg kunne vælge KUN at udtrække værdier EFTER en overskrift - eksempel på fil:

[ID]
Chassis=E90-606
Engine=P45 B20
Clutch=AP 12 Bolt

[LAPTIMES]
Fastest lap=1:11.755
0=0:29.140
1=1:55.007
2=2:06.972

Jeg ønsker kun at få laptimes ud i mit array. Kan du "kringle den" ? Du fortjener allerede pointene!
Avatar billede coderdk Praktikant
18. april 2007 - 22:33 #6
Du bruger den bare:

$ini = my_parse_ini_file( "test.ini", true );
foreach ( $ini['LAPTIMES'] as $key => $val )
{
  echo "$key = $val<br>";
}
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