Parsing specific data out of a CSV file
Hi, I'm trying to write a little Javascript that would parse a CSV file that contains a name and date, and only display the name if the date matches today. Here's some example data:
Name, Date
Joe, 6/10/2010
Jane, 7/11/2010
If today were 6/10/2010, the output of the script would just be "Joe"
Can anybody help? Thanks!
Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title></title>
<script type="text/javascript">
function readCSV(){
// http://www.tizag.com/ajaxTutorial/
var ajaxRequest;
try {
// Opera 8.0+, Firefox, Safari
ajaxRequest = new XMLHttpRequest();
}
catch (e){
// Internet Explorer Browsers
try {
ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
try {
ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e){
// Something went wrong
alert("Your browser broke!");
return false;
}
}
}
// Create a function that will receive data sent from the server
ajaxRequest.onreadystatechange = function(){
if(ajaxRequest.readyState == 4) {
var temp = ajaxRequest.responseText.split('\n');
for(var i=1; i<temp.length; i++) {
if(temp[i].indexOf(document.form1.date.value)!=-1) {
var bday = temp[i].split(',');
alert(bday[0]);
}
}
}
}
ajaxRequest.open("GET", "data.csv", true); // csv file
ajaxRequest.send(null);
}
</script>
<style type="text/css">
* {margin:0;padding:0;}
</style>
</head>
<body>
<form name="form1">
<input type="text" name="date" value="6/10/2010">
<button type="button" onclick="readCSV();">get name</button>
</form>
</body>
</html>
At least 98% of internet users' DNA is identical to that of chimpanzees
one more question
Appreciate your help, but I have one more issue. I've got an external data file in this format
Name,Date \n
George,6/15/2010 \n
George,6/15/2010 \n
George,6/15/2010 \n
George,6/15/2010 \n
Smith,6/11/2010 \n
And here's the code
Code:
<html>
<head>
<title>CSV & Date parser</title>
<script type="text/javascript">
// From: http://codingforums.com/showthread.php?t=198171
function checkCSVdate() {
// ckDate = document.getElementById('dinfo').value;
var currentTime = new Date()
var month = currentTime.getMonth() + 1
var day = currentTime.getDate()
var year = currentTime.getFullYear()
ckDate = (month + "/" + day + "/" + year);
var str = '';
fso = new ActiveXObject("Scripting.FileSystemObject");
fin = fso.OpenTextFile("names2.csv", 1, false, 0);
var line = fin.ReadAll();
var tmp = line.split('\n');
for (var i=0; i<tmp.length; i++) {
temp = tmp[i].split(',');
if (ckDate == temp[1]) { str += tmp[i]; }
}
if (str == '') { document.getElementById('mtchDiv').innerHTML = 'No matches found'; }
else { document.getElementById('mtchDiv').innerHTML = str; }
}
onload = function() {
checkCSVdate();
}
</script>
</head>
<body>
<div id="mtchDiv"></div>
</body>
</html>
Since the data file has a line with 6/15/2010, it should return a name, right? It returns "No Matches Found".
Remove white space
Code:
if (ckDate == temp[1].replace(/\s/g,'')) {str += tmp[i]; }
At least 98% of internet users' DNA is identical to that of chimpanzees
didn't work
Appreciate your help, but that didn't seem to work. Any other ideas?
It works using the Ajax loaded I gave. Your script only works in older IE browsers which I don't have access to at the moment.
Code:
function readCSV(){
// http://www.tizag.com/ajaxTutorial/
var currentTime = new Date()
var month = currentTime.getMonth() + 1
var day = currentTime.getDate()
var year = currentTime.getFullYear()
ckDate = (month + "/" + day + "/" + year);
var str = '';
var ajaxRequest;
try {
// Opera 8.0+, Firefox, Safari
ajaxRequest = new XMLHttpRequest();
}
catch (e){
// Internet Explorer Browsers
try {
ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
try {
ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e){
// Something went wrong
alert("Your browser broke!");
return false;
}
}
}
// Create a function that will receive data sent from the server
ajaxRequest.onreadystatechange = function(){
if(ajaxRequest.readyState == 4) {
var tmp = ajaxRequest.responseText.split('\n');
for (var i=0; i<tmp.length; i++) {
temp = tmp[i].split(',');
if (ckDate == temp[1].replace(/\s/g,'')) {str += tmp[i]; }
}
if (str == '') { document.getElementById('mtchDiv').innerHTML = 'No matches found'; }
else { document.getElementById('mtchDiv').innerHTML = str; }
}
}
ajaxRequest.open("GET", "names2.csv", true); // csv file
ajaxRequest.send(null);
}
Last edited by Fang; 06-15-2010 at 03:01 PM .
At least 98% of internet users' DNA is identical to that of chimpanzees
The modified ajax script doesn't seem to work either on my server. Any ideas? Does it work on your machine?
Yes. Have you cleared the cache and updated the csv file to include to-days date?
If it still does not work for you then upload the csv file to the forum.
At least 98% of internet users' DNA is identical to that of chimpanzees
Thread Information
Users Browsing this Thread
There are currently 1 users browsing this thread. (0 members and 1 guests)
Posting Permissions
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
Forum Rules
Bookmarks