Foros del Web » Programando para Internet » PHP »

ordenar archivos

Estas en el tema de ordenar archivos en el foro de PHP en Foros del Web. Hola, resulta que quisiera ordenar los archivos generados en una carpeta de forma descendente... Es decir, un formulario genera archivos automáticamente con un nombre relativo ...
  #1 (permalink)  
Antiguo 30/05/2012, 04:52
 
Fecha de Ingreso: mayo-2012
Ubicación: En mi casa xD
Mensajes: 24
Antigüedad: 11 años, 10 meses
Puntos: 0
ordenar archivos

Hola, resulta que quisiera ordenar los archivos generados en una carpeta de forma descendente... Es decir, un formulario genera archivos automáticamente con un nombre relativo a un contador (documento1, documento2, etc).
Tengo aquí mi código:
Código PHP:

<?php
//abre el directorio Partes, que tienen todos los archivos que se han creado
    
$dir=opendir("Partes");
    while(
$archivo=readdir($dir))
    {
?>

<?php 

    
echo "<a href=\"Partes/$archivo\">".$archivo."</a><br>"
?>

<?php
    
}
?>
Esto unicamente me abre el directorio pero están ordenados de forma errónea... Espero que me puedan ayudar, gracias.
  #2 (permalink)  
Antiguo 30/05/2012, 05:18
Avatar de Heli0s  
Fecha de Ingreso: abril-2010
Mensajes: 789
Antigüedad: 14 años
Puntos: 40
Respuesta: ordenar archivos

Según tengo entendido normalmente los archivos se ordenan automáticamente alfabéticamente o en forma descendente si es numérico, si no te los ordena así, ¿De que manera te los está ordenando?, ¿Y cuales son los nombres reales de los archivos?
  #3 (permalink)  
Antiguo 30/05/2012, 05:22
 
Fecha de Ingreso: mayo-2012
Ubicación: En mi casa xD
Mensajes: 24
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: ordenar archivos

Pues había probado a ordenarlos sin más, ya que el código de arriba estaba anteriormente y demás. Pero sin resultado alguno... Los archivos se llaman
parte_numero(fecha).rtf
y no me los está ordenando bien y por eso quería ordenarlos, solo que con el código de arriba no sé como seria por que me estoy volviendo loco u,u
  #4 (permalink)  
Antiguo 30/05/2012, 05:26
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años
Puntos: 97
Respuesta: ordenar archivos

Helios tiene razón: el orden es automático.
Lo que posiblemente te ocurra es que, despues de documento1, te muentra documento10 en lugar de documento2. Para evitar eso, has de nombrar tus archivos así:
documento00001
documento00002
documento00010

....dependiendo del núm.max de archivos, más o menos ceros.

Igual hay otra forma, pero la desconozco.
Saludos.
  #5 (permalink)  
Antiguo 30/05/2012, 05:26
Avatar de Heli0s  
Fecha de Ingreso: abril-2010
Mensajes: 789
Antigüedad: 14 años
Puntos: 40
Respuesta: ordenar archivos

La función asort te puede servir para lo que necesitas
  #6 (permalink)  
Antiguo 30/05/2012, 05:35
 
Fecha de Ingreso: mayo-2012
Ubicación: En mi casa xD
Mensajes: 24
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: ordenar archivos

Cita:
Iniciado por oscartt67 Ver Mensaje
Helios tiene razón: el orden es automático.
Lo que posiblemente te ocurra es que, despues de documento1, te muentra documento10 en lugar de documento2. Para evitar eso, has de nombrar tus archivos así:
documento00001
documento00002
documento00010

....dependiendo del núm.max de archivos, más o menos ceros.

Igual hay otra forma, pero la desconozco.
Saludos.
Exactamente eso es lo que me pasaba xD solo que cuando iba a renombrarlos de esa forma, cuando en el contador cogía y añadía +1 al número y tal, se saltaba cifras y por eso de ahí a dejarlo como estaba ... u,u

Cita:
La función asort te puede servir para lo que necesitas
Ya la probé y no sé ni como se hace... lo volveré a intentar y si no me sale... ¿podrías ayudarme? es que esto de ser novato... es un asco
  #7 (permalink)  
Antiguo 30/05/2012, 05:48
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años
Puntos: 97
Respuesta: ordenar archivos

Código PHP:
$long=5;//para 5 de longitud.(hasta 99999 ficheros)
$i=133;//tu contador
$ii="00000$i";
$ii=substr($ii,strlen($ii)-$long,$long);
echo 
$ii;//ahi tienes la cadena. 
ahí tienes una solución.
Saludos.
  #8 (permalink)  
Antiguo 30/05/2012, 06:56
Avatar de webseficientes  
Fecha de Ingreso: enero-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 320
Antigüedad: 19 años, 2 meses
Puntos: 14
Respuesta: ordenar archivos

Armate un array con clave-valor y ordenalos por la clave con ksort. la clave la armas con la parte entera del nombre del archivo y el valor es el nombre del archivo.

intval( nombre_archivo );



Cita:
Iniciado por emilio_php Ver Mensaje
Hola, resulta que quisiera ordenar los archivos generados en una carpeta de forma descendente... Es decir, un formulario genera archivos automáticamente con un nombre relativo a un contador (documento1, documento2, etc).
Tengo aquí mi código:
Código PHP:

<?php
//abre el directorio Partes, que tienen todos los archivos que se han creado
    
$dir=opendir("Partes");
    while(
$archivo=readdir($dir))
    {
?>

<?php 

    
echo "<a href=\"Partes/$archivo\">".$archivo."</a><br>"
?>

<?php
    
}
?>
Esto unicamente me abre el directorio pero están ordenados de forma errónea... Espero que me puedan ayudar, gracias.
__________________
Gerardo Benitez
Programador Web Freelance, SEO, Diseño web
  #9 (permalink)  
Antiguo 31/05/2012, 01:53
 
Fecha de Ingreso: mayo-2012
Ubicación: En mi casa xD
Mensajes: 24
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: ordenar archivos

No me funciona .... debo de estar haciéndolo mal, no sé ni como se hace, he puesto lo siguiente y nada, soy más bruto en estas cosas... u,ú
Código PHP:
<?php
//abre el directorio Partes, que tienen todos los archivos que se han creado
    
$dir=opendir("Partes");
    
$archivo=readdir($dir);
  
$orden = array("$archivo");
ksort($orden);
foreach (
$orden as $archivo) {
    echo 
"<a href=\"Partes/$archivo\">".$archivo."</a><br>"
}
?>
También probé lo siguiente:
Código PHP:
<?php
$long
=5;//para 5 de longitud.(hasta 99999 ficheros)
$i=fopen("parte.txt","r+");//abre el documento en modo lectura
        
$num=fgets($contador,8);//coge el dato que hay en parte.txt
        
$num--;//resta el número para indicar correctamente el número del parte
;//tu contador
$ii="00000$i";
$ii=substr($ii,strlen($ii)-$long,$long);
echo 
$ii;//ahi tienes la cadena. 


?>
y sin exito, ¿podriais ayudarme? Se que soy muy pesado pero puff... esto a veces me supera u,u'
  #10 (permalink)  
Antiguo 31/05/2012, 02:02
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años
Puntos: 97
Respuesta: ordenar archivos

La solución que te aporté tienes que aplicarla al momento de generar el archivo partes.txt, El truco consiste en tener bien los nombres de archivo. Luego, la lectura es directa, tal y como la tenias.
Saludos.
  #11 (permalink)  
Antiguo 31/05/2012, 02:17
 
Fecha de Ingreso: mayo-2012
Ubicación: En mi casa xD
Mensajes: 24
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: ordenar archivos

Cita:
Iniciado por oscartt67 Ver Mensaje
La solución que te aporté tienes que aplicarla al momento de generar el archivo partes.txt, El truco consiste en tener bien los nombres de archivo. Luego, la lectura es directa, tal y como la tenias.
Saludos.
Perfecto muchas gracias, esto de no entender... pero ya me ha salido, lo único que me falta es poder ordenarlos de manera descendente, es decir, el primer archivo que me salga arriba del todo, tendrá que ser el que menos tiempo tenga... y eso es lo que no me salía xD

También me he fijado, en que cuando doy el listado de los archivos, me aparecen el enlace de la carpeta raíz y los dos puntitos de la carpeta anterior (la raíz también), ¿como se quita eso?

Y ya para que quede mejor la cosa, que sólamente se vean no se .... 15 archivos por página o algo parecido, para no tener una lista enoorme de archivos, si tengo la solución, os la compartiré aquí con mucho gusto ^-^
  #12 (permalink)  
Antiguo 31/05/2012, 04:08
 
Fecha de Ingreso: octubre-2007
Mensajes: 87
Antigüedad: 16 años, 6 meses
Puntos: 1
Respuesta: ordenar archivos

buenas! para seleccionar solo un tipo de archivo, yo uso esto:

Código PHP:
$path "idc"
$n 0;
$directorio=opendir($path); 
while (
$archivo readdir($directorio)){
    if(
preg_match("/.txt/",$archivo)){
        
$file "./".$path."/".$archivo;
        
$arr_file[$n]=$file;
        
$n++;
    }

En mi caso, solo selecciono los archivos .txt pero se puede cambiar a la extensión que quieras ;D
espero haber sido de ayuda
  #13 (permalink)  
Antiguo 31/05/2012, 05:49
 
Fecha de Ingreso: mayo-2012
Ubicación: En mi casa xD
Mensajes: 24
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: ordenar archivos

Cita:
Iniciado por xlokyx Ver Mensaje
buenas! para seleccionar solo un tipo de archivo, yo uso esto:

Código PHP:
$path "idc"
$n 0;
$directorio=opendir($path); 
while (
$archivo readdir($directorio)){
    if(
preg_match("/.txt/",$archivo)){
        
$file "./".$path."/".$archivo;
        
$arr_file[$n]=$file;
        
$n++;
    }

En mi caso, solo selecciono los archivos .txt pero se puede cambiar a la extensión que quieras ;D
espero haber sido de ayuda

Lo he probado pero nada... quizá esté mal lo que hice
Código PHP:
<?php
//abre el directorio Partes, que tienen todos los archivos que se han creado
$path "Partes"
$n 0;
$directorio=opendir($path); 
while (
$archivo readdir($directorio)){
    if(
preg_match($archivo,"/.rtf/")){
        
$file "./".$path."/".$archivo;
        
$arr_file[$n]=$file;
        
$n++;
    echo 
"<a href=\"Partes/$archivo\">".$archivo."</a><br>";
    }
    
}
?>
  #14 (permalink)  
Antiguo 31/05/2012, 06:33
Avatar de webseficientes  
Fecha de Ingreso: enero-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 320
Antigüedad: 19 años, 2 meses
Puntos: 14
Respuesta: ordenar archivos

Tenes que armar el array de otro modo

Código PHP:
//antes del while
$archivos = array(); 

//en el while 
$clave intval$archivo 
$valor $archivo
$archivos$clave ] = $valor

//despues del while
ksort$archivos ); 

Cita:
Iniciado por emilio_php Ver Mensaje
No me funciona .... debo de estar haciéndolo mal, no sé ni como se hace, he puesto lo siguiente y nada, soy más bruto en estas cosas... u,ú
Código PHP:
<?php
//abre el directorio Partes, que tienen todos los archivos que se han creado
    
$dir=opendir("Partes");
    
$archivo=readdir($dir);
  

?>
__________________
Gerardo Benitez
Programador Web Freelance, SEO, Diseño web
  #15 (permalink)  
Antiguo 01/06/2012, 03:18
 
Fecha de Ingreso: mayo-2012
Ubicación: En mi casa xD
Mensajes: 24
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: ordenar archivos

Cita:
Iniciado por webseficientes Ver Mensaje
Tenes que armar el array de otro modo

Código PHP:
//antes del while
$archivos = array(); 

//en el while 
$clave intval$archivo 
$valor $archivo
$archivos$clave ] = $valor

//despues del while
ksort$archivos ); 
Puff... Me estoy haciendo líos y soy un desastre... Lo he puesto así y no me funciona.
Código PHP:
<?php
//abre el directorio Partes, que tienen todos los archivos que se han creado
    
$dir=opendir("Partes");
    
$archivos = array();
    while(
$archivo=readdir($dir))
    {
?>
<?php
    $clave
=intval($archivo);
    
$valor=$archivo
    
$archivos$clave ] =$valor;
    echo 
"<a href=\"Partes/$archivo\">".$archivo."</a><br>";
    
?>

<?php
    
}
ksort$archivos );

?>
  #16 (permalink)  
Antiguo 01/06/2012, 03:26
Avatar de oNefl0w189  
Fecha de Ingreso: abril-2010
Ubicación: Valladolid
Mensajes: 117
Antigüedad: 14 años
Puntos: 4
Respuesta: ordenar archivos

Cita:
Iniciado por emilio_php Ver Mensaje
Lo he probado pero nada... quizá esté mal lo que hice
Código PHP:
<?php
//abre el directorio Partes, que tienen todos los archivos que se han creado
$path "Partes"
$n 0;
$directorio=opendir($path); 
while (
$archivo readdir($directorio)){
    if(
preg_match($archivo,"/.rtf/")){
        
$file "./".$path."/".$archivo;
        
$arr_file[$n]=$file;
        
$n++;
    echo 
"<a href=\"Partes/$archivo\">".$archivo."</a><br>";
    }
    
}
?>
No me he metido muy a fondo con ello, pero estoy viendo que entre el código que te ofrecieron y el que tu pones hay diferencias.

Fijate en esta linea:


La que te dio el:
if(preg_match("/.txt/",$archivo)){

La que tu pusiste:
if(preg_match($archivo,"/.rtf/")){


Prueba poniendo

if(preg_match("/.rtf/",$archivo)){


Y nos cuentas.
__________________
Nunca dijeron que la vida sería fácil, sólo prometieron que valdría la pena vivirla.

Dar las gracias y añadir Karma, no cuesta nada, ¿Que menos si te ayudan? :)
  #17 (permalink)  
Antiguo 01/06/2012, 03:38
 
Fecha de Ingreso: mayo-2012
Ubicación: En mi casa xD
Mensajes: 24
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: ordenar archivos

Cita:
Iniciado por oNefl0w189 Ver Mensaje
No me he metido muy a fondo con ello, pero estoy viendo que entre el código que te ofrecieron y el que tu pones hay diferencias.

Fijate en esta linea:


La que te dio el:
if(preg_match("/.txt/",$archivo)){

La que tu pusiste:
if(preg_match($archivo,"/.rtf/")){


Prueba poniendo

if(preg_match("/.rtf/",$archivo)){


Y nos cuentas.
No se me ordenan en orden descendente, pero se me han quitado los vínculos a carpeta raíz y carpeta anterior (. / .. ). Gracias por ayudarme
  #18 (permalink)  
Antiguo 01/06/2012, 03:46
Avatar de oNefl0w189  
Fecha de Ingreso: abril-2010
Ubicación: Valladolid
Mensajes: 117
Antigüedad: 14 años
Puntos: 4
Respuesta: ordenar archivos

Prueba algo así como..

$orden = asort($archivo);
echo $orden;

Lo que tienes que hacer es ordenarlos a la hora de mostrarlos.
__________________
Nunca dijeron que la vida sería fácil, sólo prometieron que valdría la pena vivirla.

Dar las gracias y añadir Karma, no cuesta nada, ¿Que menos si te ayudan? :)
  #19 (permalink)  
Antiguo 01/06/2012, 03:52
 
Fecha de Ingreso: mayo-2012
Ubicación: En mi casa xD
Mensajes: 24
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: ordenar archivos

Eso lo probé cuando puse el código anteriormente y tampoco, creo que soy el único al que no le funcionan las cosas como deberían -.-
  #20 (permalink)  
Antiguo 01/06/2012, 05:57
Avatar de oNefl0w189  
Fecha de Ingreso: abril-2010
Ubicación: Valladolid
Mensajes: 117
Antigüedad: 14 años
Puntos: 4
Respuesta: ordenar archivos

Puedes meter los datos en un array y ordenar el array.

http://www.desarrolloweb.com/articul...rrays-php.html
http://php.net/manual/es/array.sorting.php

PD: No te preocupes, no eres al único al que no le funcionan las cosas, jajaj. A mi tampoco me funciona una cosilla que he consultado en otro post, me he vuelto loco y no hay manera.. jajaj pero para eso estamos aquí no? para ayudar! :)
__________________
Nunca dijeron que la vida sería fácil, sólo prometieron que valdría la pena vivirla.

Dar las gracias y añadir Karma, no cuesta nada, ¿Que menos si te ayudan? :)
  #21 (permalink)  
Antiguo 04/06/2012, 04:23
 
Fecha de Ingreso: mayo-2012
Ubicación: En mi casa xD
Mensajes: 24
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: ordenar archivos

Cita:
Iniciado por oNefl0w189 Ver Mensaje
Puedes meter los datos en un array y ordenar el array.

[url]http://www.desarrolloweb.com/articulos/ordenar-arrays-php.html[/url]
[url]http://php.net/manual/es/array.sorting.php[/url]

PD: No te preocupes, no eres al único al que no le funcionan las cosas, jajaj. A mi tampoco me funciona una cosilla que he consultado en otro post, me he vuelto loco y no hay manera.. jajaj pero para eso estamos aquí no? para ayudar! :)
Gracias !! Por fin tras mucho esfuerzo he conseguido que me funcionase !! Pongo el código que es correcto:
Código PHP:
<?php
//abre el directorio Partes, que tienen todos los archivos que se han creado
$path "Partes"
$n 0;
$directorio=opendir($path); 
while (
$archivo readdir($directorio)){
    if(
preg_match("/.rtf/",$archivo)){
        
$key=intval($archivo);
        
$val=$archivo;
        
$archivos[$n]=$val;
        
$n++;
    }    
}
rsort($archivos);
    foreach (
$archivos as $key => $val){
    echo 
"<a href=\"Partes/$archivo\">".$val."</a><br>";
    }
?>
Parece ser que tuve suerte jajaja muchas gracias a todos por ayudarme ^-^

Etiquetas: formulario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:33.