Deutsch
Quelltexte/ Codesnippets

Dateipfade Stringmanipulation

 
Wegen dem Schreiben eines eigenen Installers habe ich so manch Datei/Pfade Stringmanipulationsfunktionen geschrieben.

Einige davon poste ich hier, aber zuerst ein paar DEFs von einem Herrn Jörg Sellmeyer, welche ich im Profan-Forum fand.
KompilierenMarkierenSeparieren
Def CharCount(2) Int(Sub(Len(@$(1)),Len(translate$(@$(1),@$(2),""))))
Def VerzeichnisTiefe(1) Int(Sub(Len(@$(1)),Len(Translate$(@$(1),"\",""))))
Def PfadTeil(2) SubStr$(@$(1),@%(2),"\")Vorher sollte man die Verzeichnistiefe ermitteln
Def DateiName(1) SubStr$(@$(1),Add(VerzeichnisTiefe(@$(1)),1),"\")
Def DateiPfad(1) Translate$(@$(1),Add$("\",DateiName(@$(1))),"")
Def Home(0) Translate$(Upper$(Par$(0)),Upper$(FindFirst$(Par$(0))),"")



Hier einige Procs aus meinem mittlerweile doch älterem Installer:

Diese Funktion erstellt beispielsweise ein Verzeichnis c:estest2est3 auch dann, wenn es noch garkein Verzeichnis c:est oder c:estest2 gibt. Der Funktion kann sozusagen hemmungslos ein zu erstellendes Verzeichnis übergeben werden, und selbst der Ort dorthin wird erstellt.
KompilierenMarkierenSeparieren
Proc void_CreatePath

    Parameters s$
    declare lw$

    while len (S$)

        Let lw$=add$(lw$,Mid$(s$,1,add(1,len(substr$(S$,1,"")))) )
        let s$=del$(s$,1,add(1,len(substr$(S$,1,""))))

        if (lw$<>"")

            MKDIR lw$

        endif

    wend

Endproc




Hier noch ein paar undokumentierte:
KompilierenMarkierenSeparieren
KompilierenMarkierenSeparieren
proc CutFileName

    parameters s$

    while not(equ$("",Mid$(S$,len(S$),1))

        Let s$=Del$( S$,len(S$),1 )

    wend

    return s$

Endproc


KompilierenMarkierenSeparieren
proc CutExtension

    parameters s$

    while not(equ$(".",Mid$(S$,len(S$),1))

        Let s$=Del$( S$,len(S$),1 )

    wend

    return s$

Endproc


KompilierenMarkierenSeparieren
KompilierenMarkierenSeparieren
KompilierenMarkierenSeparieren
KompilierenMarkierenSeparieren

Auch die Funktion [...]  dürfte hier nicht fehlen.
 
15.04.2004  
 



Hier noch eine kleine Zugabe, um die Dateiendung auszutauschen.

KompilierenMarkierenSeparieren
 {$i}//file-extension-renamer by iF :-D
print changefileext("somefile.gif","ps")
waitinput
end

proc changefileext

    parameters f$,e$
    declare tmp$,i&,ii&

    if len(f$)

        ifnot instr(".",f$)

            f$:=f$+"."+e$

        else

            repeat

                i&+
                tmp$:=substr$(f$,i&,".")

            until not(len(tmp$))

            sub i&,2
            for ii&:=1 to i& do tmp$:=tmp$+substr$(f$,ii&,".")+"."
            f$:=tmp$+e$

        endif

    endif

    return f$

endproc

 
21.07.2004  
 




Sebastian
König
Hallo iF,

bist Du sicher, dass die Prozedur void_makesuperpath das macht, was Du möchtest?

Ich habe mal getestet:
KompilierenMarkierenSeparieren
proc void_makesuperpath

    parameters s$
    declare i%
    i%=0

    while lt(i%,len(s$))

        add i%,1

        if equ$(mid$(s$,i%,1),"")

            s$=ins$("",s$,i%)
            add i%,1

        endif

    wend

    return s$

endproc

cls
print void_makesuperpath("c:	est	esthallo")
waitkey

Das Ergebnis ist doch bestimmt nicht so gewünscht...

Du musst beachten, dass die Doppel-Backslashes nur in Stringliteralen gültig sind, nicht aber in Variablen. Kurz: Ein Doppel-Backslash, den Du in den Code eintippst, ist tatsächlich ein einfacher Backslash.

Beispiel:

c:estesthallo ist tatsächlich: c:[TAB]est[TAB]esthallo und
c:\test\test\hallo ist tatsächlich c:estesthallo

Oder habe ich die Prozedur falsch verstanden?

MfG

Sebastian
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
21.07.2004  
 



Ja, hast Du falsch verstanden. Die Prozedur ist nicht dafür da um Eingabefehler via Escapesequenzen auszubessern. Ich habe mich auch in der Beschreibung schlecht ausgedrückt.

Die Prozedur soll tatsächlich einfach nur aus einem zwei machen.
Um mehr ging es dabei nicht, weil ich andere Funktionen hatte die nicht nach einem sondern nach zwei suchten.

Ich habe aber die Proc aus dem Programm genommen, um eventuellen Mißverständnissen aus dem Wege zu gehen.

Bei Pfadangaben via XPSE gibt es das was Du ansprichst via
KompilierenMarkierenSeparieren
//xpse-source
s$="c:	est
oraanchor":file
oder sogar:
KompilierenMarkierenSeparieren
 {$iq}//simply demo to demonstrate xpses "Filestring"-directive
case "	est
oe":file<>"	est
oe":print "it works :)"
case "	est
oe":file=="	est
oe":file:print "it works again:)"
print "filename: C:
q	":file
print "escaped : C:
q	"
waitkey
Bis denne, iF
 
21.07.2004  
 




Sebastian
König
Hallo iF,

ok .

[quote:871ef2f47c]Bei Pfadangaben via XPSE gibt es das was Du ansprichst via //xpse-source
s$=c:est
oraanchor:file [/quote:871ef2f47c]
Ja, kenne ich. Ich finde es ehrlich gesagt aber wirklich einfacher, den Doppel-Backslash oder Franks Variante (einfacher Slash) zu benutzen.

Komisch, dass das Thema so oft auftaucht...

MfG

Sebastian
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
21.07.2004  
 



Nun, das das Thema so oft auftaucht wundert mich eigendlich recht wenig.
Wer in Hochsprachen Proggt ist halt geübt auch mit solch Gegebenheiten wie Escapesequenzen umzugehen, Profan-Progger sind jedoch zumeist Programmier-Einsteiger, für die das Thema oft eine Falle darstellt.

Ich persönlich bin sogar der Meinung, das die Escapesequenzen in Profan nix zu suchen haben. Eher würde ich verstehen wenn ein #0, #13#10 etc. möglich wäre. Ich habe vor dies mit XPSE umzusetzen.

[quote:94aea63370=Sebastian König]Hallo iF,

Ich finde es ehrlich gesagt aber wirklich einfacher, den Doppel-Backslash oder Franks Variante (einfacher Slash) zu benutzen.[/quote:94aea63370]
Nun, darum geht es nicht. Es geht eher daraum das man einfach vergißt. Und zwar das man soebend einen Pfad eingegeben hat. Wenn man sich also angewöhnt ein :file anzusetzen, trägt dies einfach dazu bei, das man es vielleicht weniger außer acht läst. Weil man erinnert sich vielleicht an das SYMBOL :file. Sich an Slash oda Doppelslash erinnern ist aus psychologischer Sicht schwieriger, weil es kein SYMBOL darstellt. Und bei Anfängern kommt das halt eher -- wie man ja sieht -- zum tragen.

Einfaches Gedankenspiel: Würe es in Profan nicht möglich sein, Strings einfach per anzugeben, sondern wäre da eine Funktion für normale Strings namens string(gogol), und für Dateien ein file(c wäre das Problem nie entstanden, weil jeder spätestens nach dem 1. Fehlschlag sich erinnert das er file() zu nutzen hat. Ein Indizienbeweiß dafür kann sein, das sich noch nie jemand beschwert hat das man mit string b#,0= keine LONGS in den Bereich packen kann. Es ist halt schlüssig.

Bis denne, iF
 
21.07.2004  
 




Sebastian
König
Hallo iF,

man kann sicher sehr lange darüber diskutieren ...

Es stimmt, als Erinnerung, ist Dein :file wirklich ganz praktisch.

string() und file() fände ich persönlich viel zu umständlich. Besser würde ich es finden, wenn XProfan wie andere Sprachen bei nicht erkannten Escape-Sequenzen (wie h in Deinem c:estesthallo) meckern würde. Dann lernt man auch recht schnell, dass die Backslashes nunmal eine Sonderrolle haben.

Aber was solls - so hat man wenigstens was zum Reden...

MfG

Sebastian

P.S.: Statt #0, #13#10 würde ich natürlich ooo (Oktal) und xhhh (Hexadezimal) favorisieren .
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
21.07.2004  
 



[quote:64eb88146a=Sebastian König]Hallo iF,
P.S.: Statt #0, #13#10 würde ich natürlich ooo (Oktal) und xhhh (Hexadezimal) favorisieren .[/quote:64eb88146a]
Jaja, stimmt schon.

Ich hab aber schon angemerkt, das ich ESC-Seqs in Profan nicht für richtig halte. Das kommt mir so ein wenig vor wie :stream in Basic. Mir geht es also nicht darum eventuell

s$=Hx41LLO schreiben zu können, sondern s$=H+#65+LLO+#13#10

Yup, iF
 
21.07.2004  
 




Sebastian
König
Hallo iF,

[quote:905bcf7e0d]Mir geht es also nicht darum eventuell

s$=Hx41LLO schreiben zu können, sondern s$=H+#65+LLO+#13#10 [/quote:905bcf7e0d]
ok, das wäre eine gute Abkürzung für @chr$()!

MfG

Sebastian
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
21.07.2004  
 



Zum Quelltext


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

6.006 Betrachtungen

Unbenanntvor 0 min.
Sven Bader24.09.2021
Björn Haupt20.05.2021
Georg06.04.2020
Andre Rohland19.02.2018
Mehr...

Themeninformationen

Dieses Thema hat 2 Teilnehmer:

unbekannt (5x)
Sebastian König (4x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie