我正在生成35个名称为ar15220110910, khwm20110910
的字符串,依此类推。
该字符串包含ID (ar152,KHWM)
的名称和日期(20110910)
。我想从字符串中提取Id, date
并将其存储在名为StatSummary
的文本文件中。
我的代码声明是这样的
for( int 1= 0;i< filestoextract.count;1++)
{
// The filestoextract contains 35 strings
string extractname = filestoextract(i).ToString();
statSummary.writeline( extractname.substring(0,5) + "" +
extractname.substring(5,4) + "" + extractname.substring(9,2) + "" +
extractname.substring(11,2));
}
当工作站的Id包含5个字母时,此代码正确执行,但当工作站ID为KHWM
或任何其他4个字母名称时,插入全部搞砸了。我在循环中运行它。所以我尽量保持代码尽可能动态。任何人都可以帮我找到一种没有硬编码的方法。例如访问最后8个元素来获取日期???我已经搜索过,但无法找到办法。
答案 0 :(得分:3)
对于最后8位数字,它只是:
extractname.Substring(extractname.Length-8)
哦,我很抱歉,因为您的代码可能是:
int l = extractname.Length;
statSummary.WriteLine(extractname.substring(0,l-8) + "" +
extractname.Substring(l-8,4) + "" + extractname.Substring(l-4,2) + "" +
extractname.Substring(l-2,2));
答案 1 :(得分:2)
由于您的ID长度不一致,提取日期(总是8个字符)可能是更好的选择,然后将余数视为您的ID,例如。
更新 - 通过基于格式实际计算日期的长度来更加健壮。还要对格式进行验证,以确保正确解析数据。
var dateFormat = "yyyyMMdd"; // this could be pulled from app.config or some other config source
foreach (var file in filestoextract)
{
var dateStr = file.Substring(file.Length-dateFormat.Length);
if (ValidateDate(dateStr, dateFormat))
{
var id = file.Substring(0, file.Length - (dateFormat.Length+1));
// do something with data
}
else
{
// handle invalid filename
}
}
public bool ValidateDate(stirng date, string date_format)
{
try
{
DateTime.ParseExact(date, date_format, DateTimeFormatInfo.InvariantInfo);
}
catch
{
return false;
}
return true;
}
答案 2 :(得分:1)
您可以使用正则表达式:
match = Regex.Match ("khwm20110910","(?<code>.*)(?<date>.{6})" );
Console.WriteLine (match.Groups["code"] );
Console.WriteLine (match.Groups["date"] );
要解释正则表达式模式(?<code>.*)(?<date>.{6})
,括号组会为每个模式创建一个组。 ?<code>
为该群组命名,以便您轻松引用该群组。
date
组获取字符串的最后六个字符。 .
表示接受任何字符,{6}
表示这样做六次。
code
组获取所有剩余的字符。 *
表示尽可能多地使用字符。
答案 3 :(得分:1)
for each(string part in stringList)
{
int length = part.Length;
int start = length - 8;
string dateString = part.Substring(start, 8);
}
那应该解决变量长度来获取日期。拉的其余部分很可能取决于模式(建议)或字符串的长度(当x然后调用长度为4时等)
答案 4 :(得分:0)
如果您的ID不总是相同数量的字母,您应该使用','或其他东西分隔ID和日期,然后使用它:
for( int 1= 0;i< filestoextract.count;1++)
{
string extractname = filestoextract[i].ToString();
string ID = extractname.substring(0, extractname.IndexOf(','));
string Date = extractname.substring(extractname.IndexOf(','));
Console.WriteLine(ID + Date);
}