【问题标题】:Local separator for CSV files generation in Typescript (or Javascript)在 Typescript(或 Javascript)中生成 CSV 文件的本地分隔符
【发布时间】:2016-06-18 23:39:19
【问题描述】:

我正在寻找“正确”的方法来确定用户文化中的列表分隔符。 现在我正在使用这个代码:

private static SetSeparator() {
    var list = ['a', 'b'];
    var s = list.toLocaleString();
    var sep = s[1];
    CSVGenerator.Delimiter = sep;
}

它有效,但似乎有点 hacky。我想知道是否有记录的方法可以在 Typescript(或 JavaScript)中获取本地列表分隔符。

我需要这些信息才能在客户端正确生成 CSV 文件。 谢谢

【问题讨论】:

  • 数组中的 toLocaleString() 将用于解析日期对象或数字。据我所知,默认的“,”分隔符永远不会改变,除非我误解了你的问题。
  • 其实“,”不是默认的,它取决于用户当前的语言/国家设置。如果您使用法语设置(例如),您的默认分隔符将是“;”。
  • 有趣,我不知道。好吧,您的解决方案确实看起来很“hacky”,但我想用 list.unshift('a') 添加一个填充字符,然后使用第二个字符索引作为分隔符,当您获得的数组具有不同的第一个位置元素时,它会保持一致长度。
  • 我唯一的问题是我不确定世界上所有国家/地区都只使用 1 个字符进行分隔。这就是为什么我要求某种“记录”的方式来找到这个(这些)字符
  • 用最新的 chrome 用法语试过,我得到 ',' 这是不正确的。知道为什么吗?

标签: javascript excel typescript


【解决方案1】:

我认为您在答案中的解决方案可能会尽可能好。这是一个关于类似问题的问题/答案(查找当前语言环境的小数分隔符) - 接受的答案与您问题中的解决方案非常相似:https://stackoverflow.com/a/1308446/1063392

如果您担心包含超过 1 个字符的分隔符(尽管我认为这是一个合理的假设),您可以让您的函数选择测试数组中两个字符之间的所有内容,而不是盲目地获取字符在[1]:

function SetSeparator() {
  //var list = ['a', 'b'];
  //var s = list.toLocaleString();
  
  // let's pretend the current separator is ||
  var s = 'a||b';
  
  var reg = /a(.*)b/;
  var sep = reg.exec(s)[1]
  document.writeln('The separator of the current locale is: "' + sep + '"');
}

SetSeparator();

另一个(可能更好)选项可能是删除toLocaleString() 返回值的第一个和最后一个字符 - 这将避免ab 是分隔符的一部分的边缘情况:

function SetSeparator() {
  //var list = ['a', 'b'];
  //var s = list.toLocaleString();
  
  // let's pretend the current separator is ab
  var s = 'aabb';

  var sep = s.substr(1, s.length - 2);
  document.writeln('The separator of the current locale is: "' + sep + '"');
}

SetSeparator();

【讨论】:

    猜你喜欢
    • 2022-12-05
    • 2010-09-07
    • 2015-08-09
    • 2013-09-14
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多