| |
Visual-Basic EinsteigerSortieren innerhalb einer Textdatei | | | Autor: Stephan | Datum: 11.09.01 15:40 |
| Hallo,
ich habe eine Textdatei die mehrere Datensätze enthält. Jeder Datensatz beginnt mit einer Nummer. Da diese Datensätze unsortiert sind, möchte ich diese nach der nummer aufsteigend in dieser Textdatei sortieren und so abspeichern. Meine Frage lautet, ist das sortieren innerhalb einer Textdatei möglich und wie sieht der Quellcode dafür aus?
Danke im voraus. | |
Re: Sortieren innerhalb einer Textdatei | | | Autor: Dieter (Moderator) | Datum: 11.09.01 15:52 |
| Hi Stephan,
das Sortieren einer Textdatei selbst ist nicht möglich.
Was Du aber machen kannst, ist:
- Einlesen der Zeilen in ein Array
Array sortieren
- Array wieder in die Datei speichern
Wenn Du hierzu Hilfe brauchst, dann melde Dich nochmal.
Eines vorweg: Ich bräuchte dann aber nähere Infos über den Zeilenaufbau eines einzelnen Datensatzes.
Cu
Dieter | |
Re: Sortieren innerhalb einer Textdatei | | | Autor: Stephan | Datum: 11.09.01 16:36 |
| Hallo Dieter,
der Aufbau der Textdatei ist wie folgt:
Firma: Mustermann1
Nr.: 320649155 HRB-Nr: HRB3398
Datum1: 311099 Datum2: 011000
Firma: Mustermann2
Nr.: 320649155 HRB-Nr: HRB2424
Datum1: 310599 Datum2: 010901
Firma: Mustermann3
Nr.: 320649155 HRB-Nr: HRB7882
Datum1: 310499 Datum2: 011001
jeder Datensatz besteht aus 3 Zeilen und ich möchte die Datensätze aufsteigend nach der HRB-Nr. sortieren. Alle Angaben stehen auf festen Positionen.
Wenn du eine Lösung hast wäre ich dir sehr dankbar für den Quellcode.
Danke | |
Re: Sortieren innerhalb einer Textdatei | | | Autor: Dieter (Moderator) | Datum: 11.09.01 19:16 |
| Hi Sephan,
ich werde Dir mal einen entsprechenden Code zusammenstellen.
Cu
Dieter | |
Re: Sortieren innerhalb einer Textdatei | | | Autor: Dieter (Moderator) | Datum: 12.09.01 00:29 |
| Hi Stephan,
ich hab Dir mal folgende Lösung erstellt:
<code> Dim F As Integer
Dim nCount As Long
Dim sLine As String
Dim sLines(3) As String
Dim sFile As String
Dim sFileSort As String
Dim HRBNr As String
Dim I As Integer
<font color=green>' zu sortierende Datei</font>
sFile = App.Path & "muster.txt"
sFileSort = App.Path & "muster_sort.txt"
<font color=green>' Datei öffnen und zunächst alle Datensätze einlesen</font>
F = FreeFile
Open sFile For Input As #F
nCount = 0
While Not EOF(F)
nCount = nCount + 1
Line Input #F, sLines(nCount)
If nCount = 3 Then
<font color=green>' Ende eines Datensatzes (nach 3. Zeile)</font>
HRBNr = Mid$(sLines(2), InStr(sLines(2), "HRB-Nr"))
<font color=green>' Datensatz der ListBox hinzufügen</font>
List1.AddItem HRBNr + "|" + sLines(1) + vbCrLf + sLines(2) + vbCrLf + _
sLines(3)
nCount = 0
End If
Wend
Close #F
<font color=green>' sortierte ListBox speichern</font>
F = FreeFile
Open sFileSort For Output As #F
With List1
For I = 0 To .ListCount - 1
sLine = Mid$(.List(I), InStr(.List(I), "|") + 1)
Print #F, sLine
Next I
End With
Close #F
MsgBox "Datei wurde sortiert!"</code> Der Trick besteht darin, dass jeweils drei Zeilen der Textdatei zusammengefasst in einer unsichtbaren sortierten ListBox eingetragen werden, wobei die HRBNr aus der zweite Zeile vorangestellt wird.
Leider war ich mir nicht sicher, ob jetzt zwischen den einzelnen Datensätzen eine Leerzeile in der Datei steht oder nicht. Ich hab den Code demnach so erstellt, dass die Datensätze der Textdatei direkt hintereinander stehen (also ohne Leerzeile).
Cu
Dieter | |
Re: Sortieren innerhalb einer Textdatei | | | Autor: Stephan | Datum: 12.09.01 08:44 |
| Hallo Dieter,
erst einmal danke das du mir so schnell hilfst.
Leider funktioniert der Code nicht. Ist es möglich dir einmal die Originaldatei zu mailen? (Ich denke das ist wichtig um den genauen Aufbau zu erkennen)
Ich wäre sehr dankbar wenn es hier eine Lösung gibt.
Danke Stephan
P.S.: In der Originaldatei ist zwischen den einzelnen Datensätzen immer eine Leerzeile. Ich habe aber für den Test mit deinem Code die Leerzeilen rausgenommen. | |
Re: Sortieren innerhalb einer Textdatei | | | Autor: Dieter (Moderator) | Datum: 12.09.01 08:56 |
| Hi Stephan,
geht klar - mail mir mal die O1riginaldatei.
Dann schaue ich es mir nochmal an.
Cu
Dieter | |
Jetzt ist es perfekt! | | | Autor: Dieter (Moderator) | Datum: 12.09.01 12:54 |
| Hi Stephan,
mit nachfolgendem Code wird die Datei jetzt korrekt eingelesen, sortiert und als neue Datei gespeichert.
<code> Dim F As Integer
Dim N As Integer
Dim nCount As Long
Dim sLine As String
Dim sLines(3) As String
Dim sFile As String
Dim sFileSort As String
Dim HRBNr As String
<font color=green>' zu sortierende Datei</font>
sFile = App.Path & "0013.dat"
sFileSort = App.Path & "0013_sort.dat"
<font color=green>' Datei öffnen und zunächst alle Datensätze einlesen</font>
F = FreeFile
Open sFile For Input As #F
While Not EOF(F)
<font color=green>' Prüfen, ob eingelesene Zeile, die erste Zeile
' eines Datensatzes ist (Firma: )</font>
Line Input #F, sLine
If Left$(sLine, 13) = "Firma: " Then
<font color=green>' Restlichen zwei Zeilen des Datensatzes einlesen</font>
sLines(1) = sLine
Line Input #F, sLines(2)
Line Input #F, sLines(3)
<font color=green>' HRBNR</font>
HRBNr = Mid$(sLines(2), InStr(sLines(2), "HRB-Nr") + 11)
<font color=green>' Datensatz der ListBox hinzufügen</font>
List1.AddItem Format$(Val(HRBNr), "00000000") + "|" + sLines(1) + vbCrLf _
+ sLines(2) + vbCrLf + sLines(3)
End If
Wend
Close #F
<font color=green>' sortierte ListBox speichern</font>
F = FreeFile: Open sFile For Input As #F
N = FreeFile: Open sFileSort For Output As #N
While Not EOF(F)
<font color=green>' Prüfen, ob eingelesene Zeile, die erste Zeile
' eines Datensatzes ist (Firma: )</font>
Line Input #F, sLine
If Left$(sLine, 13) = "Firma: " Then
Line Input #F, sLine
Line Input #F, sLine
<font color=green>' nächsten Eintrag der sortierten Liste speichern</font>
With List1
sLine = Mid$(.List(0), InStr(.List(0), "|") + 1)
Print #N, sLine
.RemoveItem 0
End With
Else
Print #N, sLine
End If
Wend
Close #N: Close #F
MsgBox "Datei wurde sortiert!"</code> Viel Erfolg!
Cu
Dieter | |
Re: Jetzt ist es perfekt! | | | Autor: Stephan | Datum: 12.09.01 14:18 |
| Hi Dieter,
ich weiß nicht was ich falsch mache aber auch der neue Code funktioniert bei mir nicht (VB6).
Ich lege eine neue Form an mit einer Listbox (List1) und einen CommandButton mit dem Code von dir. Wenn ich das Programm ausführe liest er auch die Datei "0013.dat" ein und gibt eine neue Datei "0013_sort.dat" aus, nur ist die neue Datei eine 100% Kopie der "0013.dat" und die Datensätze sind nicht nach der HRBNr sortiert.
Bis dahin Stephan | |
ListBox - Sorted = True ? | | | Autor: Dieter (Moderator) | Datum: 12.09.01 14:22 |
| Hi Stephan,
damit die Einträge sortiert werden können, muss die ListBox-Eigenschaft Sorted auf True festgelegt sein!
Prüf' das nochmal!
Cu
Dieter | |
Re: ListBox - Sorted = True ? | | | Autor: Stephan | Datum: 12.09.01 15:07 |
| Danke Danke Danke
Dieses Forum hat einen erstklassigen Moderator.
Bis dahin Stephan | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
Neu! sevEingabe 3.0
Einfach stark!
Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|