Skip to content

Commit 056555c

Browse files
committed
Update MainWindow.axaml.cs
1 parent dcc2e6d commit 056555c

File tree

1 file changed

+68
-20
lines changed

1 file changed

+68
-20
lines changed

source/NSD.UI/MainWindow.axaml.cs

Lines changed: 68 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using System.Globalization;
99
using System.IO;
1010
using System.Linq;
11+
using System.Runtime.InteropServices;
1112
using System.Text.RegularExpressions;
1213
using System.Threading.Tasks;
1314

@@ -37,14 +38,21 @@ public async void BtnSearch_Click(object sender, RoutedEventArgs e)
3738
return;
3839
}
3940

40-
var files = Directory.EnumerateFiles(viewModel.ProcessWorkingFolder, "*.csv");
4141
viewModel.InputFilePaths.Clear();
4242
viewModel.InputFileNames.Clear();
43+
var files = Directory.EnumerateFiles(viewModel.ProcessWorkingFolder, "*.csv");
44+
foreach (var file in files)
45+
{
46+
viewModel.InputFilePaths.Add(file);
47+
viewModel.InputFileNames.Add(Path.GetFileName(file));
48+
}
49+
files = Directory.EnumerateFiles(viewModel.ProcessWorkingFolder, "*.bin"); // Hidden functionality that supports F32 bin files
4350
foreach (var file in files)
4451
{
4552
viewModel.InputFilePaths.Add(file);
4653
viewModel.InputFileNames.Add(Path.GetFileName(file));
4754
}
55+
4856
viewModel.SelectedInputFileIndex = 0;
4957
}
5058

@@ -117,27 +125,67 @@ public async void btnRun_Click(object sender, RoutedEventArgs e)
117125
viewModel.Status = "Status: Loading CSV...";
118126

119127
using var stream = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
120-
//using var reader = new StreamReader(stream);
121-
//using var csv = new CsvReader(reader, CultureInfo.InvariantCulture);
122-
//var records = await csv.GetRecordsAsync<double>().ToListAsync();
123-
List<double> records = new();
128+
List<double> records = [];
124129
DateTimeOffset fileParseStart = DateTimeOffset.UtcNow;
125-
await Task.Run(() =>
126-
{
127-
using var streamReader = new StreamReader(stream);
128-
var csvReader = new NReco.Csv.CsvReader(streamReader, ",");
129-
if (viewModel.CsvHasHeader)
130-
csvReader.Read();
131-
int columnIndex = viewModel.CsvColumnIndex;
132-
while (csvReader.Read())
133-
{
134-
var number = double.Parse(csvReader[columnIndex]);
135-
if (number > 1e12) // Catches the overrange samples from DMM6500
136-
continue;
137-
records.Add(number);
138-
}
139-
});
140130
DateTimeOffset fileParseFinish = DateTimeOffset.UtcNow;
131+
132+
switch (Path.GetExtension(path))
133+
{
134+
case ".csv":
135+
{
136+
//using var reader = new StreamReader(stream);
137+
//using var csv = new CsvReader(reader, CultureInfo.InvariantCulture);
138+
//var records = await csv.GetRecordsAsync<double>().ToListAsync();
139+
140+
fileParseStart = DateTimeOffset.UtcNow;
141+
await Task.Run(() =>
142+
{
143+
using var streamReader = new StreamReader(stream);
144+
var csvReader = new NReco.Csv.CsvReader(streamReader, ",");
145+
if (viewModel.CsvHasHeader)
146+
csvReader.Read();
147+
int columnIndex = viewModel.CsvColumnIndex;
148+
while (csvReader.Read())
149+
{
150+
var number = double.Parse(csvReader[columnIndex]);
151+
if (number > 1e12) // Catches the overrange samples from DMM6500
152+
continue;
153+
records.Add(number);
154+
}
155+
});
156+
fileParseFinish = DateTimeOffset.UtcNow;
157+
break;
158+
}
159+
case ".bin":
160+
{
161+
fileParseStart = DateTimeOffset.UtcNow;
162+
await Task.Run(() =>
163+
{
164+
const int ChunkSizeBytes = 8 * 1024 * 1024; // 8 MiB
165+
byte[] buffer = new byte[ChunkSizeBytes];
166+
int bytesRead;
167+
168+
while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) > 0)
169+
{
170+
// Only process full float32 values (4 bytes each)
171+
int validBytes = bytesRead - (bytesRead % 4);
172+
if (validBytes == 0)
173+
continue;
174+
175+
ReadOnlySpan<byte> byteSpan = buffer.AsSpan(0, validBytes);
176+
ReadOnlySpan<float> floatSpan = MemoryMarshal.Cast<byte, float>(byteSpan);
177+
178+
foreach (var f32 in floatSpan)
179+
{
180+
records.Add(f32);
181+
}
182+
}
183+
});
184+
fileParseFinish = DateTimeOffset.UtcNow;
185+
break;
186+
}
187+
}
188+
141189
if (records.Count == 0)
142190
{
143191
viewModel.Status = "Error: No CSV records found";

0 commit comments

Comments
 (0)