如何为csv字符串的确切连续元素设置序列?

时间:2016-08-29 06:07:08

标签: javascript c#

我有string csv包含PORTCODE和纬度经度的位置。我使用这些值在google map上绘制标记。

例如csv string:

ANC|61.2181:149.9003,   
ANC|61.2181:149.9003,
TLK|62.3209:150.1066,
DNL|63.1148:151.1926,
DNL|63.1148:151.1926,
DNL|63.1148:151.1926,
TLK|62.3209:150.1066,
TLK|62.3209:150.1066,
ALE|60.9543:149.1599

我想自动编号用管道符号“|”分隔的SIMILAR PORTCODE序列PORTCODE是连续的下一个元素。

需要输出:

ANC|61.2181:149.9003:1|2,
TLK|62.3209:150.1066:3,
DNL|63.1148:151.1926:4|5|6,
TLK|62.3209:150.1066:7|8,
ALE|60.9543:149.1599:9

使用jquery/javascript/c#的任何解决方案?

3 个答案:

答案 0 :(得分:3)

这可能是一种更简洁/更短的方式,但这是使用JavaScript想到的第一种第二种方式:

var input = "ANC|61.2181:149.9003,\nANC|61.2181:149.9003,\nTLK|62.3209:150.1066,\nDNL|63.1148:151.1926,\nDNL|63.1148:151.1926,\nDNL|63.1148:151.1926,\nTLK|62.3209:150.1066,\nTLK|62.3209:150.1066,\nALE|60.9543:149.1599";

var output = input.split(",\n").reduce(function(p,c,i,a) {
  if (i === 1) p += ":1";
  return p + (c === a[i-1] ? "|" : ",\n" + c + ":") + (i+1);
});

console.log(output);

我假设每一行都以一个\n字符结尾,但显然您可以调整\r或其他任何内容。

进一步阅读:

答案 1 :(得分:0)

你可以做出类似的东西。



 var csv = 'ANC|61.2181:149.9003,\nANC|61.2181:149.9003,\nTLK|62.3209:150.1066,\nDNL|63.1148:151.1926,\nDNL|63.1148:151.1926,\nDNL|63.1148:151.1926,\nTLK|62.3209:150.1066,\nTLK|62.3209:150.1066,\nALE|60.9543:149.1599'.split(',\n');

//count entry :

var results = [];
var j = -1;
var previous = "";
for (i = 0; i < csv.length; i++) {
  if (previous === csv[i]) {
    results [j] += '|' + (i+1);
  } else {
    j += 1;
    previous = csv[i];
    results [j] = csv[i] + ':' + (i+1);
  }
}

//And reforme your csv
console.log(results.join(',\n'));
&#13;
&#13;
&#13;

进一步阅读:

答案 2 :(得分:0)

这是C#的方法,

public string[] data = { "ANC|61.2181:149.9003", "ANC|61.2181:149.9003", "TLK|62.3209:150.1066", "DNL|63.1148:151.1926", "DNL|63.1148:151.1926", "TLK|62.3209:150.1066", "TLK|62.3209:150.1066", "ALE|60.9543:149.1599", "DNL|63.1148:151.1926" };

int counter = 0;
var output = data.Select(x => new Tuple<string, int>(x, counter++))
           .GroupBy(x => x.Item1)
           .Select(h => h.Key + ":"+ string.Join("|", h.Select(x => x.Item2)));

输出为ANC|61.2181:149.9003:0|1,TLK|62.3209:150.1066:2|5|6,DNL|63.1148:151.1926:3|4|8,ALE|60.9543:149.1599:7