Från en textfil listar jag raderna i en combobox, men om någon rad är lika som någon som redan listats så ska denna inte listas! Kör en loop där du söker igenom varje rad i den och om du hittar något ställe där det är lika så sätter du en boolean-flagga till true... Just så är det tänkt att det måste gå till! Är detta till någon hjälp? Du kan kolla mitt uppskick Programarkivet:Ta Bort Dubbletter Ta bort Dubbletter. Andreas! Jag tror jag fick till det! Opps. Skulle var 0 istället för 1 i for satsen:Lista inte likadana rader i combo
Förslag på hur jag kan lösa detta?
Början på projektet som inte fungerar:
<code>
Sub Form_Load ()
Dim StrLen As Integer
Dim InString As String
Rad = 0 'Specificera antal rader i filen
Open App.Path & "\textfil.txt" For Input As #1
Do While Not EOF(1)
Line Input #1, InString
InString = Trim(InString) 'Ta bort mellenslag
StrLen = Len(InString) - 2 'Hämta stränglängd minus 2 tecken
If StrLen > 0 Then 'Om strängen har minst ett tecken
If Rad > 0 Then 'Om det INTE är första raden i filen
Antal = 0 'Specificera antal rader i "comboboxen"
Do While Antal <= Rad 'Så länge som comboboxrader är mindre
'eller lika som antal rader i filen
Combo1.ListIndex = Antal 'Visa text i comboboxen
Label2.Caption = Combo1.Text 'som överförs till Label2
If Not Label2.Caption = Left(InString, 4) Then 'Om INTE Label2 = raden i filen
Combo1.AddItem Left(InString, 4) 'Lägg till raden i filen
End If
Antal = Antal + 1 'Öka på antal rader som ska visas i combobox
Loop
Else 'Annars
Combo1.AddItem Left(InString, 4) 'Lägg till första raden från filen
End If
End If
Rad = Rad + 1 'Öka på antal rader från filen
Loop
Close #1
Label1.Caption = Rad 'Skriv ut antal rader från filen som komihåg
End Sub
</code>Sv: Lista inte likadana rader i combo
Sv: Lista inte likadana rader i combo
Här är ett annan lösning, som inte heller fungerar som jag vill
men det är meningen att programmet ska jämföra text!
<code>
Sub Form_Load ()
Combo1.Clear
Combo2.Clear
Dim Antal As Integer
Dim StrLen As Integer
Dim InString As String
Rad = 0
Open App.Path & "\recept2.txt" For Input As #1 ' Denna första del fyller
Do While Not EOF(1) ' Combo1 med alla rader från filen
Line Input #1, InString
InString = Trim(InString)
StrLen = Len(InString) - 2
If StrLen > 0 Then
Combo1.AddItem Left(InString, 4)
End If
Rad = Rad + 1
Loop
Close #1
Label2.Caption = Rad
Antal = 0
Open App.Path & "\recept2.txt" For Input As #1
Do While Antal < Rad
Combo1.Text = ""
Combo1.ListIndex = Antal
Label3.Caption = Combo1.Text
OK = 1
Antal = Antal + 1 ' Denna andra del tänkte jag skulle
Do While Not EOF(1) ' jämföra en rad från Combo1
Line Input #1, InString ' med alla rader i filen
InString = Trim(InString)
StrLen = Len(InString) - 2
If Left(InString, 4) = Label3.Caption Then OK = 0
Loop
If OK = 1 Then Combo2.AddItem Label3.Caption 'Left(InString, 4)
Loop
Close #1
End Sub
</code>Sv: Lista inte likadana rader i combo
<code>
Private Function Exists(ComboBox As ComboBox, Text As String) As Boolean
Dim Index As Long
For Index = 1 To ComboBox.ListCount - 1
If ComboBox.List(Index) = Text Then
Exists = True
Exit For
End If
Next
End Function
Sub Form_Load()
Dim FileNo As Long
Dim Length As Long
Dim strLine As String
FileNo = FreeFile()
Open App.Path & "\textfil.txt" For Input As #FileNo
Do Until EOF(FileNo)
Line Input #FileNo, strLine
strLine = Left$(strLine, 4)
strLine = Trim$(strLine) 'Ta bort mellenslag
Length = Len(strLine) 'Hämta stränglängd minus 2 tecken
If Length > 0 Then 'Om strängen har minst ett tecken
If Exists(Combo1, strLine) Then
Else
Combo1.AddItem strLine 'Lägg till första raden från filen
End If
End If
Loop
Close #1
Label1.Caption = Combo1.ListCount 'Skriv ut antal rader från filen som komihåg
End Sub
</code>Sv: Lista inte likadana rader i combo
Ett tips , gå till Filarean klicka på de flitigaste , klicka på tex Andreas
han har lagt upp en massa Guldexempel,det finns så mycket bra kanonexempel
där om Ni bara söker på rätt ord.Sv: Lista inte likadana rader i combo
Ditt exempel fungerade bra, bortsett 2 saker:
I första raden:
Private Function Exists(ComboBox As ComboBox, Text As String) As Boolean
fick jag Error på As Boolean, ändrade detta till As Variant ?
Vidare så, om första raden i den inlästa filen förekom på fler rader så lästes även denna rad in. men bara en gång!Sv: Lista inte likadana rader i combo
Ändrade raden: For Index = 1 To ComboBox.ListCount - 1
Till: For Index = -1 To ComboBox.ListCount - 1
Då dubblerades inte heller första raden
Tackar så mycket för hjälpen
GLAD SOMMAR!Sv: Lista inte likadana rader i combo
<code>
Private Function Exists(ComboBox As ComboBox, Text As String) As Boolean
Dim Index As Long
For Index = 0 To ComboBox.ListCount - 1
If ComboBox.List(Index) = Text Then
Exists = True
Exit For
End If
Next
End Function
</code>