【问题标题】:CSV file content, replace by using RegExCSV 文件内容,使用 RegEx 替换
【发布时间】:2017-07-13 11:51:28
【问题描述】:

我有一个 CSV 文件,其中包含如下一行:

"Jakins, Ann-Margaret",Ms.,Ann-Margaret, ,Jakins,Ms. Ann-Margaret Jakins,""Callawera"Property""Callawera"Property""allawera",Thallon,4497,Australia,Queensland

有没有办法在两个引号之间删除字段"Callawera Property Callawera Property allawer" 的引号?是否有正则表达式来选择两个引号值之间的内容,所以结果是这样的:

"Jakins, Ann-Margaret",Ms.,Ann-Margaret, ,Jakins,Ms. Ann-Margaret Jakins,"Callawera Property Callawera Property allawera",Thallon,4497,Australia,Queensland

【问题讨论】:

  • 嗨....我会先尝试并发布您的代码,然后说什么不起作用!
  • 我使用了 cfcsv 标签,这个标签只读取 10 条记录,但 csv 文件有 100 条记录。
  • ,""Callawera"Property""Callawera"Property""allawera",
  • 以上内容替换为,"Callawera"Property Callawera Property allawera",

标签: csv coldfusion coldfusion-9 cfml lucee


【解决方案1】:

如果您已经组装了整个文件,您将无法修复两个引号之间的引号。任何正则表达式(甚至人类)都无法一致且可靠地确定 CSV 中每个字段的预期边界在哪里。

虽然您可以使用 RegEx 提取一些适用于有限数据集的技巧,但没有什么可以普遍适用于所有可能的数据集。

因此,您必须在组装文件时执行此操作。 在每个字段中,将任何 "(双引号)替换为 ""(两个双引号)并确保整个字段都用双引号括起来。

【讨论】:

    【解决方案2】:

    CSV 是一种有点不标准的格式。 Excel 可以读取带有双引号和回车的文件,但经常无法正确导出。 ColdFusion 也是如此……除非您使用 opencsv,这是一个用于 Java 的 CSV(逗号分隔值)解析器库。

    如果您没有使用过 java,opencsv 的集成可能会有点复杂。我在这里写了一个演示脚本: https://gist.github.com/JamoCA/6062864

    注意:如果您使用 Windows,CSVed 是一个功能强大的 CSV 文件编辑器,它可以操作任何 CSV 文件,可以用任何分隔符分隔。

    <!---
    Convert CSV file to a ColdFusion query object using opencsv.
        Requirements:
        - ColdFusion 8+  ( http://en.wikipedia.org/wiki/Adobe_ColdFusion )
        - opencsv - free parser library for Java ( http://opencsv.sourceforge.net/ ) 
            http://opencsv.sourceforge.net/     
            opencsv supports all the basic csv-type things you're likely to want to do:
            - Arbitrary numbers of values per line
            - Ignoring commas in quoted elements
            - Handling quoted entries with embedded carriage returns (ie entries that span multiple lines)
            - Configurable separator and quote characters (or use sensible defaults)
            - Read all the entries at once, or use an Iterator style model
            - Creating csv files from String[] (ie. automatic escaping of embedded quote chars)
    
    NOTE: To use opencsv in ColdFusion:
        - copy "opencsv-2.3.jar" to "ColdFusion Class Path" (in CFAdmin > Server Settings > Java and JVM)
        - Specifying custom Java library path in the Application.cfc without dynamic loading
          http://help.adobe.com/en_US/ColdFusion/10.0/Developing/WSe61e35da8d318518-106e125d1353e804331-7ffe.html
        - Use JavaLoader http://javaloader.riaforge.org/
    --->
    
    <!--- Configure CSV file & delimiter --->
    <cfset CSVFile = "c:\sampleCSVFile.csv">
    <cfset Delimiter = ",">
    
    <!--- Read file using opencsv --->
    <cfscript>
    fileReader = createobject("java","java.io.FileReader");
    fileReader.init(CSVFile);
    csvReader = createObject("java","au.com.bytecode.opencsv.CSVReader");
    csvReader.init(fileReader, Delimiter);
    ArrData = csvReader.readAll();
    csvReader.close();
    fileReader.close();
    </cfscript>
    
    <!--- Determine if any records exist --->
    <cfif not arraylen(ArrData)>
         <p>No data in file.</p>
         <cfexit>
    <cfelseif arraylen(ArrData) lt 1>
         <p>No records.</p>
         <cfexit>
    </cfif>
    
    <!--- Convert 2 dimensional array of rows & columns to a ColdFusion query --->
    <cfscript>
    GetResults = QueryNew(ArrayToList(ArrData[1]));
    Rows = arraylen(ArrData);
    Fields = arraylen(ArrData[1]);
    for(thisRow=2; thisRow lte Rows; thisRow = thisRow + 1){
        queryaddrow(GetResults);
        for(thisField=1; thisField lte Fields; thisField = thisField + 1){
            QuerySetCell(GetResults, ArrData[1][thisfield], ArrData[thisRow][thisfield]);
        }
    }
    </cfscript>
    
    <cfsetting enablecfoutputonly="No">
    <cfdump var="#GetResults#">
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-14
      • 1970-01-01
      • 1970-01-01
      • 2011-12-21
      • 2012-01-25
      • 1970-01-01
      • 2020-02-28
      • 1970-01-01
      相关资源
      最近更新 更多