每次運行我的代碼并將它們寫入日志時,我都必須始終如一地生成事務 ID 串列。它看起來像這樣:
String path = @"C:\MyFolder\MyFile.csv";
for (int i = 1; i < 10; i )
{
int transactionId = i;
string TransactionID = transactionId.ToString();
string date1 = DateTime.Today.ToString("yyyyMMdd");
string time1 = DateTime.Now.ToString();
string appendText = TransactionID ";" date1 ";" time1;
Environment.NewLine;
File.AppendAllText(path, appendText);
}
每次運行它都會寫入 10 行,編號為 1 到 10,但我每次都需要始終如一地更新事務 ID。所以我今天運行這個代碼行編號為 1 - 10,我明天運行這個代碼行應該編號為 11-20。我怎樣才能有一個隨每次運行而遞增的通用變數?
非常感謝您提前!
uj5u.com熱心網友回復:
在程式啟動時,從 CSV 檔案的最后一行讀取最后一個事務 ID。如果沒有資料存在,您知道應該從 1 或 0 開始計數
uj5u.com熱心網友回復:
核心問題是您需要知道最后寫入的事務 ID 是什么,為此您需要讀取您正在寫入的檔案并決議最后寫入的 ID,如果不存在(或沒有決議)默認從 0(或 1)開始,如下所示:
// Default to 0
var transactionId = 0;
var path = @"C:\MyFolder\MyFile.csv";
// Note ReadLines **not** ReadAllLines
var file = File.ReadLines(path);
var lastWrite = file.Last();
// Try and read the first part of the last line, if it fails just use the default
if (int.TryParse(lastWrite.Split(';')[0], out var lastWrittenId))
transactionId = lastWrittenId;
var sb = new StringBuilder();
var toWrite = new List<string>();
for (int i = 0; i < 10; i )
{
var currentId = transactionId i;
var date1 = DateTime.Today.ToString("yyyyMMdd");
// ...
// Without this check there'd be an empty line at the start of the file
if (currentId != 0)
sb.Append(Environment.NewLine);
var logText = $"{currentId};{date1};{...}";
sb.Append(logText);
toWrite.Add(sb.ToString());
sb.Clear();
}
File.AppendAllLines
僅供參考:您(據我所知)目前在寫作時沒有添加新行。我還建議你在前面加上了新的生產線,這意味著最后一行應始終包含最后寫入的條目,這使得決議最后寫入輸入更容易和更快*
*更快,因為我們不必呼叫Reverse()提供的IEnumerable,我們希望避免這種情況,因為Reverse() 將源捕獲到一個陣列中,因此會將整個檔案流式傳輸到我們的記憶體中,同時使用Last()“簡單”迭代整個事物并回傳最后一項,意味著我們沒有在記憶體中緩沖整個檔案
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/356226.html
下一篇:字串中精確點的Grep變數
