zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden Sortierung Dateinamen

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 11.12.2009, 11:46
Benutzerbild von uspri
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 04.07.2005
Beiträge: 900
uspri sorgt für eine eindrucksvolle Atmosphäreuspri sorgt für eine eindrucksvolle Atmosphäre
Standard Sortierung Dateinamen

Hallo,

ich lese mittels glob() einen Ordner bzw. die darin enthaltenen Bilder aus. Nun haben die Dateinamen mit einer Zahl hinten drann. Unter Windows schaut das nun so aus:

file_1.jpg
file_10.jpg
file_11.jpg
file_12.jpg
file_13.jpg
file_2.jpg
file_20.jpg
file_21.jpg

Wie kann ich das in eine sinnvolle Reihenfolge sortieren, also das nach file_1 auch file_2 kommt? sort() mit den vorhandenen Optionen bringt leider garnichts.
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 11.12.2009, 11:54
Benutzerbild von mantiz
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 25.02.2007
Beiträge: 2.843
mantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz sein
Standard

Auf die schnelle fällt mir nur ein, dass Du einmal durch alle Dateinamen durchläufst, wobei Du in einem Array die Dateinamen speicherst und in einem Array die Zahlen, die nach dem '_' kommen.

Anschließend kannst Du dann das Array mit den Dateinamen mit Hilfe des Arrays, wo die Zahlen drin stehen sortieren, mittels: PHP: array_multisort - Manual
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 11.12.2009, 12:28
Benutzerbild von protonenbeschleuniger
Verbesserer
XHTMLforum-Kenner
 
Registriert seit: 06.09.2007
Beiträge: 4.977
protonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblick
Standard

Du meinst so:
Code:
#!/usr/bin/perl -w
use strict;

my @arr = <DATA>;

print map { $_->[0]} sort {$a->[1] <=> $b->[1] } map {[$_, /.*_(\d*)\./]} @arr;
 
__DATA__
file_1.jpg
file_10.jpg
file_11.jpg
file_12.jpg
file_13.jpg
file_2.jpg
file_20.jpg
file_21.jpg
Das ist eine Schwartz'sche Transformation
Mit Zitat antworten
  #4 (permalink)  
Alt 11.12.2009, 12:32
Benutzerbild von Scheppertreiber
Chaot und Nonkonformist.
XHTMLforum-Kenner
 
Registriert seit: 13.03.2007
Ort: Steinmark im Spessart
Beiträge: 7.458
Scheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein Lichtblick
Standard

In C wäre das relativ einfach:

Code:
qsort( files, anzahl_elemente, grpesse_eines_elements, vergleich);

...

  vergleich(
  char *A,
  char *B
  )
{
  a = atoi( A + 5);
  b = atoi( B + 5);
  if  ( a == b) 
     return 0;
  return a<b ? -1 : 1;
}
Halt einfach die Zahlenwerte vergleiche. So etwas sollte es in PHP aber auch geben
__________________
Grüße aus dem Spessart, Joe

{ table-layout: biertischistbesser; }
Der Mausinator
Mit Zitat antworten
  #5 (permalink)  
Alt 11.12.2009, 12:41
Benutzerbild von inta
free as in freedom
XHTMLforum-Kenner
 
Registriert seit: 04.12.2006
Ort: Berlin
Beiträge: 5.016
inta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz sein
Standard

PHP? Schau dir mal natsort() an.
Mit Zitat antworten
  #6 (permalink)  
Alt 11.12.2009, 12:42
Benutzerbild von mantiz
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 25.02.2007
Beiträge: 2.843
mantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz sein
Standard

Was ich immer wieder vergesse: Es gibt auch noch die Funktion PHP: usort - Manual, wo man eine benutzerdefinierte Vergleichsfunktion angeben kann, diese müsste dann nur entsprechend die Zahlen aus dem Dateinamen extrahieren und vergleichen.

// Edit: natsort() ist natürlich besser.
Mit Zitat antworten
  #7 (permalink)  
Alt 11.12.2009, 12:58
Benutzerbild von uspri
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 04.07.2005
Beiträge: 900
uspri sorgt für eine eindrucksvolle Atmosphäreuspri sorgt für eine eindrucksvolle Atmosphäre
Standard

natsort() ist genau das, was ich gesucht habe. Danke Euch, nun passt auch die Reihenfolge...
Mit Zitat antworten
  #8 (permalink)  
Alt 11.12.2009, 13:06
Benutzerbild von protonenbeschleuniger
Verbesserer
XHTMLforum-Kenner
 
Registriert seit: 06.09.2007
Beiträge: 4.977
protonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblick
Standard

Es ging also um PHP, muss man ja auch Wissen
Mit Zitat antworten
  #9 (permalink)  
Alt 11.12.2009, 13:11
Benutzerbild von Scheppertreiber
Chaot und Nonkonformist.
XHTMLforum-Kenner
 
Registriert seit: 13.03.2007
Ort: Steinmark im Spessart
Beiträge: 7.458
Scheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein Lichtblick
Standard

natsort() könnte man so machen:

Code:
  vergleich(
  char *A,
  char *B
  )
{
  char *ap, *bp;

  for ( ap=A; *ap && ! isdigit(*ap); ap++);
  for ( bp=B; *bp && ! isdigit(*bp); bp++);

  a = atoi( ap);
  b = atoi( bp);
  if  ( a == b) 
     return 0;
  return a<b ? -1 : 1;
}
... ungetestet
__________________
Grüße aus dem Spessart, Joe

{ table-layout: biertischistbesser; }
Der Mausinator
Mit Zitat antworten
Sponsored Links
  #10 (permalink)  
Alt 11.12.2009, 18:31
Benutzerbild von uspri
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 04.07.2005
Beiträge: 900
uspri sorgt für eine eindrucksvolle Atmosphäreuspri sorgt für eine eindrucksvolle Atmosphäre
Standard

Sicher könnte man das so machen, wenn man diese Sprache verwenden würde
Mit Zitat antworten
Sponsored Links
Antwort


Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Mysql Sortierung / Gruppierung uspri Serveradministration und serverseitige Scripte 6 25.01.2011 11:03
Sortierung von Inhalten aus unterschiedlichen Tabellen einer DB Magellan Serveradministration und serverseitige Scripte 7 11.07.2010 14:39
Encoding der Dateinamen auf Windows Pablo Serveradministration und serverseitige Scripte 6 04.06.2008 00:17
Dateinamen? Dateistruktur Finrod Offtopic 23 14.08.2005 20:51
Mysql Umlaut Sortierung axx (X)HTML 6 09.03.2005 12:03


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:48 Uhr.