ignoreme Skrevet 12. mars 2013 Del Skrevet 12. mars 2013 Hei Jeg trenger litt hjelp til å sortere en CSV fil for å så vise den i en tabell. Det skal sies at jeg kan særs lite php, så godt mulig det er enkelt <?php $fp = fopen('test.csv','r') or die("can't open file"); while($csv_line = fgetcsv($fp,1024)) { print '<tr class="tr">'; for ($i = 0, $j = count($csv_line); $i < $j; $i++) { print '<td class="tekst">'.$csv_line[$i].'</td>'; } print "</tr>\n"; } fclose($fp) or die("can't close file"); ?> Jeg skulle gjerne ha fått formatert innholdet i .csv fila alfabetisk. Det spiller egentlig ingen rolle om det er en csv fil eller tekstfil egentlig. Det viktigste er at innholdet i csv fila blir sortert alfabetisk. CSV fila ser slik ut: Program,Oppe,Siste 30 min,Tid data,data,data,data Kan også fjerne header om det skulle gjøre ting enklere. Har selvfølgelig prøvd å google på forhånd, uten å bli helt klok på det heller, så håper noen her inne kunne bistå litt:) For de som måtte lure, så har jeg laget en del powershellscript som overvåker div stuff. Trenger derfor å vise dette på en nettside. Lenke til kommentar
Crowly Skrevet 15. mars 2013 Del Skrevet 15. mars 2013 (endret) Kommer jo an på hvilket felt du ønsker å sortere etter. Skal det være første felt kan du gjøre slik: $file_arr=file('test.csv'); // les inn hele fila i en array unset($file_arr[0]); // fjern første linje sort($file_arr); // sorter array foreach ($file_arr as $key=>$line) { echo '<tr class="tr">'; foreach (explode(',',$line) as $field) { echo '<td class="tekst">'.$field.'</td>'; } echo "</tr>\n"; } file() leser hele fila inn i en array. Sort() sorterer array. Den første foreach'en looper igjennom denne array'en. explode() gjør en en tekst linje med skille tegn om til en array. Den andre foreach'en looper igjennom denne arrayen og skriver ut hvert felt. Endret 15. mars 2013 av Crowly Lenke til kommentar
Paull Skrevet 17. mars 2013 Del Skrevet 17. mars 2013 (endret) Om du får filene via PowerShell kan du også enkelt sortere de på forhånd med Import-Csv C:\input.csv | sort -Property Program | Export-Csv -Path c:\input_sorted.csv -NoTypeInformation Endret 17. mars 2013 av Paull Lenke til kommentar
ignoreme Skrevet 17. mars 2013 Forfatter Del Skrevet 17. mars 2013 Takk for svar Crowly, skal se mer på koden i morgen, når hodet fungerer bedre etter helgens sprell Laget en (googlet) en fin funksjon, med multisort, men fikk den aldri til å fungere riktig, da den kun sorterte en verdi, og ikke etter to verdier. Tror jeg kan slå sammen koden din og den andre, så mulig jeg oppnår det jeg ønsker der. Paull, jo takk, det vet jeg Relativt stødig i powershell, men denne gangen er det ikke ønskelig å sortere selve kilden, kun visningen av den, da kilden brukes til flere ting. Mulig jeg ender opp med å dytte alt inn i en database, i stedet for flatfile. Men, det får bli en annen gang når tiden strekker mer til Spent på om jeg lykkes i dette, da får jeg ett relativt kult gratis NOC view av min egen leilighet Lenke til kommentar
GeirGrusom Skrevet 18. mars 2013 Del Skrevet 18. mars 2013 Ved å ta vekk Export-Csv fra Paull sin kode så vil den bare vise resultatet... eventuelt kan du også få den til å vise resultatet i en grafisk GridView ved å legge til | Out-GridView. Lenke til kommentar
ignoreme Skrevet 18. mars 2013 Forfatter Del Skrevet 18. mars 2013 GeirGrusom, leste du siste posten min? Lenke til kommentar
GeirGrusom Skrevet 18. mars 2013 Del Skrevet 18. mars 2013 Tja, forstår ikke hvorfor du ikke kan sortere dataene i utgangspunktet hvis du ikke vil lese hvordan sort() fungerer. Hva vil en database egentlig løse her? Lenke til kommentar
ignoreme Skrevet 18. mars 2013 Forfatter Del Skrevet 18. mars 2013 Grunnen til at jeg ikke vil sortere csv fila mi er fordi jeg bruker den andre steder. Jeg kan selvfølgelig løse det i powershell ved en del sortering, men som sagt, om jeg kan (noe som tydeligvis er mulig) løse dette i php, så er det enklere for min egen del da jeg kan beholde sourcen. Jeg kan jo også bruke to forskjellige filer, men det blir fryktelig tungvindt, når det kan løses med en fil. Tja, hadde jeg tatt i bruk en database, så hadde det ikke spilt noen rolle for hverken del A eller B som skal bruke dataen om hvordan den er sortert. Sortere data fra mysql kan jeg faktisk, så mulig jeg bør gå den veien. Får se mer på det etter jobb Forøvrig kom jeg hit selv: $file = file($serverdata); foreach ($file as $key => $row) { $program[$key] = $row[0]; $status[$key] = $row[1]; $status30[$key] = $row[2]; $tid[$key] = $row[3]; } array_multisort($program, SORT_ASC, $tid, Sort_numeric $file); for($i=0; $i<count($file); $i++) { $status = explode(",", $file[$i]); echo "<tr class='tr'>"; echo "<td class='tekstleft'>", $status[0],"</td><td class='tekstleftmiddle'>", $status[1],"</td><td class='tekstrightmiddle'>",$status[2],"</td><td class='tekstright'>",$status[3],"</td>"; echo "</tr>\n"; } echo "</table>"; Det eneste er at jeg ikke får multisort til å fungere. Jeg kan fint sortere på hver av verdiene, men jeg kan ikke sortere etter først $program, så $tid...Trodde det skulle være mulig i følge dok jeg fant, men tydeligvis har jeg bommet på ett eller annet Lenke til kommentar
GeirGrusom Skrevet 18. mars 2013 Del Skrevet 18. mars 2013 (endret) PHP er et skrotspråk med et forferdelig standardbibliotek, så jeg forstår at det er vanskelig. Men for meg virker det som temmelig overkill å bruke en database for å gjøre noe som burde være temmelig simpelt. Hva med usort og lignende? Disse kan ta inn et predikat for sortering istedet for felter. Endret 18. mars 2013 av GeirGrusom Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå