amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > C Arrays/Nodes Dateien nach größe sortieren [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

10.07.2009, 12:36 Uhr

MaikG
Posts: 5172
Nutzer
Ich wollte X Dateien nach der Größe sortieren.
Mit einem Array wäre es am einfachsten, da ich jedoch Path und Größe
beim einlesen festhalten muss wären das mehrere 100 MB.
Bei der verwendung von Nodes wäre der vorteil das nur soviel Speicher allociert wird wie benötigt.
Auf die Dateianzahl bezogen. Das Problem mit mehrern 100 MB bleibt
Aus dem C Kurs:
struct Artikel
{
char Bezeichnung[40]; // Name des Artikels
int Anzahl; // Lagerbestand
float Preis; // Preis in Euro
};

Der Char ist fest auf 40 definiert, bei mir wären das 1000.
Obwohl evtl. der Path nur z.b. 5 zeichen lang sein könnte.
Die structur muss immer am Anfang stehen soweit ich weiss.

Gibt es keine dynamischen Arrays oder ähnliches unter C?

[ - Antworten - Zitieren - Direktlink - ]

10.07.2009, 13:22 Uhr

thomas
Posts: 7718
Nutzer
@MaikG:

code:
struct Artikel
{
long Groesse;
char Name[1];
}


struct Artikel *artikel1 = malloc(sizeof(struct Artikel) + strlen(dateiname));

artikel1->Groesse = dateigroesse;
strcpy (artikel1->Name,dateiname);


Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ Dieser Beitrag wurde von thomas am 10.07.2009 um 13:22 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

10.07.2009, 14:34 Uhr

thomas
Posts: 7718
Nutzer

Zitat:
da ich jedoch Path und Größe
beim einlesen festhalten muss wären das mehrere 100 MB.


Du solltest den Pfad nur einmal speichern und die Dateieinträge auf den Pfadeintrag verweisen lassen.

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

10.07.2009, 14:41 Uhr

MaikG
Posts: 5172
Nutzer
und das

struct Artikel *artikel1 = malloc(sizeof(struct Artikel) + strlen(dateiname));

funktioniert wärend der laufzeit?

denn könnte ich das auch so machen

struct Artikel *artikel[1] = malloc(sizeof(struct Artikel) + strlen(dateiname));

und darauf verzichten mich mit den Nodes rumzuschlagen?

[ - Antworten - Zitieren - Direktlink - ]

10.07.2009, 14:55 Uhr

MaikG
Posts: 5172
Nutzer
Zitat:
Original von thomas:

Zitat:
da ich jedoch Path und Größe
beim einlesen festhalten muss wären das mehrere 100 MB.


Du solltest den Pfad nur einmal speichern und die Dateieinträge auf den Pfadeintrag verweisen lassen.

Gruß Thomas


Das würde nur in einem einzelnen Verzeichniss funktionieren, für mehrere wäre das recht komplex.

[ - Antworten - Zitieren - Direktlink - ]

10.07.2009, 15:28 Uhr

thomas
Posts: 7718
Nutzer
Zitat:
Original von MaikG:
denn könnte ich das auch so machen

struct Artikel *artikel[1] = malloc(sizeof(struct Artikel) + strlen(dateiname));

und darauf verzichten mich mit den Nodes rumzuschlagen?



Denk erst nach bevor du programmierst. Überleg dir, was *artikel[1] bedeutet und was strlen(dateiname) zurückgibt.

Zitat:
Das würde nur in einem einzelnen Verzeichniss funktionieren, für mehrere wäre das recht komplex.

Wieso ? Alle Dateien eines Verzeichnis auf den Namen des Verzeichnis zeigen zu lassen ist doch nicht komplex.



--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

10.07.2009, 15:35 Uhr

MaikG
Posts: 5172
Nutzer
>Denk erst nach bevor du programmierst. Überleg dir, was *artikel[1] >bedeutet und was strlen(dateiname) zurückgibt.

Zeiger auf artikel[1] und die Anzahl der zeiches der dateilänge oder nicht?


>Wieso ? Alle Dateien eines Verzeichnis auf den Namen des Verzeichnis >zeigen zu lassen ist doch nicht komplex.

Ich bearbeite aber meherere Verzeichnisse, auf einen einigen path
ist nicht schwer.


Es funktioniert nicht "declaration found in statement block".

[ - Antworten - Zitieren - Direktlink - ]

10.07.2009, 18:37 Uhr

thomas
Posts: 7718
Nutzer
@MaikG:

Zitat:
Zeiger auf artikel[1]

Unsinn.

struct Artikel *

heißt ein Zeiger auf ein struct Artikel.

[1]

heißt ein Array mit einem Element.

D.h.

struct Artikel *artikel[1]

ergibt ein Array aus Zeigern auf struct Artikel mit genau einem Element (einem Zeiger, nicht einem Artikel).


Zitat:
und die Anzahl der zeiches der dateilänge oder nicht?

Und wie genau ist die zu dem Zeitpunkt, wenn die Zeile ausgeführt wird ?

Zitat:
Ich bearbeite aber meherere Verzeichnisse

Na und ? Wo ist der Unterschied ?

Hier ist ein Beispiel, wie man es machen könnte: http://thomas-rapp.homepage.t-online.de/examples/verzeichnis.c

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

10.07.2009, 19:33 Uhr

MaikG
Posts: 5172
Nutzer
>Und wie genau ist die zu dem Zeitpunkt, wenn die Zeile ausgeführt wird ?

das ist unterschiedlich je nach datei.

>Na und ? Wo ist der Unterschied ?

Na beim Schwierigkeitsgrad, ich bin Anfänger.

>Hier ist ein Beispiel, wie man es machen könnte: http://thomas-rapp.homepage.t-online.de/examples/verzeichnis.c


Dankeschön. Muss ich mir Drucken um das richtig zu Verstehen,
aber wie ich sehe Funktioniert das mit der Declaration nur
wenn ich eine seperate Funktion mache, wo die Variablen wie
Dateiname rein übergeben wird damit der Compiler das zulässt.

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > C Arrays/Nodes Dateien nach größe sortieren [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.