Ziehen Sie ZIP-Dateien vom HTTP-LinkIch habe ZIP-Dateien veröffentlicht und möchte sie programmgesteuert abrufen und mit JSL auf meinem PC speichern. Ich weiß im Voraus nicht, wie viele Dateien vorhanden sein werden.
Ist das mit JSL möglich?

Betreff: ZIP-Dateien von HTTP-Link abrufenFreut mich, dass du etwas daraus machen kannst! Ich bin mir ziemlich sicher, dass das Muster in Bezug auf die Geschwindigkeit verbessert werden könnte. Bei Verzeichnissen mit nur ein paar tausend Links macht das wahrscheinlich keinen Unterschied, aber der len(1)-Teil könnte Nicht-Link-Text schneller überspringen. Und ein flexibleres Muster für die Links wäre auch besser.
@bryan_boone @ErnestPasour @paul_vezzetti
Betreff: ZIP-Dateien von HTTP-Link abrufenDanke Craig für die umfassende Antwort. Ich werde Elemente beider Vorschläge übernehmen und zu einer generischen Funktion zusammenführen, die meinen aktuellen und zukünftigen Anforderungen entspricht.
Ich weiß, dass ich einen REGEXP verwenden müsste, um die Links aus der HTTP-Quelle zu finden, aber ich hatte auf eine „<< saveLink“-Funktion für den Zip-Teil gehofft. 

Das wird aber vollkommen gut funktionieren.
Tolle Antwort(en)
Betreff: ZIP-Dateien von HTTP-Link abrufenOder vielleicht ist dies näher an dem, was Sie fragen:
path="https://www.vsp.virginia.gov/downloads/"; // a page with an index of files. Yours may be different format, adjust pattern below.
html = loadtextfile(path); // get the HTML text so we can scrape the links
// somewhat custom pattern for scraping the links, may be specific to this page
urls = {}; // this list will collect the urls
rc = patmatch(html,
patpos(0)+ // make sure the pattern matches from the start
patrepeat( // this is the loop that extracts the urls from the html
(
// the urls look like <A href="https://community.jmp.com/2017%20Virginia%20Firearms%20Dealers%20Procedrures%20Manual.pdf" target="_blank">
// and we want just the part between the quotation marks. Quickly scan forward (patBreak)
// for a < then see if it matches. >>url grabs the text between quotation marks.
(patbreak("<") + "</A><A href="\!""" target="_blank" rel="nofollow noopener noreferrer">> url + pattest(insertinto(urls,url);1))
| // OR
patlen(1) // skip forward one character
)
+
patfence() // fence off the successfully matched text. There is no need to backtrack if something goes wrong.
) +
patrepeat(patnotany("<"),0) + // any trailing bits of html are consumed here
patrpos(0) // make sure the pattern matches to the end
);
if(rc==0, throw("pattern did not match everything"));
show(nitems(urls),urls[6]); // pick item 6. You'll have a different strategy.
fullpath = path||regex(urls[6],"%20"," ",GLOBALREPLACE);// minimal effort to fix up the url, might need more work
pdfblob = loadtextfile(fullpath,blob); // download item 6, it is a pdf when this was written...
savetextfile("$temp/example.pdf",pdfblob); // save it somewhere</A>Betreff: ZIP-Dateien von HTTP-Link abrufen
zip-Datei von @wilkap Präsentation
za=open("https://community.jmp.com/kvoqx44227/attachments/kvoqx44227/virtual-jug/12/1/VJUG%20July%202015.zip","zip");
zipfiles=za<
mehrere Dinge zu beachten
- Die Datei wird in Ihr temporäres Verzeichnis heruntergeladen. Die Option „zip“ zum Öffnen gibt ein Zip-Archivobjekt zurück
- Mit <
- Sie können das Blob-Format mit ZIP-Archiv zum Lesen von Binärdaten wie JMP-Tabellen verwenden
- Die dritte Zeile verwendet ein zweites Argument, um open mitzuteilen, dass es sich bei dem Blob um eine JMP-Datentabelle handelt
- Das Löschen der Variable za ist erforderlich, wenn Sie das gesamte Skript erneut ausführen. Das Zip-Archivobjekt verhindert, dass die Datei im temporären Verzeichnis wiederverwendet wird.
- Sie könnten Loadtextfile/Savetextfile mit Blobs verwenden, um die ZIP-Datei an einen Speicherort Ihrer Wahl herunterzuladen (und sie anschließend zu löschen) und dann das ZIP-Archiv zum Verarbeiten dieser Datei verwenden.
- Ich habe bereits nachgeschaut, dass das vierte Element im Archivverzeichnis eine JMP-Datentabelle war