2012-10-04 152 views
1

我试图将每行中的日期格式从逗号改为连字符。分隔月日的日期和年份的逗号索引是不同的。C#用逗号替换两个特定逗号的字符串

lines_in_List[i] = lines_in_List[i].Insert(0, cnt + ","); // Insert Draw # in 1st column 

    string one_line = lines_in_List[i]; 
    // 0,5,1,2012,1,10,19,16,6,36,,, 
    // 1,11,5,2012,49,35,23,37,38,28,,, 
    // 2,12,10,2012,8,52,53,54,47,15,,, 
    // ^-^--^ replace the ',' with a '-'. 

    StringBuilder changed = new StringBuilder(one_line); 
    changed[3] = '-'; 
    changed[5] = '-'; 
    changed[3] = '-'; 
    lines_in_List[i] = changed.ToString(); 
} 
+0

*逗号分隔的日期和年份的日期和年份变化* ...根据** w帽子**? –

+0

@EricJ。无论月/日是一位还是两位 – Servy

+3

COnsider分割(',')并从分析的字段构建日期。 – kenny

回答

3

您可以使用IndexOf的重载,该重载采用初始偏移量开始搜索。

http://msdn.microsoft.com/en-us/library/5xkyx09y.aspx

int idxFirstComma = line.IndexOf(','); 
int idxSecondComma = line.IndexOf(',', idxFirstComma+1); 
int idxThirdComma = line.IndexOf(',', idxSecondComma+1); 

使用这些指标做你的替代品。

为了有效地替换这些字符(不产生大量的临时字符串实例),检查了这一点:

http://www.dotnetperls.com/change-characters-string

片断代码将字符串转换为字符数组,做了更换,并创建一个新的串。

+0

我只是在写...你打我吧 – CaffGeek

+0

不错!不知道这个过载。 –

1

你也可以这样做:

string modifiedLine = Regex.Replace(line, @"(^\d+,\d+),(\d+),(\d+)", @"$1-$2-$3") 

如果你需要在该行的开头修剪空间,用这个来代替:如果你想中检索

string modifiedLine = Regex.Replace(line, @"^[ \t]*(\d+,\d+),(\d+),(\d+)", @"$1-$2-$3") 

最后,只是格式化的日期,使用这个:

string justTheDate = Regex.Replace(line, @"^[ \t]*\d+,(\d+),(\d+),(\d+).*", @"$1-$2-$3") 
+0

RegEx往往比直接字符串操作要慢。如果日志文件很大,这可能会有很大的不同。 –

+0

@EricJ。 - 那是真实的。阅读这个问题的人需要适当地选择一种明智的方式来做到这一点。如果它的时间和速度敏感,那么你的答案可能是最好的。我只是提供一种替代方法来实现它:) – Icemanind

+0

当然。正则表达式当然有其自己的位置,可能适用于OP。 –