PS: Wenn in einer neu erstellten Zeile jedoch mindestens 2 Zahlen gleich sind,
dann wird diese nicht übernommen!
Laut Beispiel würden dann nur diese Zeilen verbleiben:
01 02 03 04 05 06 09 10 11 12 13 14
01 02 03 04 05 07 09 10 11 12 13 14
Wer könnte mir hier bitte helfen?
Vorab besten Dank
Gruß
Angelina _________________
christopher.g Überflieger
Anmeldedatum: 03.05.2008 Beiträge: 536
Verfasst am: 03.08.2010, 10:48
hi
kann nicht so ein großes problem sein
wird halt ein bisschen dauern ^^
aber sonst
hier ein paar codeschnipsel
(lege dir ein modul an wie es dieser Eintrag beschreibt
ist ein einfacher umgang mit txt datei)
Code:
dim zeile1 as string
dim zeile 2 as string
for i = 1 to 2000
zeile1 = txt_readline ( "deineDatei", i) '1. Zeile auslesen
for j = 2 to 2000
zeile2 = txt_readline ( "deineDatei", j) '2. Zeile auslesen
txt_appendline "DeineDatei2", zeile1 & Zeile2
next
next
siehst du kein problem
getest hab ich den code jetzt nicht
gegebenfalls musst du etwas ausbessern
lg
angelina Newbie
Anmeldedatum: 03.08.2010 Beiträge: 15
Verfasst am: 03.08.2010, 11:51
christopher.g hat Folgendes geschrieben:
hi
kann nicht so ein großes problem sein
wird halt ein bisschen dauern ^^
aber sonst
hier ein paar codeschnipsel
(lege dir ein modul an wie es dieser Eintrag beschreibt
ist ein einfacher umgang mit txt datei)
Code:
dim zeile1 as string
dim zeile 2 as string
for i = 1 to 2000
zeile1 = txt_readline ( "deineDatei", i) '1. Zeile auslesen
for j = 2 to 2000
zeile2 = txt_readline ( "deineDatei", j) '2. Zeile auslesen
txt_appendline "DeineDatei2", zeile1 & Zeile2
next
next
siehst du kein problem
getest hab ich den code jetzt nicht
gegebenfalls musst du etwas ausbessern
lg
hallo,
vorab besten Dank!
Komme als Anfängerin nicht klar.
Habe es jetzt so probiert: ohne Erfolg!
test2.txt und test3.txt sind identisch
für die Ausgabe habe ich kombinier.txt genommen
Das mit dem Modul anlegen ????
Dim zeile1 As String
Dim zeile2 As String
zeile1 = i
zeile2 = j
Open "test2.txt" For Input As #1
Open "test3.txt" For Input As #2
Input #1, zeile1
For i = 1 To 2000
Input #2, zeile2
For j = 2 To 2000
Open "kombinier.txt" For Append As #3
Print #3, zeile1 & zeile2
Next
Next
christopher.g Überflieger
Anmeldedatum: 03.05.2008 Beiträge: 536
Verfasst am: 03.08.2010, 12:12
hi
is ja gar nicht mal schlecht für den anfang!!!
paar kleinigkeiten die dich halt zum scheitern bringen...
-) zum anfang
zeile1 = i
zeile2 = j
ist unnötig (da wird die leere variable i in die variable zeile1 geschrieben...)
-) test3.txt brauchst du auch nicht ^^
-) weiter mit dem input
ist fast richtig so
nur eine zeile zu hoch
du willst ja nicht nur die erste zeile einlesen sondern alle !
-) und wenn du eine datei öffnest musst du sie schliesen auch wieder
Code:
Dim zeile1 As String
Dim zeile2 As String
Open "C:\test2.txt" For Input As #1
Open "C:\test2.txt" For Input As #2
Open "C:\kombinier.txt" For Append As #3
On Error Resume Next
For i = 1 To 2000
Input #1, zeile1
For j = 1 To 2000
Input #2, zeile2
Print #3, zeile1 & zeile2
Next
Next
Close #1
Close #2
Close #3
lg
angelina Newbie
Anmeldedatum: 03.08.2010 Beiträge: 15
Verfasst am: 03.08.2010, 12:36
christopher.g hat Folgendes geschrieben:
hi
is ja gar nicht mal schlecht für den anfang!!!
paar kleinigkeiten die dich halt zum scheitern bringen...
-) zum anfang
zeile1 = i
zeile2 = j
ist unnötig (da wird die leere variable i in die variable zeile1 geschrieben...)
-) test3.txt brauchst du auch nicht ^^
-) weiter mit dem input
ist fast richtig so
nur eine zeile zu hoch
du willst ja nicht nur die erste zeile einlesen sondern alle !
-) und wenn du eine datei öffnest musst du sie schliesen auch wieder
Code:
Dim zeile1 As String
Dim zeile2 As String
Open "C:\test2.txt" For Input As #1
Open "C:\test2.txt" For Input As #2
Open "C:\kombinier.txt" For Append As #3
On Error Resume Next
For i = 1 To 2000
Input #1, zeile1
For j = 1 To 2000
Input #2, zeile2
Print #3, zeile1 & zeile2
Next
Next
Close #1
Close #2
Close #3
lg
Hallo,
danke auch Dir vorab!
Aber da stimmt was nicht. Hast Du mal selbst getestet?
Selbst wenn nur 3 Zeilen vorhanden sind - in der test2.txt
dann kommen da tausende Zeilen raus die nicht richtig kombiniert sind.
Desweiteren stehen da plötzlich 24 Zahlen in einer Reihe
teste mal selbst.
gruß
Angelina
christopher.g Überflieger
Anmeldedatum: 03.05.2008 Beiträge: 536
Verfasst am: 03.08.2010, 12:41
wie willst du es denn jetzt genau kombiniert haben?
du hast im ersten post erwähn dass da 2000 zeilen drin sind
und bei mir sinds 12 zahlen
angelina Newbie
Anmeldedatum: 03.08.2010 Beiträge: 15
Verfasst am: 03.08.2010, 12:51
christopher.g hat Folgendes geschrieben:
wie willst du es denn jetzt genau kombiniert haben?
du hast im ersten post erwähn dass da 2000 zeilen drin sind
und bei mir sinds 12 zahlen
hallo,
sorry - war mein Fehler das mit den 24 Zahlen.
Aber mach mal eine txt Datei mit nur diesen Zahlen/Inhalt
Und schau was da raus kommt. Hunderttausende an Zeilen ... obwohl es ja nur 13 x 12 / 2 = 78 sein dürften
(Ohne jetzt mal die gleichen Zahlen in einer Reihe)
und dann sind diese noch teilweise zusammengerückt
teste bitte mal
PS: Sollte da nicht 2 Zähler eingebaut werden müssen?
gruß
angelina
Zuletzt bearbeitet von angelina am 06.08.2010, 07:19, insgesamt einmal bearbeitet
christopher.g Überflieger
Anmeldedatum: 03.05.2008 Beiträge: 536
Verfasst am: 03.08.2010, 13:12
mit deinen 13 x 12 / 2 hab ich noch nicht begriffen für mich ist das 13^2
aber was hälst jetzt mal von dieser lösung?
Code:
Dim zeile1 As String
Dim zeile2 As String
Dim sStr(0 To 12) As String
Open "C:\test2.txt" For Input As #1
For i = 1 To 13
Input #1, sStr(i - 1)
Next
Close #1
Open "C:\kombinier.txt" For Append As #2
For i = 0 To 12
For j = 0 To 12
Print #2, sStr(i) & " " & sStr(j)
Next
Next
Close #2
angelina Newbie
Anmeldedatum: 03.08.2010 Beiträge: 15
Verfasst am: 03.08.2010, 13:31
christopher.g hat Folgendes geschrieben:
mit deinen 13 x 12 / 2 hab ich noch nicht begriffen für mich ist das 13^2
aber was hälst jetzt mal von dieser lösung?
Code:
Dim zeile1 As String
Dim zeile2 As String
Dim sStr(0 To 12) As String
Open "C:\test2.txt" For Input As #1
For i = 1 To 13
Input #1, sStr(i - 1)
Next
Close #1
Open "C:\kombinier.txt" For Append As #2
For i = 0 To 12
For j = 0 To 12
Print #2, sStr(i) & " " & sStr(j)
Next
Next
Close #2
Super, das kommt der Sache schon sehr sehr nahe.
Danke danke danke Dir !!!
Jetzt muss ich nur noch alle Zeilen löschen aus der kombinier.txt die in einer Zeile mind. eine gleiche Zahl haben.
liebe Grüße
Angelina
christopher.g Überflieger
Anmeldedatum: 03.05.2008 Beiträge: 536
Verfasst am: 03.08.2010, 13:45
darf ich fragen woran du da grade proggst??
angelina Newbie
Anmeldedatum: 03.08.2010 Beiträge: 15
Verfasst am: 03.08.2010, 14:00
christopher.g hat Folgendes geschrieben:
darf ich fragen woran du da grade proggst??
hallo,
quantitativen Informationen!
Könnte man die Zeilen die doppelte Zahlen haben nicht schon gleich entfernen
bevor sie in die neue Datei geschrieben werden?
Also ich meine:
Sobald die beiden zeilen
zeile1 und zeile2
verbunden werden wird geprüft, ob mind. eine Zahl gleich ist dann wird diese erst garnicht in die neue
kombinier.txt übernommen ???
gruß
Angelina
christopher.g Überflieger
Anmeldedatum: 03.05.2008 Beiträge: 536
Verfasst am: 03.08.2010, 14:30
ja brauchst sie ja nur miteinander zu vergleichen...
Code:
Private Sub Command1_Click()
Dim zeile1 As String
Dim zeile2 As String
Dim sStr(0 To 12) As String
Open "C:\test2.txt" For Input As #1
For i = 1 To 13
Input #1, sStr(i - 1)
Next
Close #1
Open "C:\kombinier.txt" For Append As #2
For i = 0 To 12
For j = 0 To 12
If IsDbl(sStr(i) & " " & sStr(j)) = False Then Print #2, sStr(i) & " " & sStr(j)
Next
Next
Close #2
End Sub
Private Function IsDbl(ByVal sString As String) As Boolean
Dim zwi() As String
zwi = Split(sString, " ")
For i = 0 To UBound(zwi)
For j = 0 To UBound(zwi)
If i = j Then GoTo 1
If zwi(i) = zwi(j) Then
IsDbl = True
Exit Function
End If
1:
Next
Next
End Function
soll ich dir den code kommentieren oder kommst so klar??
lg
edit:
aja welche zahl hast du eigentlich gemeint?
die ganzen 6 + 6 zahlen
oder ob die "2er zahl" drin vorkommt?
hab jetzt auf letzteres geprüft
wenn du aber die 6erblöck vergleichen meintest
dann
einfach
Code:
Dim zeile1 As String
Dim zeile2 As String
Dim sStr(0 To 12) As String
Open "C:\test2.txt" For Input As #1
For i = 1 To 13
Input #1, sStr(i - 1)
Next
Close #1
Open "C:\kombinier.txt" For Append As #2
For i = 0 To 12
For j = 0 To 12
If Not sStr(i) = sStr(j) Then Print #2, sStr(i) & " " & sStr(j)
Next
Next
Close #2
angelina Newbie
Anmeldedatum: 03.08.2010 Beiträge: 15
Verfasst am: 04.08.2010, 07:38
christopher.g hat Folgendes geschrieben:
ja brauchst sie ja nur miteinander zu vergleichen...
Code:
Private Sub Command1_Click()
Dim zeile1 As String
Dim zeile2 As String
Dim sStr(0 To 12) As String
Open "C:\test2.txt" For Input As #1
For i = 1 To 13
Input #1, sStr(i - 1)
Next
Close #1
Open "C:\kombinier.txt" For Append As #2
For i = 0 To 12
For j = 0 To 12
If IsDbl(sStr(i) & " " & sStr(j)) = False Then Print #2, sStr(i) & " " & sStr(j)
Next
Next
Close #2
End Sub
Private Function IsDbl(ByVal sString As String) As Boolean
Dim zwi() As String
zwi = Split(sString, " ")
For i = 0 To UBound(zwi)
For j = 0 To UBound(zwi)
If i = j Then GoTo 1
If zwi(i) = zwi(j) Then
IsDbl = True
Exit Function
End If
1:
Next
Next
End Function
soll ich dir den code kommentieren oder kommst so klar??
lg
edit:
aja welche zahl hast du eigentlich gemeint?
die ganzen 6 + 6 zahlen
oder ob die "2er zahl" drin vorkommt?
hab jetzt auf letzteres geprüft
wenn du aber die 6erblöck vergleichen meintest
dann
einfach
Code:
Dim zeile1 As String
Dim zeile2 As String
Dim sStr(0 To 12) As String
Open "C:\test2.txt" For Input As #1
For i = 1 To 13
Input #1, sStr(i - 1)
Next
Close #1
Open "C:\kombinier.txt" For Append As #2
For i = 0 To 12
For j = 0 To 12
If Not sStr(i) = sStr(j) Then Print #2, sStr(i) & " " & sStr(j)
Next
Next
Close #2
Hallo,
sorry konnte mich erst jetzt wieder melden.
Nochmals danke danke danke hat alles gut funktioniert
Nun versuche ich verzweifelt - als Anfängerin in VB6 - eine Datei zu zählen.
Ich habe eine txt Datei dort sind 990628 Werte eingetragen.
Beispiel:
1
2
3
990628
500
3
29
1789
usw.
Kleinster Wert ist 1 und größter Wert ist 990628
Nun möchte ich wissen, wie oft ist welche Zahl vertreten.
Beispiel:
3 = 2 x
usw.
Das habe ich dazu gebastelt - läuft aber zu lange - viel zu lange !
1000 Jahre
Wer könnte das verbessern?
Code:
Private Sub Command1_Click()
'Ermittlung der Häufigkeit einzelner Zahlen
MousePointer = 11
Dim s1(990628)
For a = 1 To 990628
s1(a) = 0
Next
Open (AktuellerPfad + "sortiert.txt") For Input As #1
loop1:
If EOF(1) = True Then Close #1: GoTo loop2
Input #1, i1
For a = 1 To 990628
If a = i1 Then s1(a) = s1(a) + 1
Me.Caption = a & "/" & i1 'Kontrolle
DoEvents
Next
GoTo loop1
loop2:
Open (AktuellerPfad + "Spalte_1-.txt") For Output As #1
For a = 1 To 990628
Print #1, a; " = "; s1(a); "x"
Next
Close #1
MousePointer = 0
Unload Me
End Sub
[/quote]
vielen lieben dank vorab
Angelina
christopher.g Überflieger
Anmeldedatum: 03.05.2008 Beiträge: 536
Verfasst am: 04.08.2010, 10:32
hey
hehe is eigentlich gar nicht so schwer ^^ und geht auch halbwechs schnell
dennnoch bin ich jetzt lange gesessen und hab gegrübelt
hier die lösung dafür
Code:
Dim sstr(990628) As Long
Dim sSum(990628) As Integer
Open "C:\zahlen.txt" For Input As #1
For i = 1 To 990628
Input #1, sstr(i)
sSum(CCur(sstr(i))) = sSum(CCur(sstr(i))) + 1
Next
Close #1
Open "C:\ausgabe.txt" For Output As #1
For i = 1 To 990628
Print #1, i & " = " & CCur(sSum(i)) & "x"
Next
Close #1
lg
aja du hast ein bisschen weiter unten
einen butten "post reply"
dann würdest nicht immer den ganzen vorrigen beitrag zitieren
angelina Newbie
Anmeldedatum: 03.08.2010 Beiträge: 15
Verfasst am: 04.08.2010, 16:50
Hallo christopher.g
danke Dir habe mein Code entfernt und Deinen genommen.
Läuft relativ schnell.
Nur leider steht der größte gefundene Wert nicht oben.
Also absteigend sortiert mit der Anzahl wie oft.
lieben lieben Gruß
Angelina
christopher.g Überflieger
Anmeldedatum: 03.05.2008 Beiträge: 536
Verfasst am: 05.08.2010, 07:09
hey
brauchst die schleife der ausgabe ja nur umdrehen...
Code:
Open "C:\ausgabe.txt" For Output As #1
For i = 990628 to 1 step -1
Print #1, i & " = " & CCur(sSum(i)) & "x"
Next
Close #1
dann hast zuerst 990628 = 1x ...
lg
angelina Newbie
Anmeldedatum: 03.08.2010 Beiträge: 15
Verfasst am: 05.08.2010, 07:24
Hallo,
nein das habe ich nicht gemeint.
Trotzdem danke nochmals
Ich meinte:
Bei der Ausgabe wird die Anzahl geschrieben CCur(sSum(i))
Nur wenn ich jetzt die txt öffne stehen da ja 990628 Zeilen untereinander mit jeweils wie oft vorgekommen.
Ich wollte die die am meisten vorgekommen sind oben am Anfang der Datei haben usw. also absteigend
sortiert nach ihrer Häufigkeit.
Ich wollte das in excel öffnen - geht aber nicht, da zuviele Zeilen
Dann habe ich versucht nur die Zeilen zu drucken die mehr als 3 x vorgekommen sind.
Da ich das absteigend sortieren nicht kann.
If sSum(i) > 3 Then Print #1, i & " = " & CCur(sSum(i)) & " x"
geht aber auch nicht!
lieben Gruß
Angelina
christopher.g Überflieger
Anmeldedatum: 03.05.2008 Beiträge: 536
Verfasst am: 05.08.2010, 07:47
hey
also bei mir funktioniert das mit größer 3
Code:
Dim sstr(990628) As Long
Dim sSum(990628) As Integer
Open "C:\zahlen.txt" For Input As #1
For i = 1 To 990628
Input #1, sstr(i)
sSum(CCur(sstr(i))) = sSum(CCur(sstr(i))) + 1
Next
Close #1
Open "C:\ausgabe.txt" For Output As #1
For i = 1 To 990628
If sSum(i) > 3 Then Print #1, i & " = " & CCur(sSum(i)) & "x"
Next
Close #1
aber die liste zu sortieren
mit der größen summe zuerst
puh möglich aber dauert ewig und nochlänger
weil der array ja doch eine größe von 990.000 hat
christopher.g Überflieger
Anmeldedatum: 03.05.2008 Beiträge: 536
Verfasst am: 05.08.2010, 08:32
hey also hab nochmal herumprobiert
und es funktioniert doch (eigentlich nimmnt man dafür wahrscheinlich einen 2dimensionalen array aber keine ahnung von)
die meisterlösung is sicher nicht
aber sie funktoiniert nach dem schema was du möchtest
Code:
Dim sstr(990628) As Long
Dim sSum(990628) As Integer
Open "C:\zahlen.txt" For Input As #1
For i = 1 To 990628
Input #1, sstr(i)
sSum(CCur(sstr(i))) = sSum(CCur(sstr(i))) + 1
Next
Close #1
Dim A1()
ReDim A1(0)
Dim A2()
ReDim A2(0)
Dim A3()
ReDim A3(0)
Dim A4()
ReDim A4(0)
Dim A5()
ReDim A5(0)
Dim A6()
ReDim A6(0)
Dim A7()
ReDim A7(0)
Dim A8()
ReDim A8(0)
Dim A9()
ReDim A9(0)
Dim A10()
ReDim A10(0)
For i = 1 To 990628
Select Case CCur(sSum(i))
Case 10
ReDim Preserve A10(UBound(A10) + 1)
A10(UBound(A10)) = i & " = " & CCur(sSum(i)) & "x"
Case 9
ReDim Preserve A9(UBound(A9) + 1)
A9(UBound(A9)) = i & " = " & CCur(sSum(i)) & "x"
Case 8
ReDim Preserve A8(UBound(A8) + 1)
A8(UBound(A8)) = i & " = " & CCur(sSum(i)) & "x"
Case 7
ReDim Preserve A7(UBound(A7) + 1)
A7(UBound(A7)) = i & " = " & CCur(sSum(i)) & "x"
Case 6
ReDim Preserve A6(UBound(A6) + 1)
A6(UBound(A6)) = i & " = " & CCur(sSum(i)) & "x"
Case 5
ReDim Preserve A5(UBound(A5) + 1)
A5(UBound(A5)) = i & " = " & CCur(sSum(i)) & "x"
Case 4
ReDim Preserve A4(UBound(A4) + 1)
A4(UBound(A4)) = i & " = " & CCur(sSum(i)) & "x"
Case 3
ReDim Preserve A3(UBound(A3) + 1)
A3(UBound(A3)) = i & " = " & CCur(sSum(i)) & "x"
Case 2
ReDim Preserve A2(UBound(A2) + 1)
A2(UBound(A2)) = i & " = " & CCur(sSum(i)) & "x"
Case 1
ReDim Preserve A1(UBound(A1) + 1)
A1(UBound(A1)) = i & " = " & CCur(sSum(i)) & "x"
End Select
Next
Open "C:\ausgabe.txt" For Output As #1
For i = 0 To UBound(A10)
Print #1, A10(i)
Next
For i = 0 To UBound(A9)
Print #1, A9(i)
Next
For i = 0 To UBound(A8)
Print #1, A8(i)
Next
For i = 0 To UBound(A7)
Print #1, A7(i)
Next
For i = 0 To UBound(A6)
Print #1, A6(i)
Next
For i = 0 To UBound(A5)
Print #1, A5(i)
Next
For i = 0 To UBound(A4)
Print #1, A4(i)
Next
For i = 0 To UBound(A3)
Print #1, A3(i)
Next
For i = 0 To UBound(A3)
Print #1, A3(i)
Next
For i = 0 To UBound(A2)
Print #1, A2(i)
Next
For i = 0 To UBound(A1)
Print #1, A1(i)
Next
Close #1
lg
angelina Newbie
Anmeldedatum: 03.08.2010 Beiträge: 15
Verfasst am: 05.08.2010, 09:20
Hallo mein Freund ,
nochmals danke - ich kann mich nicht genug bedanken.
Läuft ja jetzt ruck zuck - paar sekunden, dann fertig!
Die Ausgabe.txt schaut jetzt so aus:
Die ersten 8 Zeilen sind leer - kein Eintrag - warum auch immer!
.
.
.
.
.
.
.
.
95787 = 3x
117399 = 3x
293889 = 3x
351563 = 3x
606491 = 3x
624476 = 3x
699955 = 3x
845144 = 3x
900438 = 3x
957189 = 3x
961805 = 3x
968238 = 3x
968961 = 3x
989905 = 3x