vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
NEU! sevCoolbar 3.0 - Professionelle Toolbars im modernen Design!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Visual-Basic Einsteiger
Sortieren 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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Sortieren innerhalb einer Textdatei 
Autor: ModeratorDieter (Moderator)
Datum: 11.09.01 15:52

Hi Stephan,

das Sortieren einer Textdatei selbst ist nicht möglich.
Was Du aber machen kannst, ist:

  1. Einlesen der Zeilen in ein Array
    Array sortieren
  2. 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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Sortieren innerhalb einer Textdatei 
Autor: ModeratorDieter (Moderator)
Datum: 11.09.01 19:16

Hi Sephan,

ich werde Dir mal einen entsprechenden Code zusammenstellen.

Cu
Dieter
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Sortieren innerhalb einer Textdatei 
Autor: ModeratorDieter (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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Sortieren innerhalb einer Textdatei 
Autor: ModeratorDieter (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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Jetzt ist es perfekt! 
Autor: ModeratorDieter (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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

ListBox - Sorted = True ? 
Autor: ModeratorDieter (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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: ListBox - Sorted = True ? 
Autor: Stephan
Datum: 12.09.01 15:07

Danke Danke Danke

Dieses Forum hat einen erstklassigen Moderator.

Bis dahin Stephan
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel