Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  AutoCAD VBA
  Vergleich von zwei sequentiellen Dateien

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
  
PNY wird von NVIDIA zum Händler des Jahres gewählt – zum dritten Mal in Folge, eine Pressemitteilung
Autor Thema:  Vergleich von zwei sequentiellen Dateien (1297 mal gelesen)
kiltswitch
Mitglied



Sehen Sie sich das Profil von kiltswitch an!   Senden Sie eine Private Message an kiltswitch  Schreiben Sie einen Gästebucheintrag für kiltswitch

Beiträge: 189
Registriert: 27.10.2004

Windows 98 (Version 4.10.1998)
AutoCAD 2000i

erstellt am: 01. Dez. 2004 09:47    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo alle miteinander,

auch wenn heute noch nicht Donnerstag ist, will ich doch schon eine neue Frage stellen. ;-)

Folgendes:

ich habe zwei sequentielle Dateien anlegen lassen: "Blockauslesung" und "AP-Koordinaten".
Nun will ich den Inhalt dieser beiden Dateien miteinander vergleichen. Treten Übereinstimmungen
auf, dann sollen die in einer neuen sequentiellen Datei abgelegt werden.

Folgenden Code habe ich mir ausgedacht:

Code:

Sub Vergleich()

Dim Text1, Text2, Text3

Open "Blockauslesung" For Input As #1
Open "AP-Koordinaten" For Input As #2
Open "Vergleich" For Output As #3

Do While Not EOF(1) 'Schleife bis Dateiende "Blockauslesung"

    Input #1, Text1 'Daten der Datei "Blockauslesung" in Variable Text1 einlesen

       Do While Not EOF(2)
         Input #2, Text2 'Daten der Datei "AP-Koordinaten" in Variable Text2 einlesen

         If Text1 = Text2 Then
            Text3 = Text1
            Write #3, Text3
            Write #3,
         End If
    
       Loop

Loop

Close #1
Close #2
Close #3

End Sub


Nun habe ich das mal getestet. Ich will, dass die ERSTE Zeile der ersten Datei mit allen Zeilen der
zweiten Datei verglichen wird. Dann soll die ZWEITE Zeile der ersten Datei wieder mit allen Zeilen
der zweiten Datei verglichen, dann die DRITTE mit allen usw. usw....

Das riecht ja verdammt nach Schleifen... :-)

Also habe ich die ineinander verschachtelten Do-Loop-Schleifen gebaut. Aber wenn ich nun die
Prozedur mal im Einzelschrittverfahren durchlaufen lasse, passiert folgendes: er nimmt sich die erste
Zeile der ersten Datei (Blockauslesung) vor und überprüft diese mit allen Zeilen der zweiten Datei.
Wenn er die innere Schleife durchlaufen hat, holt er sich die zweite Zeile der ersten Datei, geht aber
nicht mehr in die innere Schleife rein.

Ich denke mal, weil da steht "Do While Not EOF(2)"? Denn das Ende der zweiten Datei hatte ich ja vorher
bereits erreicht? Wie könnte ich es hinbekommen, dass er wieder die innere Schleife durchläuft?
------
...oder muß ich die Anweisung geben, die Datei wieder von vorn zu durchsuchen? Also den Cursor in die erste Zeile zurücksetzen? Wenn ja, welche Syntax gibt es dafür?

Könnte es was bringen, anstatt einer kopfgesteuerten Schleife, eine
fußgesteuerte Schleife zu nutzen? Dann würde er ja immerhin erstmal in die Schleife gehen?
-----
....das habe ich jetzt ebenfalls getestet, aber so richtig funktionieren tut das auch nicht


Vielleicht kann mir jemand einen Tipp geben. Ich hoffe, ich konnte das Problem und was ich will einigermaßen verständlich machen.

Habe auch gerade noch etwas von der "Loc"-Funktion und "Seek"-Funktion gelesen und die mal getestet. Kam da abr nicht so richtig weiter - könnten die mir bei meinem Problem helfen?

Tobias

[Diese Nachricht wurde von kiltswitch am 01. Dez. 2004 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



Sehen Sie sich das Profil von marc.scherer an!   Senden Sie eine Private Message an marc.scherer  Schreiben Sie einen Gästebucheintrag für marc.scherer

Beiträge: 2494
Registriert: 02.11.2001

erstellt am: 01. Dez. 2004 12:48    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für kiltswitch 10 Unities + Antwort hilfreich

Hi,
also in LISP würde ich beide Files erstmal komplett jeweils in eine Liste auslesen und dann die Vergleichsgeschichten durchführen.
Ob sich das in VBA jedoch so übertragen läßt, weiß ich nicht. Aber wäre ein Ansatz. Könntest Du eventuell Arrays verwenden?

------------------
Ciao,
Marc

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

kiltswitch
Mitglied



Sehen Sie sich das Profil von kiltswitch an!   Senden Sie eine Private Message an kiltswitch  Schreiben Sie einen Gästebucheintrag für kiltswitch

Beiträge: 189
Registriert: 27.10.2004

Windows 98 (Version 4.10.1998)
AutoCAD 2000i

erstellt am: 01. Dez. 2004 12:59    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Mmh, so bin ich an die Sache noch gar nicht rangegangen. Ob das eine mögliche Variante ist, weiß ich noch nicht, ich muß mir dazu zunächst Gedanken machen.

Wenn ich dann alle Daten in einer Datei hätte - wie finde ich denn dann die Übereinstimmungen heraus? Also wie kann ich in der Datei Vergleiche durchführen? Ich müßte ja einen Code schreiben, mit dem ich Zeilen in der Datei ansprechen kann, oder?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

kiltswitch
Mitglied



Sehen Sie sich das Profil von kiltswitch an!   Senden Sie eine Private Message an kiltswitch  Schreiben Sie einen Gästebucheintrag für kiltswitch

Beiträge: 189
Registriert: 27.10.2004

Windows 98 (Version 4.10.1998)
AutoCAD 2000i

erstellt am: 01. Dez. 2004 13:11    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Ich habe es noch nicht rausgefunden, aber kann man einer sequentiellen Datei zuweisen, dass diese wieder von Beginn an durchlaufen wird? D.h., nachdem EOF (End of File) erreicht wurde, soll es wieder von Beginn losgehen. Gibt es einen entsprechenden Befehl oder eine Funktion dafür?

Tobias

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



Sehen Sie sich das Profil von marc.scherer an!   Senden Sie eine Private Message an marc.scherer  Schreiben Sie einen Gästebucheintrag für marc.scherer

Beiträge: 2494
Registriert: 02.11.2001

erstellt am: 01. Dez. 2004 15:23    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für kiltswitch 10 Unities + Antwort hilfreich

Hi,
wer zum Teufel spricht von 'ner neuen Datei???
LIEST Du mal bitte!!!

Ich würde in Lisp zwei Listen erstellen, denen Variablen zuweisen:
Var1 = '(1 2 3 4 5 6)
Var2 = '(2 5 7 9 10)

Und dann deren Werte miteinander vergleichen.
Nix neue Datei, Variablen im Speicher!

------------------
Ciao,
Marc

[Diese Nachricht wurde von marc.scherer am 01. Dez. 2004 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

kiltswitch
Mitglied



Sehen Sie sich das Profil von kiltswitch an!   Senden Sie eine Private Message an kiltswitch  Schreiben Sie einen Gästebucheintrag für kiltswitch

Beiträge: 189
Registriert: 27.10.2004

Windows 98 (Version 4.10.1998)
AutoCAD 2000i

erstellt am: 01. Dez. 2004 16:59    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Mit LISP kenne ich mich noch nicht so aus, deshalb wäre es mir lieber, wenn das in VBA realisiert werden kann. Bloß wie gesagt, ich weiß leider nicht, wie ich dann in einer kompletten Liste die Daten vergleichen kann...? :-(

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Brischke
Ehrenmitglied V.I.P. h.c.
CAD on demand GmbH



Sehen Sie sich das Profil von Brischke an!   Senden Sie eine Private Message an Brischke  Schreiben Sie einen Gästebucheintrag für Brischke

Beiträge: 4191
Registriert: 17.05.2001

ACAD20XX, defun-tools

erstellt am: 01. Dez. 2004 17:18    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für kiltswitch 10 Unities + Antwort hilfreich

Hallo Kiltswitch,

Grundlagen! Mehr sage ich dazu nicht.

In Anlehnung an Marc, denn was Marc dir schreibt, das sind Prinzipien, unabhängig davon mit welcher Programmiersprache du hantierst.

Code:

for each ItemVar1 in var1
  for each ItemVar2 in var2
    Vergleichen, oder was auch immer
next
next

Holger

------------------
Holger Brischke
(defun - Lisp over night!                          Autodesk User Group Central Europe
AutoLISP-Programmierung für AutoCAD              AUGCE Manager Deutschland
Da weiß man, wann man's hat!
                      

[Diese Nachricht wurde von Brischke am 01. Dez. 2004 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

fuchsi
Mitglied
Programmierer c#.net Datawarehouse


Sehen Sie sich das Profil von fuchsi an!   Senden Sie eine Private Message an fuchsi  Schreiben Sie einen Gästebucheintrag für fuchsi

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 02. Dez. 2004 08:44    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für kiltswitch 10 Unities + Antwort hilfreich

ohne jetzt auf die variante einzugehen, die dateien zuerst einzulesen und dann erst zu vergleichen.

du macht folgenden fehler:
die innere schleife läuft bis eof(2). der dateizeiger steht dann natürlich am dateiende und rutscht nicht mehr bach vorne.

du müsstest das folgendermassen umbauen:

open  ......  for input as #2
Do While Not EOF(2)
....
Loop
close #2


d.h immer erst vor dem inneren schleifendurchgang die datei öfnnen, und dann sofort wieder schlissen. damit steht der dateizeiger immer am schleifenanfang am dateianfang.


natürlich wäre die marc und holger angesprochenen version, die datei vorher einzulesen die elegantere, und höchstwarscheinlich auch die schnellere version

------------------
WWW.FFZELL.AT.TC

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

kiltswitch
Mitglied



Sehen Sie sich das Profil von kiltswitch an!   Senden Sie eine Private Message an kiltswitch  Schreiben Sie einen Gästebucheintrag für kiltswitch

Beiträge: 189
Registriert: 27.10.2004

Windows 98 (Version 4.10.1998)
AutoCAD 2000i

erstellt am: 02. Dez. 2004 09:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

@fuchsi:

Ja, diese Lösung habe ich inzwischen rausbekommen, war aber noch nicht dazu gekommen, dass hier zu erwähnen. Bin heute früh nochmal logisch an die Sache rangegangen und da hat es dann geklappt. Nur das optische Resultat in der neuen Datei gefällt mir noch nicht, aber das ist ja noch optimierbar - die Programmierung stimmt jedenfalls jetzt.

Trotzdem Danke für Deine Hilfe.

Aber vielleicht kannst Du mir sagen, wie das mit dem Ansatz von Marc und Holger funktionieren würde, also wie der Code wäre?

------------------
Gruß
Tobias

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

kiltswitch
Mitglied



Sehen Sie sich das Profil von kiltswitch an!   Senden Sie eine Private Message an kiltswitch  Schreiben Sie einen Gästebucheintrag für kiltswitch

Beiträge: 189
Registriert: 27.10.2004

Windows 98 (Version 4.10.1998)
AutoCAD 2000i

erstellt am: 02. Dez. 2004 13:52    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,

ich habe noch ein Problem beim Vergleich meiner zwei sequentiellen Dateien.

Es gibt die übereinstimmenden Daten nicht 100% so aus, wie ich das will. Am besten wäre es, wenn man DATENTRIPEL aus Datei1 und Datei2 vergleichen kann. In Datei1 werden alle Blockreferenzen der Zeichnung mit den X,Y,Z-Koordinaten ihrer InsertionPoints abgelegt. In der Datei2 stehen von mir berechnete X,Y,Z-Koordinaten von bestimmten Anschlußpunkten von Anbauteilen an einem Hauptbauteil. Da diese Anbauteile auch als Blockreferenz in Datei1 vorkommen, liegen in beiden Dateien übereinstimmende X,Y,Z-Koordinaten vor. Nun will ich diese Übereinstimmung herausbekommen und in der Datei3 ablegen.
Kann man in einer sequentiellen Datei mehrere Daten gleichzeitig ansprechen? Und wenn ja, wie?

Also in etwa so: wenn Datentripel X,Y,Z (Koordinatentripel) in Datei1 gleich dem in Datei2 ist, dann schreibe diese in die neue Datei...

Wäre für jeden Tipp dankbar...


------------------
Gruß
Tobias

[Diese Nachricht wurde von kiltswitch am 02. Dez. 2004 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

fuchsi
Mitglied
Programmierer c#.net Datawarehouse


Sehen Sie sich das Profil von fuchsi an!   Senden Sie eine Private Message an fuchsi  Schreiben Sie einen Gästebucheintrag für fuchsi

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 02. Dez. 2004 14:24    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für kiltswitch 10 Unities + Antwort hilfreich

hier nur als kleiner anhalt

    Dim p(0 To 2) As Double

    Dim punkte1 As New Collection
' statt dieser for schleife liest du die erste datei ein und speicherst die x y z werte ind die kollection p(0),p(1),p(2)
ich habe es testweise halt mit 0,0,0  1,1,1  2,2,2 usw. gefüllt   
For i = 0 To 15
        p(0) = i
        p(1) = i
        p(2) = i
        punkte1.Add p
    Next

' jetzt machst du eine schleife, wo du datei 2 zeile füe zeile einliest, und testest mit folgendem code ob die x y z werte in der collection sind
ich habs hier jetzt nur mit 4,4,4 gemacht.

    p(0) = 4
    p(1) = 4
    p(2) = 4
   
    Dim p2(0 To 2) As Double
    For i = 1 To punkte1.Count
   
        If punkte1(i)(0) = p(0) And _
        punkte1(i)(1) = p(1) And _
        punkte1(i)(2) = p(2) Then
       
            MsgBox "gefunden"
            Exit For
        End If
       

    Next
   

ist jetzt nur ein wild zusammengewürfelt, aber so in etwa könnte es ablaufen

------------------
WWW.FFZELL.AT.TC

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

kiltswitch
Mitglied



Sehen Sie sich das Profil von kiltswitch an!   Senden Sie eine Private Message an kiltswitch  Schreiben Sie einen Gästebucheintrag für kiltswitch

Beiträge: 189
Registriert: 27.10.2004

Windows 98 (Version 4.10.1998)
AutoCAD 2000i

erstellt am: 02. Dez. 2004 16:50    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Fuchsi,

danke für den Code. Den werde ich mir mal genauer betrachten und testen. Eine Frage habe ich dazu:

Findet der die Koordinatenpaare auch, obwohl in den beiden Dateien auch noch andere Dinge stehen? Also z.B. Blockname, Block-ID, allgemeiner Text. Müßte ja eigentlich trotzdem gehen, oder?

Ich habe das Ganze mal mit Excel getestet und gerade eben auch hinbekommen. Excel wäre aber nur eine "Notlösung", denn ich will das schon gern mit den sequentiellen Dateien schaffen.

------------------
Gruß
Tobias

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

kiltswitch
Mitglied



Sehen Sie sich das Profil von kiltswitch an!   Senden Sie eine Private Message an kiltswitch  Schreiben Sie einen Gästebucheintrag für kiltswitch

Beiträge: 189
Registriert: 27.10.2004

Windows 98 (Version 4.10.1998)
AutoCAD 2000i

erstellt am: 03. Dez. 2004 09:39    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

@fuchsi:

Hallo,

also ich habe Deinen Code jetzt gerade mal getestet, aber leider kriege ich das nicht hin und verstehe das einfach nicht so richtig.

Ich habe immer noch ein Problem - vielleicht auch ein Denkproblem, mit meinen sequentiellen Dateien. Sie werden ja der Reihe nach eingelesen. Geht es denn überhaupt, in so einer Datei (kann z.B. eine Textdatei sein) MEHRERE Werte gleichzeitig zum Vergleich zu nutzen? Ich müßte die X-Y-Z-Koordinaten (das sind ja DREI Werte !) der einen Datei mit der anderen Datei vergleichen.

------------------
Gruß
Tobias

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

kiltswitch
Mitglied



Sehen Sie sich das Profil von kiltswitch an!   Senden Sie eine Private Message an kiltswitch  Schreiben Sie einen Gästebucheintrag für kiltswitch

Beiträge: 189
Registriert: 27.10.2004

Windows 98 (Version 4.10.1998)
AutoCAD 2000i

erstellt am: 03. Dez. 2004 10:46    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Ich hab mir auch mal noch Gedanken zu Binärdateien gemacht und meinen Code ein bißchen umgeschrieben. Leider bringt er mir beim Ausführen eine Fehlermeldung:

"Laufzeitfehler 458: Variable verwendet einen in Visual Basic nicht unterstützten Typ der Automatisierung"

Ich habe mal meinen Code hierher gesetzt (die Stelle, wo der Fehler kommt, ist markiert). Kann mir jemand sagen, was falsch ist?

Könnte evtl. mit der Variablendeklaration von Txt1, Text2, Text3 zusammenhängen. Wenn ich Double als Datentyp nehme, kommt es zu einem Überlauf, nehme ich Variant kommt die o.g. Fehlermeldung. Wenn ich einfach "Dim Text1" schreibe, kommt auch die Fehlermeldung.

------
NACHTRAG:

Beim Einzelschrittablauf des Programm habe ich festgestellt, dass die innere Schleife beim ERSTEN MAL durchlaufen (und die angesprochene Codezeile akzeptiert) wird. Der Fehler tritt erst beim ZWEITEN Durchlauf auf... Vielleicht ist diese Info von Wichtigkeit.


Code:

Sub Vergleich()

Dim Text1
Dim Text2
Dim Text3


Open "Blockauslesung2.bin" For Binary As #1

Open "Vergleich2.bin" For Binary As #3

Do While Not EOF(1) 'Schleife bis Dateiende "Blockauslesung"
  
   Get #1, , Text1 'Daten der Datei "Blockauslesung" in Variable Text1 einlesen
  
   Open "AP-Koordinaten2.bin" For Binary As #2
  
        Do While Not EOF(2)   'Schleife bis Dateiende "AP-Koordinaten"
          
           Get #2, , Text2 'Daten der Datei "AP-Koordinaten" in Variable Text2 einlesen  --- HIER TRITT DER FEHLER AUF
       
           If Text1 = Text2 Then
              Text3 = Text1
              Put #3, , Text3
              Debug.Print Text3
           End If
       
        Loop

    Close #2

Loop

Close #1

Close #3

End Sub


[Diese Nachricht wurde von kiltswitch am 03. Dez. 2004 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

fuchsi
Mitglied
Programmierer c#.net Datawarehouse


Sehen Sie sich das Profil von fuchsi an!   Senden Sie eine Private Message an fuchsi  Schreiben Sie einen Gästebucheintrag für fuchsi

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 03. Dez. 2004 11:34    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für kiltswitch 10 Unities + Antwort hilfreich

also wie deine daten in deinen dateien gespeichert sind, kann ich natürlich nicth erahnen.
das könnte in einer textdatei z.B.: so aussehen

Block1 1523 1589 0
Block2 4569 21112 0
Block3 4545 1212 0
also blockname x y und z wert einfach mit blank getrennt

oder vielleicht so
"Block1","1523","1589","0"
"Block2","4569","21112","0"
"Block3","4545","1212","0"

solange du uns da keine angaben machst , wie deine Dateien aufgebaut sind , können wir dir nicht weiterhelfen.

lade vielleicht mal die 2 dateien hoch

------------------
WWW.FFZELL.AT.TC

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

kiltswitch
Mitglied



Sehen Sie sich das Profil von kiltswitch an!   Senden Sie eine Private Message an kiltswitch  Schreiben Sie einen Gästebucheintrag für kiltswitch

Beiträge: 189
Registriert: 27.10.2004

Windows 98 (Version 4.10.1998)
AutoCAD 2000i

erstellt am: 03. Dez. 2004 11:49    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


AP-Koordinaten2.txt


Blockauslesung2.txt


Vergleich2.txt

 
Ja ok, das stimmt natürlich, dass man sich das nicht selber denken kann, wenn man die Textdateien nicht hat.

Ich habe sie mal hier hochgeladen (die beiden Ausgangsdateien und die Datei, wie es bei mir z.Zt. im Vergleich ausgegeben wird). Das mit blank wußte ich noch gar nicht. Er erkennt dann aber in der Zeile trotzdem noch die einzelnen Werte, oder faßt er das als einen String auf?

------------------
Gruß
Tobias

[Diese Nachricht wurde von kiltswitch am 03. Dez. 2004 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

fuchsi
Mitglied
Programmierer c#.net Datawarehouse


Sehen Sie sich das Profil von fuchsi an!   Senden Sie eine Private Message an fuchsi  Schreiben Sie einen Gästebucheintrag für fuchsi

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 03. Dez. 2004 13:17    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für kiltswitch 10 Unities + Antwort hilfreich

probiers mal mit diesem code
hier habe ich 6 übereinstimmende Punkte gefunden
(allerdings hat die adtei AP-Koordinaten keinen Z-wert)


Sub test()
    Dim punkte1 As New Collection
    Dim p(0 To 2) As String
    Open "d:\test\Blockauslesung2.txt" For Input As #1
    While Not EOF(1)
        ' jeder Datensatz besteht anscheinen aus 7 Zeilen in der Datei
        Line Input #1, dat ' nicht interresant Blockname ?
        Line Input #1, dat ' nicht interresant referenznummer ?
        Line Input #1, p(0) ' x-wert
        Line Input #1, p(1) ' y-wert
        Line Input #1, dat ' nicht interresant ???
        Line Input #1, dat ' nicht interresant ???
        Line Input #1, dat ' nicht interresant ???
        p(2) = "0"
        punkte1.Add p
    Wend
    Close #1
   
    Open "d:\test\AP-Koordinaten2.txt" For Input As #1
        Line Input #1, dat ' nicht interresant erste Überschrift
    While Not EOF(1)
        Line Input #1, dat ' nicht interresant Text Anschlusspunkt
        Line Input #1, p(0) ' x-wert
        Line Input #1, p(1) ' y-wert
   
        For i = 1 To punkte1.Count
            If punkte1(i)(0) = p(0) And _
            punkte1(i)(1) = p(1) And _
            punkte1(i)(2) = p(2) Then
                MsgBox "gefunden  X:" & p(0) & " Y:" & p(1) & " Z:" & p(2)
                Exit For
            End If
        Next
   
    Wend
    Close #1

End Sub

------------------
WWW.FFZELL.AT.TC

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

kiltswitch
Mitglied



Sehen Sie sich das Profil von kiltswitch an!   Senden Sie eine Private Message an kiltswitch  Schreiben Sie einen Gästebucheintrag für kiltswitch

Beiträge: 189
Registriert: 27.10.2004

Windows 98 (Version 4.10.1998)
AutoCAD 2000i

erstellt am: 03. Dez. 2004 14:42    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo fuchsi,

danke für den Code. Es klappt jetzt alles! 10 Unities habe ich Dir ja schon gegeben. :-)
Und ich kann nur bestätigen, dass diese Lösung viel besser als die mit Excel ist - die Prozedur wird wesentlich schneller abgearbeitet!

------------------
Gruß
Tobias

[Diese Nachricht wurde von kiltswitch am 03. Dez. 2004 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2025 CAD.de | Impressum | Datenschutz