relativ path

Share your advanced PureBasic knowledge/code with the community.
BackupUser
PureBasic Guru
PureBasic Guru
Posts: 16777133
Joined: Tue Apr 22, 2003 7:42 pm

relativ path

Post by BackupUser »

Code updated for 5.20+

Restored from previous forum. Originally posted by GPI.

Code: Select all

Procedure.s relativ_path(in1$,in2$)
  in1=1
  in2=1
  out$=""
  Repeat
    a1$=StringField(in1$,in1,"\")
    a2$=StringField(in2$,in2,"\")
    If a1$="" And a2$=""
      quit=1
    Else
      If a1$=a2$
        in1+1
        in2+1
      Else
        quit=0
        Repeat
          a1$=StringField(in1$,in1,"\")
          If a1$ <> ""
            out$+"..\"
            in1+1
          Else
            quit=1
          EndIf
        Until quit
        quit=0
        Repeat
          a2$=StringField(in2$,in2,"\")
          If a2$ <> ""
            If Right(a2$,1)=":"
              out$=a2$+"\"
            Else
              out$+a2$+"\"
            EndIf
            in2+1
          Else
            quit=1
          EndIf
        Until quit
      EndIf
    EndIf
  Until quit
  ProcedureReturn out$
EndProcedure

Procedure.s derelativ_path(in1$,in2$)
  out$=""
  If Right(StringField(in2$,1,"\"),1) <> ":"
    an=1:quit=0
    Repeat
      If StringField(in1$,an,"\") <> ""
        an+1
      Else
        quit=1
      EndIf
    Until quit
    quit=0
    Repeat
      If Left(in2$,3)="..\"
        an-1
        in2$=Mid(in2$,4,Len(in2$)-3)
      Else
        quit=1
      EndIf
    Until quit
    For i=1 To an-1
      out$+StringField(in1$,i,"\")+"\"
    Next
  EndIf
  out$+in2$
  ProcedureReturn out$
EndProcedure

in1$="e:\files\delta\omega\delta\epsilon\3\";start
in2$="e:\files\delta\omega\exe\";end

x$=relativ_path(in1$,in2$)
Debug x$
Debug derelativ_path(in1$,x$)
PII 333, 256MB, Asus TNT2Ultra 32MB, AWE Gold 64 4MB