Laden...

[GELÖST] DataTable aufsteigend durchlaufen

Erstellt von mrennen vor 6 Jahren Letzter Beitrag vor 6 Jahren 1.272 Views
M
mrennen Themenstarter:in
166 Beiträge seit 2008
vor 6 Jahren
[GELÖST] DataTable aufsteigend durchlaufen

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

M
mrennen Themenstarter:in
166 Beiträge seit 2008
vor 6 Jahren

Gelöst, trotzdem Danke an alle die sich bemüht haben

1.040 Beiträge seit 2007
vor 6 Jahren

Kannst du kurz erläutern, wie du das Problem gelöst hast? Danke! =)

16.834 Beiträge seit 2008
vor 6 Jahren

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.