我有.asc文件,它有1000行。行中的每一列都是固定的長度,並由一個空格分開。我想讀取從296位開始並在326位置結束的電子郵件ID列。如何從casc文件的特定位置讀取數據?
有沒有什麼辦法從.asc文件中讀取這樣的數據?
我有.asc文件,它有1000行。行中的每一列都是固定的長度,並由一個空格分開。我想讀取從296位開始並在326位置結束的電子郵件ID列。如何從casc文件的特定位置讀取數據?
有沒有什麼辦法從.asc文件中讀取這樣的數據?
這可能對你有用。我只是閱讀文件中的電子郵件ID,無論它是我的擴展文件,可能是txt或asc。此外,它不事關如果電子郵件地址是在其他地方,而不是定位296或326
public void ExtractAllEmails()
{
string datafrmAsc = File.ReadAllText(YourASCFile); //read File
Regex emailRegex = new Regex(@"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*", RegexOptions.IgnoreCase);
MatchCollection emailMatches = emailRegex.Matches(datafrmAsc);
StringBuilder sb = new StringBuilder();
foreach (Match emailMatch in emailMatches)
{
sb.AppendLine(emailMatch.Value);
}
File.WriteAllText(SomeTxtFile, sb.ToString());
}
謝謝Mohit它爲我工作。 –
對SO表示感謝的另一種方式是通過提出答案。那麼,高興地幫助,你是最受歡迎的。 :) –
假設是大的文本文件,你可以這樣做:
List<string> emailsList = new List<string>();
int startIndex = 295;
int endIndex = 325;
using (FileStream stream = File.Open("c:\\test.asc", FileMode.Open))
using (StreamReader sr = new StreamReader(stream))
{
string line = string.Empty;
while ((line = sr.ReadLine()) != null)
{
emailsList.Add(line.Substring(startIndex, endIndex - startIndex).Trim());
}
}
謝謝尼諾。雖然更早的代碼解決了我的問題。但是你的代碼也是位優化的。我有不同的實現方式,所以也會使用你的代碼。 –
很高興我能幫到你。我的方法更優化一點(它逐行讀取文件,而@Mohit Shrivastava一次加載所有文本),因爲您聲明有成千上萬行。 – Nino
實際上,我已經爲處理定義了批量大小,所以您的代碼符合我的要求。雖然優化意味着不是性能,而是處理方法。 –
什麼是「.asc」文件?它使用什麼編碼?文件中的行是否爲固定寬度(以字節爲單位)?你想讀取一行或所有行嗎? –
如果缺少要解析的文件的示例或說明,是否可以在[[TextFieldParser]](https://msdn.microsoft.com/zh-cn/library/microsoft.visualbasic.fileio.textfieldparser.aspx)中使用[固定寬度模式](https://msdn.microsoft.com/en-us/library/zezabash.aspx)?儘管存在於Microsoft.VisualBasic.FileIO命名空間中,它仍然可以在c#中使用。見例如http://csharphelper.com/blog/2012/05/use-the-textfieldparser-class-to-easily-read-a-file-containing-fixed-width-data-in-c/。 – dbc