Hallo zusammen,
ich sehe aktuell den Wald vor Bäumen nicht und erhoffe mir einen Denkanstoß von euch.
In einem Ordner auf der HDD habe ich haufenweise Log-Dateien welche folgenderweise benannt sind:
25062017_0.txt, 25062017_1.txt, usw. (Tag, Monat, Jahr, _, Stunde)
Diese Namensliste importiere ich in ein DataTable:
#region Init Table
var _dtFiles = new DataTable();
_dtFiles.TableName = "Files";
var files = new DataColumn { ColumnName = "Value", DataType = typeof(Int32) };
_dtFiles.Columns.Add(files);
_dtFiles.PrimaryKey = new[] { files };
#endregion
var objDialog = new FolderBrowserDialog
{
Description = @"Folder",
SelectedPath = @"D:\Temp"
};
var objResult = objDialog.ShowDialog(this);
if (objResult != DialogResult.OK)
{
return;
}
_dtFiles.Clear();
var folder = objDialog.SelectedPath;
var dinfo = new DirectoryInfo(folder);
var finfo = dinfo.GetFiles("*.txt");
foreach (var file in finfo)
{
var row = _dtFiles.NewRow();
var hour = file.Name.Substring(9, 2).Replace(".", "");
if (hour.Length < 2)
{
hour = string.Concat("0", hour);
}
row[0] = Convert.ToInt32(string.Concat(file.Name.Substring(4, 4), file.Name.Substring(2, 2), file.Name.Substring(0, 2), hour));
_dtFiles.Rows.Add(row);
}
const string sortExpression = "Value";
_dtFiles.DefaultView.Sort = sortExpression;
dgvFiles.DataSource = _dtFiles;
Diese wird auch ordentlich dargestellt. Also den 26.06.2017 vor dem 27.06.2017 usw.
Jetzt möchte ich diese DataTable zeilenweise durchlaufen und je den Inhalt der gefundenen Datei in ein weiteres DataTable einlesen:
foreach (DataRow dr in _dtFiles.Rows)
{
var date = string.Concat(dr[0].ToString().Substring(6, 2), dr[0].ToString().Substring(4, 2), dr[0].ToString().Substring(0, 4));
var hour = Convert.ToInt32(dr[0].ToString().Replace(date, ""));
var file = Path.Combine(teFolder.Text, string.Concat(date, "_", hour, ".txt"));
if (File.Exists(file))
{
using (var sr = new StreamReader(file, Encoding.Default))
{
while (!sr.EndOfStream)
{
var line = sr.ReadLine();
if (!line.Contains(@"TP"))
{
line = line.Replace(@"\r\n", Environment.NewLine);
}
var row = _dtLines.NewRow();
row[0] = line;
_dtLines.Rows.Add(line.Replace("Multicast:", "").Replace("xxxxxxxxxxxx", ""));
}
}
}
dgvLines.DataSource = _dtLines;
}
Mein Problem ist nun dass im Ordner die erste Datei vom Namen her die 01012017... ist, nicht die 26062017... und das 2. Skript einfach nicht bei der 26062017... anfängt
Ich hoffe ihr könnt helfen - Danke
Kannst du kurz erläutern, wie du das Problem gelöst hast? Danke! =)
Bitte in Zukunft keine Lösungen in den Startbeitrag editieren, sondern als eigene Antwort.
So kann die Lösung anhand der Eingangsfrage für jeden nachvollzogen werden.
Danke.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code