Avatar billede infinito Nybegynder
14. september 2005 - 15:20 Der er 12 kommentarer og
1 løsning

regex: opdele informationer i en tekststreng

Hej,

Jeg vil gerne have følgende tekststreng opdelt i et array, og de steder hvor der er flere data i ét felt (dem med " som tekstseparetor), skal også medtages - eventuelt som et array under overstående array:

Komma er separator og " er tekstseparator.

Der er 150 point samt en god flaske rødvin hvis nogle kan komme med en effektiv løsning.

Nedestående er én linje:

NS002,"1 Bærepose med logo",Pose,"60,00",1100,,"3,75",2710,"Netto",,,,,EUR,"""EUR,""""5,50"""",""""1 Bærepose med logo"""",1150,,bags,"",""DKS,""""60,00"""",""""1 Bærepose med logo"""",1110,S25,"",""DKT,""""60,00"""",""""1 Bærepose med logo"""",1120,S25,""",-10,0,200,"38554,5814479167","38607,5053211806",56,"3.052,50","""""",,0,,111
Avatar billede jakobdo Ekspert
14. september 2005 - 15:23 #1
Du kunne evt lave:
$nytArray = array();
$nytArray = explode(",",$dintekst);
Så bliver hele teksten delt ved ,
Så skal vi bagefter have delt ved: "
Men dem synes jeg ikke der er system i?
Avatar billede infinito Nybegynder
14. september 2005 - 15:44 #2
Prøver lige at beskrive systemet, det kan være en kende uoverskueligt.

Komma (,) adskiller.

Gåseøjne (") er tekstseparator, og der kan åbenbart være flere ved siden af hinanden.

Jeg ved ikke om det er nemmere at jeg fortæller hvad vil have - fortæller det med udgangspunkt i overstående eksempel, og bruger tal til at vise placeringer:

1 = NS002
2 = 1 Bærepose med logo
3 = Pose
4 = 60,00
9 = Netto

Og så vil jeg gerne have den pris der kommer efter DKS (60,00), prisen der kommer efter DKT (60,00).

Det er ikke på alle at DKT og DKS optræder, enkelte steder optræder de slet ikke og andre steder optræder de kun en af hver.
Avatar billede jakobdo Ekspert
14. september 2005 - 15:52 #3
Prøv at se koden her: http://www.codebreaker.dk/exp/648003.php
Så kan du hente de værdier du ønsker med $nytArray[1] osv...
Avatar billede infinito Nybegynder
14. september 2005 - 15:58 #4
Ja det ser fint ud, men det sker tit at der er kommaer indenfor tekst-separatorerne, derfor må den ikke medtage disse, når den kører dem gennem explode()
Avatar billede jakobdo Ekspert
14. september 2005 - 16:01 #5
Så er det umuligt!
Hvordan skal man vide om denne sætning skal splittes:

60,00 <-- Pris...
60,00 <-- Stk og f.eks noget andet! :o)
Avatar billede infinito Nybegynder
14. september 2005 - 16:05 #6
Netop ved hjælp af tekst-separatorer :-)
Avatar billede jakobdo Ekspert
14. september 2005 - 16:07 #7
jeg kigger på det senere! Smutter nemlig hjem nu!
Avatar billede jakobdo Ekspert
14. september 2005 - 17:05 #8
Kan du ikke få listen med f.eks. ; og ikke , og så stadig tal med 60,00?

Et problem vil f.eks. være dette:

"EUR,"
"5,50"
","

Der er ikke noget system i din liste som rent faktisk kan bruges?
Avatar billede coderdk Praktikant
14. september 2005 - 19:03 #9
Er den information i en fil? For så kig på http://dk2.php.net/fgetcsv
Avatar billede infinito Nybegynder
14. september 2005 - 20:03 #10
Følgende giver et fint resultat:
function quotesplit( $splitter=',', $s, $restore_quotes=0 ){
  $getstrings = explode('"', $splitter.$s.$splitter);
  $delimlen = strlen($splitter);
  $instring = 0;
  while (list($arg, $val) = each($getstrings))
  {
      if ($instring==1)
      {
          if( $restore_quotes )
          {
              $result[count($result)-1] = $result[count($result)-1].'"'.$val.'"';
          } else {
              $result[] = $val;
          }
          $instring = 0;
      }
      else
      {
          $temparray = split($splitter, substr($val, $delimlen, strlen($val)-$delimlen-$delimlen) );
          while(list($iarg, $ival) = each($temparray))
          {
              $result[] = trim($ival);
          }
          $instring = 1;
      }
  }
  return $result;
}
Avatar billede jakobdo Ekspert
14. september 2005 - 20:47 #11
Så det vil sige det løste dit problem?
Avatar billede infinito Nybegynder
12. marts 2007 - 08:56 #12
luk
Avatar billede jakobdo Ekspert
12. marts 2007 - 11:52 #13
Selv tak for hjælpen du.
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