/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
String udlæsning ?
Fra : Lasse Madsen


Dato : 21-03-03 15:45

Hej Igen !


Jeg har en string gemt i en variabel $string
denne string ser sådan ud uden gåse øjnene ""


">1O10000000010000<"

Det der altid er "fast" er ">1O" og "<"
Alle tallene mellem dette kan ændre sig binært altså 1 eller 0

jeg vil gerne hente disse ud i variabler fra A til N således

">1OABCDEFGHIJKLMN<"

men hvordan i al verden kan jeg gå ind via PHP og isolere dette når total
strengen kan se således ud


$string = "test>1O10010010010000<dette123"

Hvordan kan jeg få PHP til at starte sin "isolering" med ">1O" og slutte med
"<" samt udlæse A til N i variabler ?


jeg er selv bange for at dette ikke er muligt men jeg må indrømme at jeg
ikke er helt dus med de mange string funktioner i PHP

Hjælp modtages med kyshånd !

Med Venlig Hilsen
Lasse Madsen





 
 
Niels Andersen (21-03-2003)
Kommentar
Fra : Niels Andersen


Dato : 21-03-03 16:09

Lasse Madsen wrote in <3e7b2557$0$24638$edfadb0f@dread14.news.tele.dk>:
> jeg vil gerne hente disse ud i variabler fra A til N således
> ">1OABCDEFGHIJKLMN<"
> men hvordan i al verden kan jeg gå ind via PHP og isolere dette når total
> strengen kan se således ud
> $string = "test>1O10010010010000<dette123"

Først: Det med $a, $b, $c osv. lyder ikke smart. Det er nok nærmere et array
der er praktisk:

echo 'Første tal er '.$tal[0]', og femte tal er '.$tal[4].'.';

Og så et tip:
Hvis du fx. lagrer "10010010010000" (altså de tal du skal bruge) som en
streng, så kan man hive dele ud som om det var et array. Dvs:
<?php
$navn = "Madsen";
echo 'Det tredje bogstav er et "'.$navn[2].'".";
?>

Så er vi efterhånden ved at være der, vi mangler bare at få "klippet" den
rigtige del ud. Der er mange måder at gøre det på. Mit forslag er ikke
måden jeg selv ville gøre det på, men det er en løsning der er nem at
forstå som begynder.


Først finder vi ud af hvor der står ">10" henne. Det gør vi sådan her:

$start = strpos($string, '>10');

Vi ved at der er 14 tegn, så det behøver vi ikke at finde ud af. Så vi skal
hen til den position vi har fundet, og tage de næste 14 tegn:

$tal = substr($string, $start, 14);

Hvis du vil holde fast i $a, $b, $c... så kan du gøre sådan her:

$a = $tal[0];
$b = $tal[1];
$c = $tal[2];
....

Det kan naturligvis også gøres smartere, hvis du altså VIL gøre det på den
måde. :)

Der er omkring en million andre måder at gøre det på (altså trække de 14 tal
ud). Hvilken der er bedst kommer meget an på sammenhængen.

--
Mvh.
Niels Andersen
http://myplace.dk/articles/getpost/?lang=da

Thomas Lindgaard (22-03-2003)
Kommentar
Fra : Thomas Lindgaard


Dato : 22-03-03 14:16

Niels Andersen <niels-usenet@myplace.dk> wrote in
news:87355776.sb86uE6vq0@home.myplace.dk:

> Det kan naturligvis også gøres smartere, hvis du altså VIL gøre det på
> den måde. :)
>
> Der er omkring en million andre måder at gøre det på (altså trække de
> 14 tal ud). Hvilken der er bedst kommer meget an på sammenhængen.

Jeg gad ikke lige vaske mere op lige nu, så her er mit bud (som gerne
skulle være lidt smartere :)

<?php

   $string =
"test>1O10010010010000<dette123test>1O11011011010000<slutprut";

   preg_match_all('/>1O([0-1]{14})</', $string, $matches);
   print '<pre>'; print_r($matches); print '</pre>';

   print '<hr>';
   show_source(__FILE__);

?>

Der er brugt et regulært udtryk til at finde strenge på formen

1) et hak efterfulgt af et ettal og bogstavet "store O"
2) 14 0- eller 1-taller
3) hak slut

Funktionen preg_match_all() finder alle forekomster i strengen - hvis der
kun vil være een forekomst, så kan du bruge preg_match() i stedet.

Regulære udtryk er lidt svære at komme ind på livet af, men de er ENORMT
dejlige at kunne :)

http://www.php.net/manual/en/function.preg-match-all.php
http://www.php.net/manual/en/pcre.pattern.sytax.php
http://www.php.net/manual/en/pcre.pattern.modifiers.php

.... og så skal jeg nok lige pointere at $matches[0] indeholder alt det der
er blevet matchet af det regulære udtryk, mens $matches[1] indeholder det
der er blevet matchet af først parentes i udtrykket (hvilket er du er
interesseret i). Så $matches[1] vil være et array bestående af dine tal i
den rækkefølge de står i $string.

Prøv også at skifte preg_match_all ud med preg_match og kør skidtet igen -
så vil $matches[1] ikke længere være et array men blot en strengværdi.

.... og så tilbage til den "#%¤¤# opvask :'(

--
Hyggehej
/Thomas

Michal (22-03-2003)
Kommentar
Fra : Michal


Dato : 22-03-03 15:34

In news:3e7b2557$0$24638$edfadb0f@dread14.news.tele.dk,
Lasse Madsen <lm@h-tech.dk> wrote:

> Jeg har en string gemt i en variabel $string
> denne string ser sådan ud uden gåse øjnene ""
>
>
> ">1O10000000010000<"
>
> Det der altid er "fast" er ">1O" og "<"
> Alle tallene mellem dette kan ændre sig binært altså 1 eller 0

først nogle spørgsmål:

kan >1O forekomme flere gange?
er den binære streng altid 14 bit?
kan < forekomme flere gange?

Umiddelbart, kan du først finde >1O og så tage strengen herfra, og 14 chars
frem:

$mystring = "abc>1O10000000010000<blah";
$pos = strpos( $mystring, ">1O" ) + 3; // returnerer 3+3=6
$binary = substr( $mystring, $pos, 14); // returnerer "10000000010000"

Hvis det derimod er mere komplekst, så skal du bruge en regular
expression... men så er du også fuldt ud dækket :)

f.eks.
ereg( ">1O([01]{14})<", $mystring, $regs)
echo $regs[1];

--
Michal
[ echo "\$0&\$0" > _; chmod +x _; ./_ ]



Lasse Madsen (23-03-2003)
Kommentar
Fra : Lasse Madsen


Dato : 23-03-03 09:36

Hej Alle sammen !

Mange tak for de mange forslag !

Jeg har virklig fået en masse ud af det ... jeg er gået igang med at gnaske
mere i manualen for det er jo yderst interessant.

Mange TAK !

M.v.h.
L. Madsen


"Lasse Madsen" <lm@h-tech.dk> skrev i en meddelelse
news:3e7b2557$0$24638$edfadb0f@dread14.news.tele.dk...
> Hej Igen !
>
>
> Jeg har en string gemt i en variabel $string
> denne string ser sådan ud uden gåse øjnene ""
>
>
> ">1O10000000010000<"
>
> Det der altid er "fast" er ">1O" og "<"
> Alle tallene mellem dette kan ændre sig binært altså 1 eller 0
>
> jeg vil gerne hente disse ud i variabler fra A til N således
>
> ">1OABCDEFGHIJKLMN<"
>
> men hvordan i al verden kan jeg gå ind via PHP og isolere dette når total
> strengen kan se således ud
>
>
> $string = "test>1O10010010010000<dette123"
>
> Hvordan kan jeg få PHP til at starte sin "isolering" med ">1O" og slutte
med
> "<" samt udlæse A til N i variabler ?
>
>
> jeg er selv bange for at dette ikke er muligt men jeg må indrømme at jeg
> ikke er helt dus med de mange string funktioner i PHP
>
> Hjælp modtages med kyshånd !
>
> Med Venlig Hilsen
> Lasse Madsen
>
>
>
>



Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste