SetToLoki Posted August 11, 2009 Share Posted August 11, 2009 I'm attempting to connect to a cal dav server and import the info into my own calendar on the web, I have created the protocol to connect to the caldav server and collected the ical file. now I juat need to do the simple task of grabbing all the data between vcalendar start and v calendar end. What would be the best way to do this? I am guessing preg_match_all. but not sure, any help would be great cheers Quote Link to comment https://forums.phpfreaks.com/topic/169811-solved-get-text-between-two-instances/ Share on other sites More sharing options...
.josh Posted August 11, 2009 Share Posted August 11, 2009 example of file/content? Quote Link to comment https://forums.phpfreaks.com/topic/169811-solved-get-text-between-two-instances/#findComment-895832 Share on other sites More sharing options...
SetToLoki Posted August 11, 2009 Author Share Posted August 11, 2009 example of file/content? hmm not got one at this pc is a standard ical file vcalendar: start somedescription: some value somedescription: some value somedescription: some value vcalendar: end vcalendar:start somedescription: some value somedescription: some value somedescription: some value vcalendar: end the file contains an undefined number of these entries the idea is to get each one between start and end and save them to an array. Quote Link to comment https://forums.phpfreaks.com/topic/169811-solved-get-text-between-two-instances/#findComment-895863 Share on other sites More sharing options...
Psycho Posted August 11, 2009 Share Posted August 11, 2009 I would use file() to read the file into an array with each line a different element of the array. You can then iterate through the array and pick out different pieces of data as needed. You would have the start and end lines as elements, but you could use those when processing the array to differentiate between different records. Quote Link to comment https://forums.phpfreaks.com/topic/169811-solved-get-text-between-two-instances/#findComment-895868 Share on other sites More sharing options...
SetToLoki Posted August 11, 2009 Author Share Posted August 11, 2009 I I would use file() to read the file into an array with each line a different element of the array. You can then iterate through the array and pick out different pieces of data as needed. You would have the start and end lines as elements, but you could use those when processing the array to differentiate between different records. I've pulled the file uising webdav and opened it with an xml request so the content is stored as a variable in my class, can file() be used to read the content of a variable? Quote Link to comment https://forums.phpfreaks.com/topic/169811-solved-get-text-between-two-instances/#findComment-895876 Share on other sites More sharing options...
Psycho Posted August 11, 2009 Share Posted August 11, 2009 ...I have created the protocol to connect to the caldav server and collected the ical file. now I juat need to do the simple task of grabbing all the data between vcalendar start and v calendar end. How foolish of me to assume you were talking about a file. Well, then, you could do the same thing as file() by exploding the value on the new line character. I still think processing the file line-by-line appears to be the most efficient. But, not knowing exactly how you are going to use the data, there might be a better method. Quote Link to comment https://forums.phpfreaks.com/topic/169811-solved-get-text-between-two-instances/#findComment-895884 Share on other sites More sharing options...
.josh Posted August 11, 2009 Share Posted August 11, 2009 file cannot read the content of a variable. If you already have the file contents in a variable, you can follow mjdamato's route by using explode with "\n" as the delimiter. Then loop, etc.. if you want to go the regex route, you can take your variable that has the content and do this: preg_match_all('~vcalendar: start(.*?)vcalendar: end~is',$content,$matches); $matches[1] will be an array of each set of lines between the start and end. I don't know what your overall goal here is, but from there, you can do something like this: foreach($matches[1] as $k => $match) { $descriptions[$k] = array_filter(explode("\n",$match)); } This will give you a multi-dim array that would look like this: Array ( [0] => Array ( [1] => somedescription: some value [2] => somedescription: some value [3] => somedescription: some value ) [1] => Array ( [1] => somedescription: some value [2] => somedescription: some value [3] => somedescription: some value ) ) Quote Link to comment https://forums.phpfreaks.com/topic/169811-solved-get-text-between-two-instances/#findComment-895891 Share on other sites More sharing options...
SetToLoki Posted August 11, 2009 Author Share Posted August 11, 2009 ...I have created the protocol to connect to the caldav server and collected the ical file. now I juat need to do the simple task of grabbing all the data between vcalendar start and v calendar end. How foolish of me to assume you were talking about a file. Well, then, you could do the same thing as file() by exploding the value on the new line character. I still think processing the file line-by-line appears to be the most efficient. But, not knowing exactly how you are going to use the data, there might be a better method. is kind of an awkward project buut I am converting the ical data to mysql database, was hoping to grab each set of content into an array between vcal start/end there can be upwards of 900 of these per calendar for over 100 people so time consuming then each line in each array has different info for the database I can then generate my web based calendar using the mysql data which is much more efficient than ical (damn apple solutions ) so a rough diagram would be array[0] { vca: start <-- begin grab data here description: value <-- insert this value into databse description: value <-- insert this value into databse description: value <-- insert this value into databse description: value <-- insert this value into databse vcal: end <-- end grab data } array[1] { vca: start <-- begin grab data here description: value <-- insert this value into databse description: value <-- insert this value into databse description: value <-- insert this value into databse description: value <-- insert this value into databse vcal: end <-- end grab data } and so on as I say there may be 900 or so of these entries they do not always follow the same format ie descrition: value may differ as it only creates that line if the value is used in the calendar it is pulled from ie one may have reminder : 15 minutes where a calendar that doesn't have a reminder set will just not include the line rather than set its value to null. this will be in a script that runs often as it will sync the calendar it is pulling the info from to the calendar on the website. so it has to run efficiently which is why I picked to come here and seek advice as my way of doing it would probably not be the most efficient Quote Link to comment https://forums.phpfreaks.com/topic/169811-solved-get-text-between-two-instances/#findComment-895897 Share on other sites More sharing options...
SetToLoki Posted August 11, 2009 Author Share Posted August 11, 2009 file cannot read the content of a variable. If you already have the file contents in a variable, you can follow mjdamato's route by using explode with "\n" as the delimiter. Then loop, etc.. if you want to go the regex route, you can take your variable that has the content and do this: preg_match_all('~vcalendar: start(.*?)vcalendar: end~is',$content,$matches); $matches[1] will be an array of each set of lines between the start and end. I don't know what your overall goal here is, but from there, you can do something like this: foreach($matches[1] as $k => $match) { $descriptions[$k] = array_filter(explode("\n",$match)); } This will give you a multi-dim array that would look like this: Array ( [0] => Array ( [1] => somedescription: some value [2] => somedescription: some value [3] => somedescription: some value ) [1] => Array ( [1] => somedescription: some value [2] => somedescription: some value [3] => somedescription: some value ) ) seems exactly what I need, thankyou Quote Link to comment https://forums.phpfreaks.com/topic/169811-solved-get-text-between-two-instances/#findComment-895900 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.