【clisp】實現讀取CSV檔案
csv檔案:
1、每行資料集各元素以逗號間隔
2、若單元素中有逗號,則整個元素以雙引號括起來為一個單元素
3、若雙引號元素中又有雙引號,則需要轉義雙引號為 \"
以clisp為例實現 csv 檔案讀取,實現如下:
read-csv-file: 可以直接讀取一個csv檔案,並以列表形式返回資料。
split-csv-line: 可以處理單行資料集,並返回列表形式資料集;所有元素都預設為string
;;;; WHJ.20180827 read csv file
;;;; WHJ.20180831 完善
(defpackage :WHJ.CSV
(:use :cl :charset :cl-ppcre)
(:export
:split-csv-line
:read-csv-file))
(in-package :WHJ.CSV)
(defun next-f1 (str str-len idx)
(let ((s (search "," str :start2 idx)))
(if s s str-len)))
(defun next-end (str slen idx)
(unless (< idx slen) (return-from next-end slen))
(if (char= (char str idx) #\");以"開頭
(unless
(do* ((i (1+ idx))
(ch (char str i) (char str i))
(nextch (if (< (1+ i) slen) (char str (1+ i)) nil) (if (< (1+ i) slen) (char str (1+ i)) nil)))
((null nextch))
;(format t "i=~a ch=~a nch=~a~%" i ch nextch)
(if (and (char= ch #\") (char= nextch ch))
(incf i 2)
(if (char= ch #\")
(return-from next-end (next-f1 str slen i))
(incf i))))
slen)
(let ((ch (char str idx)));可能為多個空的值,例str = ",,,,"
(if (char= ch #\,)
idx
(next-f1 str slen (1+ idx))))))
(defun split-csv-line (str)
(let ((len (length str)))
(append
(loop for s = 0 then (1+ e)
for e = (next-end str len 0) then (next-end str len s)
while (< s len)
collect (let ((sublen (- e s))
(substr (subseq str s e)))
(if (and (plusp sublen) (char= (char substr 0) #\"))
(setf substr (subseq substr 1 (1- sublen))))
(regex-replace-all "\"\"" substr "\"")))
(if (char= (char str (1- len)) #\,) (list "") nil))))
(defun read-csv-file (file &optional (charset charset:gbk))
(mapcar #'split-csv-line
(with-open-file (in file :external-format charset)
(loop for x = (read-line in nil)
while x
collect x))))
相關推薦
【clisp】實現讀取CSV檔案
csv檔案: 1、每行資料集各元素以逗號間隔 2、若單元素中有逗號,則整個元素以雙引號括起來為一個單元素 3、若雙引號元素中又有雙引號,則需要轉義雙引號為 \" 以clisp為例實現 csv
【120】TensorFlow 從CSV檔案中讀取資料並訓練線性迴歸模型(面向新手)
正文開始。 學習 TensorFlow 讓我的思維發生了變化。 計算機本質上是一種數學的工具,而我在學習程式設計的時候,思維也不可避免地收到了影響。傳統的程式設計思想,常常認為程式就應該像數學定理或者數學函式一樣,給出一個確定的結果。這是一種基於邏輯推導
【UE4學習】15_UE4讀取CSV檔案並使用
2017.2.23補: 環境:win10 64bitUE 4.15 —————————————————————————————— 1.建立表格匯出csv格式的檔案(漢字記得uft-8格式);建立與表格
【java】 一個讀取配置檔案的類
/** * <p>Title:InitConfig.java</p> * <p>Description:</p> * @author songrongkai * @date 2018年7月29日 * @version 1.0 */ p
【C++】讀寫CSV檔案
新建CSV檔案:建txt——另存(UTF-8)——字尾.csv CSVparser.hpp #ifndef _CSVPARSER_HPP_ # define _CSVPARSER_HPP_ # include <stdexcept>
【Python】實現網站備份檔案掃描+原始碼分析
一開始我用的requests庫的get方法 但是這種方法會自動下載檔案,所以不可取 後來發現urllib2的庫相對來說不錯 原始碼如下# coding = utf-8 import urllib2 i
【SpringBoot】——SpringBoot 讀取配置檔案方式
// 方式一: 將配置檔案封裝為一個bean @Autowired private ConfigProps configProps; // 方式二: 通過 Spring 提供的類獲取配置檔案 @Autowired private Environment environmen
Rpackage【readr】R讀取帶分隔符的csv檔案
一、R將所有資料讀取為一個變數 二、安裝readr包 install.packages("readr") library(readr) 三、讀取資料 read.delim 讀取帶分隔符的行 read_csv2(file, col_names = TRUE,
【轉】Linux下配置檔案讀取操作流程及其C程式碼實現
轉自:http://blog.csdn.net/zhouzhaoxiong1227/article/details/45563263#comments 一、概述 Linux具有免費、可靠、安全、穩定、多平臺等特點,因此深受廣大程式設計師的歡迎。 為了體現軟體產品的靈活性,可新增配置檔案存放某些重要的
【Python筆記】操作讀取Excel檔案、文字檔案
需求:讀取Excel檔案、替換文字檔案中得指定某個字串並生成新的檔案 原始碼: #encoding:utf-8 # -*- coding: utf-8 -*- #!/usr/bin/env python # -*- coding=utf-8 -*- #Using GPL v2 #Author:
【springmvc】通過POI下載檔案的實現過程
通過POI下載檔案的實現過程 整體程式碼實現思路 前臺程式碼 後臺程式碼 整體程式碼實現思路 首先在jsp頁面中,設定一個匯出功能按鈕,在匯出功能函式中,通過window.location.href的方式開啟一個新的頁面;
【C++】C++讀取特定路徑下所有檔案//*(資料夾下的所有圖片、文件等)
內容:主要有兩種,一是藉助相關結構體,二是針對檔名排練有序。 一、藉助結構體 1.引用標頭檔案 #include <io.h> #include < fstream> #include < string> 2.適用範圍 沒有限制。
【Makefile】實現多個bin檔案格式化拼接成一個檔案
FILE_GRP = a1.bin a2.bin b.bin ccc.bin FILE_BAS = a_bas.bin FILE_GET_LEN = 256 FILE_ALL_TARGET = a_all.bin 輸出: ======= (0) a_all.b
【Python 2.7】xlrd讀取Excel檔案
這篇博文參考於《Python 資料處理》讀取Excel檔案需要用到xlrd模組,模組下載地址:xlrd下載地址下面我們使用xlrd模組提取Excel檔案中的童工和童婚比例:""" 這是用來分析童工和童婚
【Jmeter】解決從csv引數檔案中獲取帶引號/逗號的資料問題【轉】
原文:【jmeter隨筆(3)-從csv中獲取帶引號的資料詳情】 點選檢視原文 作者:黑夜小怪 軟體測試技術交流群 : 429183023 最近在工作中,對jmeter實踐的點滴的記錄這裡分享,不一定正確,僅供參考和討論,有想法的歡迎留言、談論。 1技巧
【Python】Python讀取資料夾下的所有檔案
os.listdir(path)是得到在path路徑下所以檔案的名稱列表。 open(path)是開啟某個檔案。 iter是python的迭代器。 所以讀取某資料夾下的所
tensorflow:簡單的讀取CSV檔案,並實現分批操作
import numpy as np from tensorflow.contrib.learn.python.learn.datasets import base filename = "SiteBUDP_test_label.csv" test = base.loa
【JAVA】apache poi excel 檔案讀取,各種資料型別,不規則excel格式都可以讀取
本文將通過例項來介紹apache poi 讀取excel的原理,包括各種資料型別的處理,本文提供的程式碼非常通用,即使不規則的excel檔案,也可以讀取。 直接看程式碼吧 package poi.excel; import java.io.File; import j
【JDBC】實現JDBC實現銀行的轉賬事務
str package b- exceptio hide use play key rgs JDBC中的事務是默認提交的,也就是說每執行一次PreparedStatement,那麽數據就會被寫入到磁盤。如果需要關閉默認提交,使用 void setAutoCommit(fa
對js操作html的實踐【1】——實現網頁假崩潰吸引網友註意力
code 自己 頁面 註意力 size mat pre fun hidden 前些天逛網站的時候,發現了一些好玩的細節:當網頁失去焦點後標題顯示網頁崩潰,這將使得瀏覽者重新點回網頁。 來自ANOTHERHOME(https://www.anotherhome.net/)與晨