如何上传csv文件,然后用Ajax解析其内容?

时间:2018-04-05 15:02:45

标签: php ajax loops csv

我已经有一个PHP脚本来上传CSV文件:它是一个与Twitter帐户(又名品牌)相关的推文集合。顺便说一句,谢谢T.A.G.S:)

我还有一个脚本来解析这个CSV文件:我需要提取表情符号,主题标签,链接,转发,提及以及我需要为每条推文计算的更多详细信息(我的研究项目是:数字情感。我已经存储了280k条推文,里面有170k表情符号。

然后将每条推文及其指标保存在数据库(表格TWEETS),以及表情符号(表格EMOJIS)以及帐户统计数据(表格品牌)中。

我使用的类非常类似于此:CsvImporter> https://gist.github.com/Tazeg/b1db2c634651c574e0f8。我做了一个循环,用1解析每一行。

try {
      mediaPlayer.setDataSource(MainActivity.this, uri);
      mediaPlayer.prepare();
      mediaPlayer.start();
     } catch (IOException e) {
      dialog.dismiss();
}

...

完成所有我的计算后,我$importer = new CsvImporter($uploadfile,true); while($content = $importer->get(1)) { $pack = $content[0]; $data = array(); foreach($pack as $key=>$value) { $data[]= $value; } $id_str = $data[0]; $from_user = $data[1]; ,与"INSERT INTO TWEETS VALUES(...)"相同。之后,我必须做一些其他的操作

  1. 更新每个id_str的覆盖率,如果我保存的推文是对上一条推文的回复)
  2. 将统计信息保存到表格BRAND
  3. 所有这些操作都在一个文件insert.php中编写脚本,并在我提交上传表单时触发。 但如果推文太多,一切都会失败。我的服务器无法处理这么长的操作。

    所以我想知道我是否可以调整部分过程,特别是循环

    1. 上传文件
    2. 解析1个CSV行并将其保存在SQL中并显示“确定”。每次保存推文时都会显示消息
    3. 计算所有其他内容(覆盖面和品牌统计数据)
    4. 我对EMOJIS的了解不够,但我想与beforeSend,success,complete和所有Ajax事件有关。或许我完全错了!?

      有没有人可以帮助我?

2 个答案:

答案 0 :(得分:0)

据我所知,您可以大大减轻服务器上的负担,因为$pack已经是一个值数组,并且不需要执行key value循环。

您还可以更惯用地编写CSV行中的值映射。除非您知道CSV文件可能很大,否则您还应该执行多行

$importer = new CsvImporter($uploadfile, true);
// get as many lines as possible at once...
while ($content = $importer->get()) {
    // this loop works whether you get 1 row or many...
    foreach ($content as $pack) {
        list($id_str, $from_user, ...) = $pack;
        // rest of your line processing and SQL inserts here....
    }
}

您也可以继续这样做,并在单个INSERT语句中将多行插入数据库,大多数SQL数据库都支持该语句。

答案 1 :(得分:0)

$f = fopen($filepath, "r");
    while (($line = fgetcsv($f, 10000, ",")) !== false) {
    array_push($entries, $line);
}
fclose($f);
试试这个,它可能会有所帮助。