vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 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
Re: Kombi i2 i3 wie oft vorhanden? 
Autor: Manfred X
Datum: 22.01.13 13:23

Hallo!

Haben wir solche Sachen nicht schon gelegentlich besprochen?

Am besten, Du beschreibst Deine Zielstellung etwas genauer.

Geht es nur um die Werte-Paare oder auch darum, an welcher
Position in der Zeile die Werte jeweils stehen?

Können das irgendwelche Werte sein oder gibt es einen Werte-Vorrat
aus dem die Ausprägungen in den Zeilen entnommen worden sind?

Ich würde ein UDT-Array nutzen: Wert1, Wert2, Häufigkeit
Füllen in einer mehrfach geschachtelten Schleife (Variablen-Paarung, Zeilen).

MfG
Manfred
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Kombi i2 i3 wie oft vorhanden? 
Autor: JBL
Datum: 22.01.13 09:59

hallo,

ich bräuchte mal wieder eure Hilfe

Input #1, i1, i2, i3, i4
Also als input habe ich eine txt datei mit diesem inhalt:
3 , 4 , 7 , 10
3 , 4 , 7 , 16
3 , 4 , 7 , 30
3 , 4 , 7 , 31
3 , 4 , 7 , 41
3 , 4 , 7 , 46
3 , 4 , 8 , 10
3 , 4 , 8 , 30
3 , 4 , 8 , 31
3 , 4 , 8 , 41
3 , 4 , 18 , 30
3 , 4 , 18 , 31
3 , 4 , 18 , 41
3 , 4 , 18 , 46
3 , 4 , 21 , 30
3 , 4 , 21 , 31
3 , 4 , 21 , 41
3 , 4 , 21 , 43
3 , 4 , 21 , 46
3 , 4 , 25 , 30
3 , 4 , 25 , 31
3 , 4 , 25 , 41
3 , 4 , 25 , 43
3 , 4 , 25 , 46
3 , 4 , 27 , 30
3 , 4 , 27 , 31
3 , 4 , 27 , 41
3 , 4 , 27 , 43
3 , 4 , 27 , 46
3 , 4 , 33 , 41
3 , 4 , 33 , 46
3 , 4 , 39 , 41
3 , 4 , 40 , 41
3 , 4 , 40 , 43
3 , 4 , 40 , 46
3 , 7 , 19 , 30
3 , 7 , 19 , 31
3 , 7 , 19 , 41
3 , 7 , 19 , 46
3 , 7 , 23 , 30
3 , 7 , 23 , 31
3 , 7 , 23 , 41
3 , 7 , 23 , 43
3 , 7 , 23 , 46
3 , 7 , 35 , 41
3 , 7 , 35 , 43
usw.
usw.

ca. 2000 solcher Reihen, die Reihen sind zwar schön geordnet es könnte jedoch
auch vorkommen das diese nicht geordnet vorliegen.
Es geht nur um die i2 und i3 Kombi als output.

die erste Zahl ist i1
die zweite Zahl ist i2
die dritte Zahl ist i3
die vierte Zahl ist i4

nun möchte ich gerne wissen, wie oft eine 2-er-Kombination aus i2 und i3 vorhanden ist.

Ausgabe vielleicht so in eine txt Datei:
4-7 = 6
4-8 = 4
7-35 = 2
usw.
usw.



wie könnte ich das am einfachsten realisieren?

Danke vorab nochmals

LG
Angelina
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Kombi i2 i3 wie oft vorhanden? 
Autor: JBL
Datum: 22.01.13 13:38

hallo,

hm.... ich dachte ich hätte es gut erklärt

also in einer bestehenden txt Datei sind diese Werte:

3 , 4 , 7 , 10
3 , 4 , 7 , 16
3 , 4 , 7 , 30
3 , 4 , 7 , 31
3 , 4 , 7 , 41
3 , 4 , 7 , 46
3 , 4 , 8 , 10
3 , 4 , 8 , 30
3 , 4 , 8 , 31
3 , 4 , 8 , 41
3 , 4 , 18 , 30
3 , 4 , 18 , 31
3 , 4 , 18 , 41
3 , 4 , 18 , 46
3 , 4 , 21 , 30
3 , 4 , 21 , 31
3 , 4 , 21 , 41
3 , 4 , 21 , 43
3 , 4 , 21 , 46
3 , 4 , 25 , 30
3 , 4 , 25 , 31
3 , 4 , 25 , 41
3 , 4 , 25 , 43
3 , 4 , 25 , 46
3 , 4 , 27 , 30
3 , 4 , 27 , 31
3 , 4 , 27 , 41
3 , 4 , 27 , 43
3 , 4 , 27 , 46
3 , 4 , 33 , 41
3 , 4 , 33 , 46
3 , 4 , 39 , 41
3 , 4 , 40 , 41
3 , 4 , 40 , 43
3 , 4 , 40 , 46
3 , 7 , 19 , 30
3 , 7 , 19 , 31
3 , 7 , 19 , 41
3 , 7 , 19 , 46
3 , 7 , 23 , 30
3 , 7 , 23 , 31
3 , 7 , 23 , 41
3 , 7 , 23 , 43
3 , 7 , 23 , 46
3 , 7 , 35 , 41
3 , 7 , 35 , 43
usw.
usw.

Wenn ich nun diese Datei als input nehme
i1,i2,i3,i4

dann soll von oben nach unten die erste i2 und i3 (bilden eine Kombi)
geprüft werden (nach unten in der Datei) wie oft diese vorhanden ist.
Dann ist der erste Prüfvorgang abgeschlossen und es wird die zweite
Zeile genommen. Auch wieder nur i2 und i3.
Wurde diese Kombi bereits im Vorweld ermittelt und gezählt dann braucht
sie bei diesem Durchlauf nicht mehr gezählt werden.
Sobald eine Zeile mit i2 und i3 kommt, die noch nicht gezählt wurde dann
wird diese gezählt.

Ausgabe vielleicht so in eine txt Datei:
4-7 = 6
4-8 = 4
7-35 = 2
usw.
usw.

Versteht man mich nun besser?

LG
Angelina
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Kombi i2 i3 wie oft vorhanden? 
Autor: Manfred X
Datum: 22.01.13 13:50

Das ist in dieser Form keine Programmieraufgabe!
Das wäre Instant-Code, den man nach Gebrauch wegwirft.

Meine Fragen sind nicht beantwortet.

Du mußt doch versuchen, eine allgemein verwendbare
(über Parameter gesteuerte) Funktion zu erstellen, z.B.
- variable Anzahl von Werten pro Zeile
- Vorgabe von zu den einzubeziehenden Positionen (auch Anzahl usw.)
- Wertevorrat (z.B. Aussonderung unplausibler Zeilen)
- usw.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Kombi i2 i3 wie oft vorhanden? 
Autor: JBL
Datum: 22.01.13 14:17

hallo,

wie so ist eine Zählfunktion keine Programmieraufgabe?

Ansonsten verstehe ich nur Bahnhof - sorry

Ich wollte nur zählen lassen!
Die Input Datei schaut zwar immer so aus - jedoch von Woche zu Woche
unterschiedliche Zahlen vorhanden!


LG
Angelina

Beitrag wurde zuletzt am 22.01.13 um 14:18:37 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Kombi i2 i3 wie oft vorhanden? 
Autor: Manfred X
Datum: 22.01.13 14:52

Was Du schilderst, ist aber noch nicht hinreichend,
um eine Funktion abzuleiten.
[I]"Die Input-Datei schaut zwar immer so aus."[/I]

Wie?

Erforderlicher Datentyp der Werte (Ausprägungsbereich): Integer, Long, Single?
Anzahl der Werte pro Spalte: fix oder variabel?
Trennzeichen zwischen Werten: fix oder variabel?
Auszuzählende Spalten-Positionen: fix oder variabel?
Anzahl der auszuzählenden Positionen (immer zwei oder 1,2,3,4 ..)
Datenabgleich: Können Werte fehlen oder Ausprägungen unplausibel sein?

Was hast Du bisher codiert?
Und woran ist es gescheitert?

Beitrag wurde zuletzt am 22.01.13 um 14:55:14 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Kombi i2 i3 wie oft vorhanden? 
Autor: JBL
Datum: 22.01.13 16:21

hallo,

hier liegt die Datei:
http://neuer.altervista.org/Forum/Input-Angelina.txt


Wie würdest du jetzt mit VB6 diese Datei öffnen (input)
und herausfinden wollen, wie oft z.B. die Kombination
aus dem dort stehenden ersten Paar 4 , 7 (welches ja bereits dort steht)
noch in der o.g. Datei vorhanden ist?

Es bezieht sich nur auf i2 und i3

i1, i2, i3, i4
3 , 4 , 7 , 10



LG
Angelina
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Kombi i2 i3 wie oft vorhanden? 
Autor: Manfred X
Datum: 22.01.13 16:34

Hallo!

Ganz trivial etwa so:

Dim fc As Integer, i1%, i2%, i3%, i4&
fc = FreeFile
Open "C:\daten\demodaten.txt" For Input As #fc
 
Dim i2_col As New Collection, i3_col As New Collection
Dim freq(10000) As Integer 'Eventuell mit Redim Preserve dynamisch verländern 
 
Dim index As Integer, vorhanden As Boolean
While Not EOF(fc)
   Input #fc, i1, i2, i3, i4
   vorhanden = False
   For index = 1 To i2_col.count
      If i2_col(index) = i2 And i3_col(index) = i3 Then
        freq(index) = freq(index) + 1: vorhanden = True: Exit For
      End If
   Next index
 
   If Not vorhanden Then
      i2_col.Add (i2): i3_col.Add (i3): freq(i2_col.count) = 1
   End If
Wend
 
Close #fc
 
Open "C:\daten\demoresult.txt" For Output As #fc
For index = 1 To i2_col.count
   Print #fc, CStr(i2_col(index)) & " - " & CStr(i3_col(index)) & _
   ": " & CStr(freq(index))
Next index
 
Close #fc
Aber: Eigentlich sollte der Dateiinhalt beim Lesen geprüft werden.
Wenn diese Zahlen eine bestimmte Bedeutung haben, sollten geeignete
Datenstrukturen erstellt werden.

Beitrag wurde zuletzt am 22.01.13 um 16:36:03 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Kombi i2 i3 wie oft vorhanden? 
Autor: JBL
Datum: 23.01.13 06:51

hallo Manfred,

das hat ja alles auf Anhieb gepasst unglaublich wie schnell du so etwas
umsetzen kannst - Daumen hoch !!!

Sorry, wenn ich mich umständlich in meiner Beschreibung ausgedrückt habe.


Beim dem nun vorliegenden Ergebnis in der Enddatei
"C:\daten\demoresult.txt"

ist mir aufgefallen, das ich etwas entscheidendes vergessen habe


Du hast ja (nach meiner Vorgabe richtig) auf i2 und i3 prüfen/zählen lassen - ist auch so wie es
jetzt ist alles so richtig.

Jedoch gibt es nun in der demoresult.txt gezählte Kombinationen die dort nicht brauchbar sind.
(Hat sich jetzt erst ergeben - wie immer!)

Und zwar solche (sind unbrauchbar) die mind. eine Zahl aus der demodaten.txt
haben, die auf einer x-beliebigen Stelle von demodaten.txt auf i1 oder i4 stehen.

Also ist in unserer demoresult.txt eine Zahl (egal ob i2 oder i3) eine die auf
i1 oder i4 der demodaten.txt steht, dann fliegt diese Kombi i2,i3 raus und braucht
daher nicht in der Enddatei demoresult.txt gedruckt werden.

In unserer demodaten.txt sind dies dann die Zahlen:

3 (i1)

10(i4)
16(i4)
30(i4)
31(i4)
41(i4)
43(i4)
46(i4)

Hat eine 2er-Kombi eine dieser Zahlen dann fliegt sie raus und erscheint nicht in der
demoresult.txt

Danke nochmals für deine Zeit !

LG
Angelina
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Kombi i2 i3 wie oft vorhanden? 
Autor: Manfred X
Datum: 23.01.13 11:56

[I]Und zwar solche (sind unbrauchbar) die mind. eine Zahl aus der demodaten.txt
haben, die auf einer x-beliebigen Stelle von demodaten.txt auf i1 oder i4 stehen.[/I]

x-beliebige Stelle von demodaten?
Ich nehme an, diese Aussage bezieht sich auf die Zahlen-Konstellation
in jeweils einer Zeile (nicht auf die gesamte Datei).

Vielleicht eine zusätzliche Bedingung zum Filtern der
verbotenen Sätze einbauen?
While Not EOF(fc)
   Input #fc, i1, i2, i3, i4
   vorhanden = False
   If Not (i1 = i2 or i1 = i3 _
      or i4 = i2 or i4 = i3) Then
      For index = 1 To i2_col.count
         If i2_col(index) = i2 And i3_col(index) = i3 Then
           freq(index) = freq(index) + 1: vorhanden = True: Exit For
         End If
      Next index
      If Not vorhanden Then
       i2_col.Add (i2): i3_col.Add (i3): freq(i2_col.count) = 1
      End If
  End If
 
Wend


Beitrag wurde zuletzt am 23.01.13 um 12:05:15 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Kombi i2 i3 wie oft vorhanden? 
Autor: JBL
Datum: 24.01.13 06:05

hallo Manfred,

leider haben wir uns nicht verstanden.

---------------------------------------------------------------------------------------
Ich schrieb u.a.
3 (i1)

10(i4)
16(i4)
30(i4)
31(i4)
41(i4)
43(i4)
46(i4)

Hat eine 2er-Kombi eine dieser Zahlen dann fliegt sie raus und erscheint nicht in der
demoresult.txt
---------------------------------------------------------------------------------------

In der demodaten.txt gibt es i1 i2 i3 i4

i2 und i3 haben wir ja schon behandelt (gezählt)

i1 und i4 nicht

alle Zahlen die auf i1 und i4 stehen - dürfen in keiner - egal welcher Zeile -
der demoresult.txt vorkommen.

Also wenn ich die demodaten.txt öffne sehe ich das auf i1 nur die Zahl 3 steht.
Somit darf es keine 3 in der demoresult.txt geben.

Dito dazu mit den Zahl die auf i4 in der gesamten Datei stehen.
10(i4)
16(i4)
30(i4)
31(i4)
41(i4)
43(i4)
46(i4)

Danke nochmals für deine Hilfe/Zeit

LG
Angelina
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Kombi i2 i3 wie oft vorhanden? 
Autor: Manfred X
Datum: 24.01.13 07:24

Hallo!

Das eben war die Frage. Einzelne Zeile oder gesamte Datei als
Selektionskriterium.

Zunächst eine kleine Hilfsfunktion, um zu testen, ob ein
Wert bereits in einer Collection enthalten ist.
Public Function Contains(col As Collection, vl As Variant) As Boolean
    Contains = False
    Dim index As Integer
    For index = 1 To col.count
       If col(index) = vl Then Contains = True: Exit For
    Next index
End Function
Und so könnte es dann funktionieren ...

(Übrigens wäre alles einfacher zu verstehen und die Hinweise
zielgerichteter, wenn der Sinn dieser Operationen erklärt worden
wäre.)

Dim fc%, i1%, i2%, i3%, i4%
 
fc = FreeFile
 
'1. Ermittlung der Werte in Spalte 1 und Spalte 4
Open "C:\daten\demodaten.txt" For Input As #fc
 
Dim i1_col As New Collection, i4_col As New Collection
While Not EOF(fc)
 
  Input #fc, i1, i2, i3, i4
  If Not Contains(i1_col, i1) Then i1_col.Add i1
  If Not Contains(i4_col, i4) Then i4_col.Add i4
 
Wend
 
Close #fc
 
'2. gefilterte Häufigkeit der Zahlenkombinationen in Spalte 2 / 3
Open "C:\daten\demodaten.txt" For Input As #fc
 
Dim i2_col As New Collection, i3_col As New Collection
Dim freq(10000) As Integer
 
Dim index As Integer, count As Integer, vorhanden As Boolean
While Not EOF(fc)
   Input #fc, i1, i2, i3, i4
   vorhanden = False
   If Not (Contains(i1_col, i2) Or Contains(i1_col, i3) _
      Or Contains(i4_col, i2) Or Contains(i4_col, i3)) Then
 
      vorhanden = False
      For index = 1 To i2_col.count
         If i2_col(index) = i2 And i3_col(index) = i3 Then
            freq(index) = freq(index) + 1: vorhanden = True: Exit For
         End If
      Next index
 
      If Not vorhanden Then
         i2_col.Add (i2): i3_col.Add (i3): freq(i2_col.count) = 1
      End If
   Else
      'Bedingung: gefilterter Datensatz
      '.....
   End If
Wend
 
Close #fc
 
'3. Füllen der Ergebnisdatei: gefilterte Zahlenkombis, Häufigkeiten
Open "C:\daten\demoresult.txt" For Output As #fc
 
For index = 1 To i2_col.count
   Print #1, CStr(i2_col(index)) & " - " & CStr(i3_col(index)) & _
   ": " & CStr(freq(index))
Next index
 
Close #fc
[I]alle Zahlen die auf i1 und i4 stehen - dürfen in keiner - egal welcher Zeile -
der demoresult.txt in i2 oder i3 vorkommen.[/I] - vermute ich jetzt mal ???

Beitrag wurde zuletzt am 24.01.13 um 07:30:54 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Kombi i2 i3 wie oft vorhanden? 
Autor: eierlein
Datum: 24.01.13 16:51

Oder so:

Dim arr1(100) As String, arr2(100) As String
   Dim arr3(100) As String, arr4(100) As String
   Dim p As Long, p1 As Long, p2 As Long, i As Long
   Dim i1$, i2$, i3$, i4$, t$
 
   Open "jbl.txt" For Input As #1
 
   While Not Eof(1)
        i = i + 1
      If UBound(arr1) < i Then
         ReDim Preserve arr1(i + 100)
         ReDim Preserve arr2(i + 100)
         ReDim Preserve arr3(i + 100)
         ReDim Preserve arr4(i + 100)
      End If
 
      Input #1,  i1, i2, i3, i4
      arr1(i) = Trim$(i1) : arr2(i) = Trim$(i2)
      arr3(i) = Trim$(i3) : arr4(i) = Trim$(i4)
   Wend
   Close
 
   For p = 1 To i
      For p1 = 1 To i
         If arr2(p) = arr1(p1) Or arr2(p) = arr4(p1) Or _
               arr3(p) = arr1(p1) Or arr3(p) = arr1(p1) Then
            arr2(p) = ""
            Exit For
         End If
      Next
      If Len(arr2(p)) Then arr2(p) = arr2(p) & " - " & arr3(p)
   Next
 
   Open "result.txt" For Output As #1
   For p = 1 To i-1
      p2 = 0 : t = ""
      If Len(arr2(p)) Then
         p2 = 1 : t = arr2(p)
      End If
 
      For p1 = p + 1 To i
         If p2 = 0 Then Exit For
         If arr2(p) = arr2(p1) Then
            arr2(p1) = "" : p2 = p2 + 1
         End If
      Next
      If p2 > 0 Then Print #1, t; " :"; Str$(p2)
 
   Next
   If Len(arr2(i)) Then Print #1, arr2(i); " : 1"
   Close
0
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Kombi i2 i3 wie oft vorhanden? 
Autor: Manfred X
Datum: 24.01.13 18:03

Hallo!

Bei Nutzung eines Array zum Lesen der Daten, würde ich
auf meinen Vorschlag von oben zurückkommen.

Der Datentyp:
Private Type Line_Input
   i1 As Integer
   i2 As Integer
   i3 As Integer
   i4 As Integer
End Type
Die Leseroutine:
Private Function Readlines(ByVal filename, _
              ByRef filedata() As Line_Input) As Boolean
 
   On Error GoTo fehler
 
   Dim line As String, values() As String
   Dim fc As Integer, index As Integer
 
   Readlines = False
 
   ReDim filedata(100)
   fc = FreeFile
 
   Open filename For Input As #fc
 
   While Not EOF(fc)
      Line Input #fc, line
      values() = Split(line, ",")
      If Not UBound(values) = 3 Then Exit Function
      index = index + 1
 
      If UBound(filedata) = index Then
         ReDim Preserve filedata(index + 100)
      End If
 
      With filedata(index)
        .i1 = CInt(values(0))
        .i2 = CInt(values(1))
        .i3 = CInt(values(2))
        .i4 = CInt(values(3))
      End With
   Wend
 
   Close #fc
   ReDim Preserve filedata(index)
 
   Readlines = True
 
   Exit Function
 
fehler:
   End Function
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Kombi i2 i3 wie oft vorhanden? 
Autor: JBL
Datum: 25.01.13 06:16

hallo Manfred,

ja du hast richtig vermutet - dieser Ablauf stimmt - daumen hoch !!!

War aber bestimmt meine Schuld - schlecht erklärt.

Auch danke an "eierlein" für die Zeit und Mühe die ihr aufgewendet habt.

Ich schaue mir am Wochenende die genauen Ablauf nochmals an und gebe dann
hier Rückmeldung. Habe aber schon 1 x getestet und läuft - perfekt.


Vielen lieben Dank


LG
Angelina
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