Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Ordine alfabetico in ASCII (txt)

Ciao,
Io proprio non ne ho idea...ma dovrei poter riordinare alfabeticamente circa
diecimila  linee ASCII ad esempio:
#NOME COGNOME CITTA
LUCA ROSSI MILANO
FRANCO BIANCHI ROMA
GIOVANNI BENIAMINI VARESE
...
Come potrei selezionare un ordinamento alfabetico per NOME, COGNOME oppure
CITTÀ calcolando che nel file potrebbero esserci anche 10000 linee?
Grazie per qualche consiglio

 ha scritto:



importatelo in access e ordinalo, se devi farlo una volta sola.
creati un recordset e ordina quello se devi farlo da programma.
ciao
ugo

Dovrei proprio lavorarlo su un file ASCII, dato che vengono create 30 file
ascii da un altro sistema che devono essere ordinati alfabeticamente ogni
24h, quindi dovrei poter automatizzare il sistema partendo da quei file
ascii direttamente.
Qualche esempio per
File ascii PIPPO.TXT  (esempio a caso)
---cut file pippo.txt---
LUCA ROSSI MILANO
FRANCO BIANCHI ROMA
GIOVANNI BENIAMINI VARESE
...
---cut---


Avendo la gestione del generatore iniziale, avrei anche iio optato per una
solutzione del genere ma qui dovrei proprio lavorarlo su un file ASCII, dato
che vengono create 30 file ascii da un altro sistema che devono essere
ordinati alfabeticamente ogni 24h, quindi dovrei poter automatizzare il
sistema partendo da quei file
ascii direttamente.
Qualche esempio per
File ascii PIPPO1.TXT  (esempio a caso)
---cut file pippo.txt---
LUCA ROSSI MILANO
FRANCO BIANCHI ROMA
GIOVANNI BENIAMINI VARESE
...
---cut---


 > beh 10000 righe ....


 ha scritto nel messaggio
news:9eqi0d$b1e$1...@news1.sunrise.ch...


 ti suggerisco di richiamare il vecchio comando DOS Sort... č facile da


 Fr@nco
hai cercato cosa ?
ho chiesto adesso:
ng: iclvb
autore: hellboy
parola: quicksort
http://groups.google.com/groups?as_q=quicksort&num=50&as_scoring=r&btnG=
Cerca+con+Google&as_epq=&as_oq=&as_eq=&as_ugroup=it.comp.lang.visual-bas
ic&as_usubject=&as_uauthors=hellboy&as_umsgid=&lr=&as_drrb=q&as_qdr=&as_
mind=29&as_minm=3&as_miny=1995&as_maxd=27&as_maxm=5&as_maxy=2001
il post che avevo in mente direi sia _il primo_ del listato:
http://groups.google.com/groups?q=quicksort+group:it.comp.lang.visual-ba
sic+author:hellboy&num=50&hl=it&lr=&safe=off&scoring=r&rnum=1&ic=1&selm=
RpM54.765%24m62.4624%
40news.infostrada.it
come dire...


Bella idea, non ci avevo pensato.
ciao
ugo

 > GIOVANNI BENIAMINI VARESE
ho provato a implementare il codice di hellboy.
il risultato su una macchina media e il codice sono sotto:
di mio ci sono solo le sub dei due command.
il sorting avviene pero' sull'intera stringa. se le righe sopra devi
riordinarle anche per cognome, citta' ecc., forse ti conviene davvero
preparare una tabella coi vari indici e rigenerare i txt da li'.
ciao, a.
-------------------
0,13 - created C:\vbprove\text\sort_file\test10k.txt
-------------------
0,00 - reading...
0,15 - sorting...
28,09 - writing...
28,20 - complete: C:\vbprove\text\sort_file\test10k_out.txt
[nell'ide e' molto piu' lento, ci mette quasi 90 secondi]
--
Option Explicit
Dim aFile(10000) As String
Private Sub cmdCreateFile_Click()
    Dim time1: time1 = Timer
    Dim s As String, j As Integer
    s = "0123456789abcdefghijklmnopqrstuvwxyz"
    Dim fNum As Integer, fName As String
    fName = App.Path & "\test10k.txt"
    fNum = FreeFile
    Open fName For Output As #fNum
    For j = 0 To 9999
        Print #fNum, s
        s = Right(s, Len(s) - 1) & Left(s, 1)
    Next
    Close #fNum
    Text1 = "-------------------"
    Text1 = Text1 & vbCrLf & Format(Timer - time1, "##0.00") & " -
created " & fName
    cmdSortFile.Enabled = True
End Sub
Private Sub cmdSortFile_Click()
    Dim time1: time1 = Timer
    Text1 = Text1 & vbCrLf & "-------------------"
    Text1 = Text1 & vbCrLf & Format(Timer - time1, "##0.00") & " -
reading..."
    DoEvents
    Dim j As Integer
    Dim fNum As Integer, fName As String, fName2 As String
    fName = App.Path & "\test10k.txt"
    fNum = FreeFile
    Open fName For Input As #fNum
    While Not EOF(fNum)
        Line Input #fNum, aFile(j)
        j = j + 1
    Wend
    Close #fNum
    Text1 = Text1 & vbCrLf & Format(Timer - time1, "##0.00") & " -
sorting..."
    DoEvents
    QuickSort aFile(), False, 0, 9999
    Text1 = Text1 & vbCrLf & Format(Timer - time1, "##0.00") & " -
writing..."
    DoEvents
    fName = App.Path & "\test10k_out.txt"
    fNum = FreeFile
    Open fName For Output As #fNum
    For j = 0 To 9999
        Print #fNum, aFile(j)
    Next
    Close #fNum
    Text1 = Text1 & vbCrLf & Format(Timer - time1, "##0.00") & " -
complete: " & fName
    DoEvents
End Sub
' esempio:
' per ordinare un array di stringhe X dalla posizione 1 alla posizione
10
' con verso crescente:
'   QuickSort X(), False, 1, 10
' per ordinare un array di stringhe X dalla posizione 0 alla posizione
100
' con verso decrescente:
'   QuickSort X(), True, 0, 100
Public Sub QuickSort(SortArray() As String, flgMode As Boolean, Low As
Integer, High As Integer)
    Dim RandIndex As Integer
    Dim i As Integer, j As Integer
    Dim Partition As String
    If (Low = -1) And (High = -1) Then
        Low = LBound(SortArray)
        High = UBound(SortArray)
    End If
    If Low < High Then
        If High - Low = 1 Then
            If Compare(SortArray(Low), SortArray(High), Not flgMode)
Then
                Swap SortArray(Low), SortArray(High)
            End If
        Else
            RandIndex = RandInt(Low, High)
            Swap SortArray(High), SortArray(RandIndex)
            Partition = SortArray(High)
            Do
                i = Low: j = High
                Do While (i < j) And Not Compare(SortArray(i),
Partition, Not flgMode)
                    i = i + 1
                Loop
                Do While (j > i) And Not Compare(SortArray(j),
Partition, flgMode)
                    j = j - 1
                Loop
                If i < j Then
                    Swap SortArray(i), SortArray(j)
                End If
            Loop While i < j
            Swap SortArray(i), SortArray(High)
            If (i - Low) < (High - i) Then
                QuickSort SortArray, flgMode, Low, i - 1
                QuickSort SortArray, flgMode, i + 1, High
            Else
                QuickSort SortArray, flgMode, i + 1, High
                QuickSort SortArray, flgMode, Low, i - 1
            End If
        End If
    End If
End Sub
Private Sub Swap(x As String, y As String)
    Dim z As String
    z = x: x = y: y = z
End Sub
Private Function Compare(x As String, y As String, flgMode As Boolean)
As Boolean
    Compare = ((x < y) And (Not flgMode)) Or ((x > y) And (flgMode))
End Function
Private Function RandInt(Lower As Integer, Upper As Integer) As Integer
    Static flgYetInit As Boolean
    If Not flgYetInit Then
        Randomize Timer
        flgYetInit = True
    End If
    RandInt = Int(Rnd * (Upper - Lower + 1)) + Lower
End Function

 ha scritto nel messaggio
| news:9er251$dfl$1...@serv1.iunet.it...
| > Caro Fr@nko,
| >
| > ti suggerisco di richiamare il vecchio comando DOS Sort... č facile da
