| |
|
|
| Text Datei Vergleich Prozedur - hab ich irgendwann mal gebraucht ^^ Prozedur stellt nur fest ob die Textfiles exakt gleich sind. Es werden keine Unterschiede gefiltert.
{$iq}//xpse
cls
print "is exact gleich?: "+if(fle_compareexact ("org.txt","second.txt"),"Jo","Nö")
waitkey
end
proc fle_compareexact
parameters fle1$,fle2$
declare ex%,s$,ss$
assign #1,fle1$
assign #2,fle2$
reset #1
reset #2
ex%=0
whilenot ex%
input #1,s$
input #2,ss$
if (trim$(s$)<>trim$(ss$))
ex%:=2
elseif ( eof(#1) & eof(#2) )
ex%:=1
elseif eof(#1)
ex%:=2
elseif eof(#2)
ex%:=2
endif
case ( eof(#1) & eof(#2) ) : casenot ex% : ex%:=1
wend
close #1
close #2
return if(equ(ex%,1),1,0)
endproc
|
|
|
| |
|
|
|
Frank Abbing | Hi,
hier meine Variante, mit der beliebige Dateien auf Gleichheit geprüft werden können. Und das sehr schnell.
Dateien auf Gleichheit prüfen
(c) Frank Abbing
Set("ErrorLevel",0)
Declare text$
Def CompareStrings(2) !"KERNEL32","lstrcmpi"
Cls
text$=SameDatas("Dateiname_1","Dateiname_2")
Print "Die beiden Dateien sind "+text$+"."
WaitInput
End
Zwei Dateien vergleichen
SameDatas para1, para2
para1 = Name von Datei 1
Para2 = Name von Datei 2
Proc SameDatas
Parameters gtext1$,gtext2$
Declare gx&,gx1&,gx2&,gbereich1#,gbereich2#
gx1&=FileSize(gtext1$)
gx2&=FileSize(gtext2$)
gx&=gx1&+gx2&
If ((gx&>0) and (gx1&=gx2&))
Dim gbereich1#,gx1&
Assign #1,gtext1$
OpenRW #1
@BlockRead(#1,gbereich1#,0,gx1&)
CloseRW #1
Dim gbereich2#,gx2&
Assign #1,gtext2$
OpenRW #1
@BlockRead(#1,gbereich2#,0,gx2&)
CloseRW #1
gx&=CompareStrings(gbereich1#,gbereich2#)
Dispose gbereich1#
Dispose gbereich2#
If (gx&=0)
Return "gleich"
Else
Return "ungleich"
EndIf
Return "gleich"
Else
Case (gx1&<>gx2&): Return "verschieden groß und damit ungleich"
Return "nicht vorhanden oder fehlerhaft. Zumindest eine davon"
EndIf
EndProc
|
|
|
| |
|
|
|
Rolf Koch | Hi Frank und bei mir funktioniert Dein Beispiel nicht.
CROFANA.TXT und CROFANB.TXT angelegt und gleicher Inhalt. Return ist: nicht vorhanden oder fehlerhaft. Zumindest eine davon
Ist aber alles vorhanden und in Ordnung.
Rolf |
|
|
| |
|
|
|
Frank Abbing | Hi,
dann konnte das Programm eine davon vielleicht nicht laden? Fehlt sicher nur ein FileMode 0. Könntest du das nachprüfen bei dir? |
|
|
| |
|
|
|
Rolf Koch | Hallo Frank, nein beide voll in Ordnung. Vorher frisch angelegt. Also ganz normale Dateien. Nicht schreibgeschützt oder so.
Rolf |
|
|
| |
|
|
|
| Meine Proc hatte einen kleinen logischen Fehler - bei Dateiende wars egal ob die letzten beiden Zeilen übereinstimmten wenn beide Files gleich-viele Zeilen hatten.
Habs behoben.
@Frank: Deine Proc ist weniger geeignet Textdateien zu vergleichen. Textdateien müssen nicht die gleiche Größe haben um gleich zu sein - auch müssen sie nie byteexact-gleich sein. Wie der Name schon sagt - der selbe Text muß drinnstehen - auch wenn an der richtigen Stelle.
Natürlich ist ne while { input Kombination immer ne SpeedKrücke - und natürlich ließe sich die Operation auch als Speicheroperation durchführen. Bisl mempos auf #10 etc.
Salve, iF |
|
|
| |
|
|
|
Frank Abbing | iF, Leerzeichen usw. gehören ebenso zum Text und seiner Formatierung. Egal ob Textdatei oder sonstige, Übereinstimmung heißt bei mir exakte Übereinstimmung. Aber bitte. Rolf, was ist da los. Du bist des Programmierens doch mehr als fähig. Findest du das Problem nicht? Ich kann nichts entdecken... |
|
|
| |
|
|
|
Rolf Koch | Naja, ich bin zu mehr fähig, das mag sein. Jedoch arbeite ich im Einzelhandel und es kurz vor Weihnachten ...... muss ich da noch viel sagen. Ich hab z.Zt. durch den Stress sogar Probleme einen fünfzeiler zu schreiben, ohne das ich mich dauernd verhaue Nee, aber es liegt wirklich nix ungewöhnliches vor. Beide Textdateien ob gleich oder abgeändert melden den Fehler. Beide Textdateien sind gerade frisch erstellt worden. Beide Textdateien sind für den Lese/Schreibzugriff bestens geeignet. Leider wie bereits aus oben genannten Gründen und wegen Noc Update (damit ich endlich wieder an meinen Roc gehen kann - bald kommt ja P9 und da soll Roc auch verbessert sein) komme ich nicht dazu Deinen Code detailgenau durchzugehen. Aber ich schätze, daß Dein Code doch korrekt eingerichtet ist, oder?
Rolf |
|
|
| |
|
|
|
| Frank ich weiß das Leerzeichen zum Text gehören. Ich hab doch auch nie was anderes behauptet - du bist soo gemein. Ich schrieb Textdateien müssen nicht die gleiche Größe haben und auch nicht byte-exact.
Das kann zum Bleistift heißen das eine Textdatei auch dann den gleichen Textinhalt hat wenn diese z.B. mit anderen Steuerzeichen gespeichert ist.
z.B. nur #10 statt #13#10
Aber was erzähl ich Dir - sicher nix Neues.
Das Trim was oben steht ist tatsächlich weniger richtig. Hängt davon ab wofür man die Proc nutzen möchte - möge jeder selbst entscheiden. Da geb ich Dir recht - aber meintest Du das?
Salve, iF |
|
|
| |
|
|
|
Frank Abbing | @iF: Klar, habs ja verstanden . Soll der User doch entscheiden, was das richtige für ihn ist, ne?
@Rolf: Schick mir die beiden Dateien doch einfach mal. Natürlich nur, wenn du willst... Scheint so, als würde FileSize nicht richtig arbeiten...
P.S. Ist Weihnachten nicht das Fest der Ruhe und Entspannung? :biggrin: |
|
|
| |
|
|
|
| [quote:db58989a3e=Frank Abbing]@iF: Klar, habs ja verstanden . Soll der User doch entscheiden, was das richtige für ihn ist, ne? [/quote:db58989a3e]Nain grrrr der Programmierer.
[quote:db58989a3e]@Rolf: Schick mir die beiden Dateien doch einfach mal. Natürlich nur, wenn du willst... Scheint so, als würde FileSize nicht richtig arbeiten...
P.S. Ist Weihnachten nicht das Fest der Ruhe und Entspannung? :biggrin:[/quote:db58989a3e]Ich wüsste nicht das wir hier was anderes tun.
Salve, iF
|
|
|
| |
|
|
|
Jörg Sellmeyer | Hallo, So wie ich daß sehe, bekommt das Programm gar keine Chance ungleiche Dateien zu testen da If ((gx&>0) and (gx1&=gx2&)) ungleiche Dateien schon ausschließt und gleich zur Fehlermeldung verzweigt. Mit Or sollte es funktionieren. Gruß Jörg |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 01.12.2004 ▲ |
|
|
|