Ti faccio un esempio pratico... per provarlo personalizza la parte in rosso

codice:
<HTML>
<HEAD>
<TITLE> Prova lettura file .csv </TITLE>
<META NAME="Author" CONTENT="br1 - 2006">
<SCRIPT LANGUAGE="JavaScript">
<!--

var xmlHttpTesto="";
function csv2table(fil) {
  var xmlHttpObj = null;
  var tabella = ""
  xmlHttpObj=createXMLHttp();
  xmlHttpObj.open('get',fil,false); 
  xmlHttpObj.onreadystatechange = function() {
    if (xmlHttpObj.readyState == 4) {
      if (xmlHttpObj.status==200 || xmlHttpObj.status==304) {
        xmlHttpTesto = xmlHttpObj.responseText;
        righe = xmlHttpTesto.split("\n");
        tabella += "<table border=1>";
        for (var i=0;i<righe.length;i++) {
          if (righe[i]) {
            tabella += "<tr>";
            colonne = righe[i].split(";");
            for (var j=0;j<colonne.length;j++) {
              tabella += "<td>"+colonne[j]+"</td>";
            }
            tabella += "</tr>";
          }
        }
        tabella += "</table>";
      }
    }      
  }      
  xmlHttpObj.send(null); 
  delete xmlHttpObj;
  return tabella;
}

function createXMLHttp() {
  var xmlhttp ;
  try {
    xmlhttp = new XMLHttpRequest(); 
    // Gecko (Firefox, Moz), KHTML (Konqueror, Safari), Opera, Internet Explorer 7
  } catch (e) {
    var MSXML_XMLHTTP_PROGIDS = new Array(
      'MSXML2.XMLHTTP.5.0',  
      'MSXML2.XMLHTTP.4.0',
      'MSXML2.XMLHTTP.3.0',
      'MSXML2.XMLHTTP',    // Internet Explorer 6
      'Microsoft.XMLHTTP'   // Internet Explorer 4,5
    );
    var success = false;
    for (var i=0;i < MSXML_XMLHTTP_PROGIDS.length && !success; i++) {
      try {
        xmlhttp = new   ActiveXObject(MSXML_XMLHTTP_PROGIDS[i]);
        success = true;
      } catch (e) {}
    }
    if ( !success ) {
      alert('Cant create XMLHttpRequest - not supported');
    }
  }
  return xmlhttp;
}

</script>

</HEAD>

<BODY>
Tabella creata ed inserita tramite lettura di un file .csv
<script>document.write(csv2table("prova.csv"));</script>
</BODY>
</HTML>
ciao