param pcName clear if type("pcName") = "U" ? "Datenbankname ben”tigt!" quit endi pcName = upper(pcName) nPos = at(".DBF",pcName) if nPos # 0 pcName = subs(pcName,nPos-1) endi cDatenbank = pcName+".DBF" nDBFHandle = fopen(cDatenbank,0) && RO if nDBFHandle == -1 ? "Fehler fopen dbf" retu endi cBuffer = space(32) if fread(nDBFHandle,@cBuffer,32) # 32 ? "Fehler fread dbf" retu endi ?? "Datenbank: "+cDatenbank ? "Kennzeichen: "+str(asc(subs(cBuffer,1,1))) ? "Lupdate: "+padl(asc(subs(cBuffer,4,1)),2,"0")+"."+; padl(asc(subs(cBuffer,3,1)),2,"0")+"."+; padl(asc(subs(cBuffer,2,1)),2,"0") ? "S„tze: "+str(getdezdword(5)) nHeaderLng = getdezword(9) ? "Datenbeginn: "+str(nHeaderLng) nRecLng = getdezword(11) ? "Satzl„nge: "+str(nRecLng) fclose(nDBFHandle) *############################ * Die Informationen ber die Felder lassen sich bequemer * ber Clipper-Funktionen ermitteln: use (cDatenbank) copy struc extend to temp use temp do whil .not. eof() if row() > maxrow()-2 wait "" clear endi ? field_name + ' ' ?? field_type + ' ' if field_type = "C" nLaenge = field_dec * 256 + field_len ?? str(nLaenge,5) else ?? str(field_len,5) if field_dec # 0 ?? ', '+ ltrim(str(field_dec)) endif endif skip enddo use dele file temp.dbf *############################ quit ************************************************** GETDEZWORD func getdezword param pnPos retu asc(subs(cBuffer,pnPos,1))+asc(subs(cBuffer,pnPos+1,1))*256 ************************************************** GETDEZDWORD func getdezdword param pnPos retu asc(subs(cBuffer,pnPos,1))+; asc(subs(cBuffer,pnPos+1,1))*256+; asc(subs(cBuffer,pnPos+2,1))*256*256+; asc(subs(cBuffer,pnPos+3,1))*256*256*256