在VB6中是否有一個現代.NET相當於TextFieldParser
類?性能比與一個簡單的代碼String.Split()
TextFieldParser在.NET中等效嗎?
回答
我比較性能低了不少:https://gist.github.com/Ruszrok/7861319
我使用的輸入文件,約1 000 000條記錄與空格隔開。我試了五次實驗。
String.Split
平均時間:291毫秒Microsoft.VisualBasic.FileIO.TextFieldParser
平均時間:15843毫秒
可以使用Microsoft.VisualBasic.FileIO.TextFieldParser
類。參考Microsoft.VisualBasic
。要點示例。
然而string.split不會考慮整個CSV規範 - 例如逗號和嵌入字段中的引號不會被搞砸一個string.split方法 - 所以你可以使用拆分方法 - 但只有它你確定你的數據會是什麼樣的 – WantToBeAnonomous
你的'string.Split'測試代碼只讀取一行並用空格分隔,而'TextFieldParser'必須讀取並解析整個文件。當然,這需要幾毫秒的時間。但整個比較是無稽之談。使用正確的工具進行工作。如果你有真正的csv數據(如果字段用引號括起來的話),'TextFieldParser'比簡單的'String.Split'強大得多。 –
這是我的解決方案:
public class TextFieldParser
{
enum FieldType { FixedWidth, Delimited };
public enum CompleteElements
{
/// <summary>
/// Returns as many elements as fileWidths input be
/// </summary>
AllElements,
/// <summary>
/// Only returns elements who have not null values
/// </summary>
OnlyValues
};
int[] m_fieldWidths;
string m_line;
List<string> m_results;
int m_lineWidth;
public CompleteElements m_CompleteElements;
public TextFieldParser(string line)
{
m_line = line;
m_lineWidth = m_line.Length;
m_results = new List<string>();
m_CompleteElements = CompleteElements.OnlyValues;
}
public void SetCompleteElements(CompleteElements value)
{
m_CompleteElements = value;
}
public void SetFieldWidths(params int[] fileWidths)
{
m_fieldWidths = fileWidths;
}
public string[] ReadFields()
{
int pivot = 0;
m_results = new List<string>();
for (int x = 0; x < m_fieldWidths.Length; x++)
{
if(pivot + m_fieldWidths[x] <= m_lineWidth)
{
m_results.Add(m_line.Substring(pivot, m_fieldWidths[x]));
}
else
{
if (m_CompleteElements == CompleteElements.AllElements)
{
m_results.Add(null);
}
break;
}
pivot += m_fieldWidths[x];
}
return m_results.ToArray();
}
}
一個簡單的會話:
string line = "123456789";
TextFieldParser parser = new TextFieldParser(line);
parser.SetFieldWidths(1, 2, 3, 4, 5, 6, 7, 8);
string[] resultOnlyValues = parser.ReadFields();
/*
results:
resultOnlyValues[0] : "1"
resultOnlyValues[1] : "23"
resultOnlyValues[2] : "456"
resultOnlyValues[3] : "7890"
resultOnlyValues[4] : "12345"
resultOnlyValues[5] : "678901"
resultOnlyValues[6] : "2345678"
*/
parser.SetCompleteElements(TextFieldParser.CompleteElements.AllElements);
string[] resultAllElement = parser.ReadFields();
/*
results:
resultAllElement[0] : "1"
resultAllElement[1] : "23"
resultAllElement[2] : "456"
resultAllElement[3] : "7890"
resultAllElement[4] : "12345"
resultAllElement[5] : "678901"
resultAllElement[6] : "2345678"
resultAllElement[7] : null
*/
- 1. Cobertura等效於C#.NET嗎?
- 2. .net Core中的TextFieldParser替換1
- 3. Worklow Foundation(.NET)等效於Python,Java,C++嗎?
- 4. .NET JAXB等效?
- 5. setTimeOut在c中等效嗎?
- 6. ToolStripDropDownButton在WPF中等效嗎?
- 7. .Net XML讀取器在Android中等效嗎?
- 8. 等效於.NET中的NSOperationQueue
- 9. .net中的DLast等效
- 10. .NET 4.0中.NET 4.5的Task.FromResult()的等效
- 11. ShellExecute等效於.NET
- 12. 在Java中等效的String.Format(.NET)?
- 13. 在C#中的等效CFile .net
- 14. TextFieldParser類
- 15. Textfieldparser符
- 16. GCS中的blobstore.create_upload_url等效嗎?
- 17. BASH中的「CLS」等效嗎?
- 18. MonoCecil Type.IsCOMObject等效嗎?
- 19. Adobe AIR在Silverlight中等效嗎?
- 20. 在ActiveRecord中的MySQL查詢等效嗎?
- 21. 在Play Framework中設計等效嗎?
- 22. TransactionScope類在Spring框架中等效嗎?
- 23. C#Listview控件在Android中等效嗎?
- 24. 在Python中等效的Servlet嗎?
- 25. MYSQL group_concat在Sybase ASE中等效嗎?
- 26. 與GetLastInputInfo等效的.NET?
- 27. KeyStorage .Net等效於Java?
- 28. .Net等效於ScaleHeight和Scalewidth
- 29. .net int()等效於PHP
- 30. 等效於.NET的MappedBytesBuffer?
你是什麼意思性能低很多?你有基準嗎? –
我不明白..'TextFieldParser'是.NET庫的一部分 – meda
@David L yeas首先我在這裏搜索了一個基準http://www.dotnetperls.com/textfieldparser,之後我自己測試了一下,結果,要低很多倍。 – ElektroStudios