Last active
November 21, 2016 13:43
-
-
Save jeyemwey/528a57efb69574b9126ee1d0669d9c43 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* In jedem VEVENT gibt es eine Zeile "DESCRIPTION", in der der Kurs-Name drin | |
* steht. Ich bin in Kurs DAI 16/1, das bedeutet, dass alle Kurse im Array | |
* bleiben sollen, die den Substring "DAI" haben, aber jene mit "DAI 16/2" | |
* sollen rausfliegen. Das habe ich im Map-Teil mit den Regulären Ausdrücken | |
* versucht zu testen, es funktioniert aber noch nicht ganz, was man bei der | |
* Ausführung des Skriptes merkt. | |
*/ | |
"use strict"; | |
const https = require("https"); | |
const url = "https://www1.hft-leipzig.de/hiscal/pub/hiscalStg.php?stg=dai16"; | |
var req = https.get(url, (res) => { | |
var body; | |
res.on('data', (chunk) => { | |
body += chunk; | |
}).on('end', () => { | |
//Split the Calendar into dates | |
var calendar = body.split("BEGIN:VEVENT"); | |
//Set the headers and shift the list by 1 | |
var newCal = calendar.shift(); | |
//Remove "bad" Items from the calendar Array | |
calendar = calendar.filter((vevent) => { | |
// get a oneliner | |
let asLine = vevent.split('\n').join('\\n'); | |
return /DAI/.test(asLine) && !(/DAI\s?16\/2/.test(asLine)); | |
}).join('BEGIN:VEVENT'); | |
//Join it back together and write it out. | |
newCal += "BEGIN:VEVENT" + calendar; | |
// check if vcalendar is closed | |
if(!/END:VCALENDAR$/gm.test(newCal)) { | |
// close it if not | |
newCal += `\nEND:VCALENDAR`; | |
} | |
console.log(newCal); | |
}) | |
}); | |
req.on('error', (e) => { | |
console.log('ERROR: ' + e.message); | |
}); |
@NonPolynomial: Fehlt da nicht das Invers zum \\n => \n
? Also vevent.split('\\n').join('\n');
? Oder ist das nicht benötigt?
@jeyemwey das wird nur für die Filterung gesplittet, die Funktion in .filter()
gibt nur ein boolschen Wert zurück und ändert nicht die Einträge im Array. deswegen brauch man das nicht nochmal invertieren.
damit das mit der Filterung klappt fehlt noch bei der Filterung die Zuweisung:
// falsch
calendar.filter(handler);
// richtig
calendar = calendar.filter(handler);
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
var newCal = calendar.shift();
speichern.filter()
.*
in deinem RegExpvevent
String ist aber multilineversuch mal das:
(kein Ahnung warum ich erst auf englisch geantwortet hab :D)