首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fast-csv转换似乎正在剥离列

fast-csv转换似乎正在剥离列
EN

Stack Overflow用户
提问于 2019-04-24 21:09:36
回答 1查看 314关注 0票数 1

我正在处理一个项目,该项目在底层解析csv文件并对其进行转换,以便仅使用解析文件中的某些列将某些列映射到新文件。包括输入.csv以供参考。

代码语言:javascript
复制
Co Code,Batch ID,File #,Reg Hours,O/T Hours,Reg Earnings,O/T 
Earnings,Hours 3 Code,Hours 3 Amount,Hours 3 Code,Hours 3 Amount,Hours 4 
Code,Hours 4 Amount,Hours 4 Code,Hours 4 Amount,Earnings 3 Code,Earnings 3 
Amount,Earnings 3 Code,Earnings 3 Amount,Earnings 4 Code,Earnings 4 
Amount,Earnings 4 Code,Earnings 4 Amount,Earnings 5 Code,Earnings 5 
Amount,Earnings 5 Code,Earnings 5 Amount,Temp Dept

83M,1,102,70.00,14.00,,,,,,,,,,,,,,,,,,,,,,,

83M,1,109,92.50,16.50,,,D,5.00,,,,,,,,,,,,,,,,,,,

83M,1,61,70.00,11.50,,,,,,,V,24.00,,,,,,,,,,,,,,,

83M,1,6384,69.00,15.50,,,D,9.50,,,,,,,,,,,,,,,,,,,

83M,1,6568,78.50,29.50,,,D,18.00,,,,,,,,,,,,,,,,,,,

83M,1,6583,84.50,32.50,,,D,10.00,,,,,,,,,,,,,,,,,,,

83M,1,6596,70.50,27.50,,,D,11.50,,,,,,,,,,,,,,,,,,,

83M,1,6627,95.50,23.50,,,D,12.50,,,,,,,,,,,,,,,,,,,

83M,1,6628,83.50,31.50,,,D,12.50,,,,,,,,,,,,,,,,,,,

83M,1,93,45.00,21.50,,,,,,,11,16.00,V,16.00,,,,,,,,,,,,,,,

我发现,当我使用fast-csv提供的transform函数时,有一列特别的'Hours 3 Amount‘映射到'D/T hours’,它甚至在返回转换后的对象(参见对象输出示例和csv输出示例)之前也没有返回任何值(不包括某些值)。

代码语言:javascript
复制
{ 'Co Code': '83M',
  'Batch ID': '1',
  'File #': '93',
  'Reg Hours': '36.50',
  'O/T Hours': '10.00',
  'Reg Earnings': '',
  'O/T Earnings': '',
  'Hours 3 Code': '',
  'Hours 3 Amount': '',
  'Hours 4 Code': 'H',
  'Hours 4 Amount': '8.00',
  'Earnings 3 Code': '',
  'Earnings 3 Amount': '',
  'Earnings 4 Code': '',
  'Earnings 4 Amount': '',
  'Earnings 5 Code': '',
  'Earnings 5 Amount': '',
  'Temp Dept': '' }

Co Code,Batch Id,File #,Reg Hours,O/T Hours,D/T Hours,Reg Earnings,OT 
Earnings,DT Earnigs,Pay Period Start,Pay Period End,Total
83M,1,6596,30.00,,,,,,12/30/18,1/12/19,
83M,1,6628,66.50,19.00,,,,,12/30/18,1/12/19,
83M,1,6650,20.50,18.50,,,,,12/30/18,1/12/19,

有趣的是,我可以输入一个字符串文字作为'D/T小时‘的值,它会出现在输出的.csv文件中。仔细检查后,我发现如果我注释掉转换函数,输出的csv,虽然是原始的未转换形式,但填充了’小时3金额‘的值(见下文)。我还包含了我的代码。

代码语言:javascript
复制
// Process the file by moving the cells and inserting the start and end date
const processFile = (fileName, file) => {
  csv
    .fromPath(basePath + file, {
      ignoreEmpty: false,
      headers: true,
      discardUnmappedColumns: true,
      oobjectMode: true
    })
    .transform(obj => {
      [startDate, endDate] = fileName;

      console.log(obj); // Does not include the Hours 3 Amount property

      if (obj && obj['Co Code'] != '') {
        return {
          'Co Code': obj['Co Code'],
          'Batch Id': obj['Batch ID'],
          'File #': obj['File #'],
          'Reg Hours': obj['Reg Hours'],
          'O/T Hours': obj['O/T Hours'],
          'D/T Hours': obj['Hours 3 Amount'],
          'Reg Earnings': '',
          'OT Earnings': '',
          'DT Earnigs': '',
          'Pay Period Start': startDate,
          'Pay Period End': endDate,
          Total: ''
        };
      }
    })
    .on('error', () => {
      return false;
    })
    .pipe(csv.createWriteStream())
    .pipe(
      fs.createWriteStream('./working-files/Payroll-files/output/out.csv', {
        encoding: 'utf8',
        flags: 'a',
        headers: true
      })
    );
};

有没有人知道为什么转换函数会在返回转换后的对象之前剥离列?

EN

回答 1

Stack Overflow用户

发布于 2019-04-24 21:31:03

不要紧。我确定我的源.csv有一个重复的hours 3 Amount列。如果存在重复的值,transform函数显然不会返回值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55830842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档