| |
|
|
| 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. KompilierenMarkierenSeparierenDef 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 KompilierenMarkierenSeparieren KompilierenMarkierenSeparieren KompilierenMarkierenSeparieren KompilierenMarkierenSeparieren KompilierenMarkierenSeparieren
Auch die Funktion [...] dürfte hier nicht fehlen. |
|
|
| |
|
|
|
| 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
|
|
|
| |
|
|
|
Sebastian König | Hallo iF,
bist Du sicher, dass die Prozedur void_makesuperpath das macht, was Du möchtest?
Ich habe mal getestet: KompilierenMarkierenSeparieren 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 |
|
|
| |
|
|
|
| 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 KompilierenMarkierenSeparierenoder sogar: KompilierenMarkierenSeparierenBis denne, iF |
|
|
| |
|
|
|
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 |
|
|
| |
|
|
|
| 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 |
|
|
| |
|
|
|
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 . |
|
|
| |
|
|
|
| [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 |
|
|
| |
|
|
|
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 |
|
|
| |
|
|