Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
s-m-n

Anmeldungsdatum: 03.10.2005 Beiträge: 106 Wohnort: Pietling in Oberbayern / Deutschland
|
Verfasst am: 12.10.2006, 15:02 Titel: Zeilen in einer Datei sortieren |
|
|
Hi,
ich hab hier eine Textdatei, deren Zeilen jeweils mit dreistelligen Zahlen beginnen. Die Zahlenreihe ist nicht vollständig; es fehlen immer wieder einzelne oder mehrere.
Wie kann ich diese Zeilen am besten nach den oben beschriebenen Zahlen sortieren?
Danke!
Gruß s-m-n |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 12.10.2006, 15:52 Titel: |
|
|
ich poste jetzt keinen coder, aber dafür das prinzip
1. mit while not eof(dateinummer) die zeilen zählen.
2. array anlegen (1 to zeilenanzahl)
3. mit while alle zeilen in das array einlesen
4. sortieren: du musst maximal zeilenanzahl ^ 2 mal durch das array gehn und dabei gucken ob zeile(x) > zeile (x+1) falls das wahr ist, musst du swap zeile(x), zeile(x+1). dabei darfst du naütrlich jedes mal nur bis zeilenanzahl-1 gehn... ach was solls, einfach mal ein code posten^^ aber nur für diesen schritt
Code: |
for a = 1 to zeilenanzahl
ready = 1
for b = 1 to zeilenanzahl -1
if zeile(b) > zeile (b+1) then swap zeile(b), zeile(b)+1: ready = 0
next
if ready = 1 then exit for
|
noch fragen?
achja: das beispiel wird die zahlen wohl kaum in der reihenfolge 1...99.100...999.1000 speichern sondern in der reihenfolge 1...100...1000...99...999. müsste zumindest so sein  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.

Zuletzt bearbeitet von Jojo am 12.10.2006, 15:54, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 12.10.2006, 15:53 Titel: |
|
|
sorry, falschen button gedrückt, bitte diesen sinnlosen löschen^^ _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 12.10.2006, 17:28 Titel: |
|
|
eine weitere Möglichkeit (nur Entwurf)
Code: | ...
Sub RapidSort (Item()As Integer, LoElement As Integer, HiElement As Integer)
Dim As Integer n, wert, nptr, arr, rep, LoVal, HiVal
'größte und kleinste Wert bestimmen
LoVal=Item(LoElement)
HiVal=Item(HiElement)
FOR n = LoElement TO HiElement
If LoVal> Item(n) Then LoVal=Item(n)
If HiVal< Item(n) Then HiVal=Item(n)
Next
'ein SortArray erstellen, als Index größte bis kleinste Wert
ReDim SortArray(LoVal TO HiVal) As Integer
'in SortArray wird gezählt wie oft jeder Wert in Item() vorkommt
FOR n = LoElement TO HiElement
wert = Item(n)
SortArray(wert) = SortArray(wert) + 1
Next
'umkopieren SortArray => Item sortiert
nptr = LoElement - 1
FOR arr = LoVal TO HiVal
rep = SortArray(arr)
FOR n = 1 TO rep
nptr = nptr + 1
Item(nptr) = arr
Next
Next
Erase SortArray
END Sub
...
i=0
while EOF(#ff)>0
lineinput Zeile(i)
Item(VAL(Zeile(i))) = i
i+=1
wend
i-=1
RapidSort (Item(), 0, i)
for n= 0 to i
Print Zeile(Item(n))
next
... |
_________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Zuletzt bearbeitet von volta am 12.10.2006, 17:41, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 12.10.2006, 17:37 Titel: |
|
|
Hi,
ich empfehle selbstverständlich QSort.Bas
(nicht nur weil es von mir ist..), sondern:
-der Typ kann freigewählt werden
-kann auf- und abwärts sortieren
-hat sich bei dem volta-Test ganz tapfer geschlagen
-dieser QSort eben in voltas Post fehlt
Gruß
ytwinky _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 12.10.2006, 17:46 Titel: |
|
|
Hi ytwinky,
da hat sich mein EDIT mit deinem Beitrag überschnitten... sorry...
Hier der Link auf die Auswahl einiger Sortierprogramme:
http://www.freebasic.de/fbnp/?view=357 _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
s-m-n

Anmeldungsdatum: 03.10.2005 Beiträge: 106 Wohnort: Pietling in Oberbayern / Deutschland
|
Verfasst am: 12.10.2006, 18:52 Titel: |
|
|
Hi,
Erstmal danke für die vielen Lösungsvorschläge! Aus allen Vorschlägen hat mir aber Jojo's Code am besten gefallen.
@Jojo
Danke, dein Code passt wie die Faust auf's Auge. Aber du hast ein 'next' vergessen und ich hab den Wert b von 1 auf 0 korrigiert (weil mein Zeilenzähler bei 0 anfängt). Mein Proggi sieht jetzt so aus und funktioniert wunderbar:
Code: | dim as integer zeilen, f, a, b, ready
dim as string zeile(255)
f = FREEFILE
OPEN "futter.csv" FOR INPUT AS #f
WHILE NOT EOF(f)
LINE INPUT #f, zeile(zeilen)
zeilen+=1
WEND
CLOSE #F
for a = 1 to zeilen
ready = 1
for b = 0 to zeilen -1
if zeile(b) > zeile (b+1) then swap zeile(b), zeile(b+1): ready = 0
next
if ready = 1 then exit for
next
open "futter2.csv" for append as #2
for i = 0 to zeilen
print #2, zeile(i)
next
close #2 |
Gruß s-m-n |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 12.10.2006, 21:57 Titel: |
|
|
dann ists ja gut, glückwunsch^^
übrigens: wenn dein zeilenzähler von 0 bis zeilen zählt, ist das eine zeile mehr als eingelesen wurde! _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 13.10.2006, 00:06 Titel: |
|
|
@volta:
n.p.
Gruß
ytwinky _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
|