SCRUM-98 file reader #13

Merged
VladiusVostokus merged 11 commits from lab5/kovalenko-SCRUM-98-FileReader into dev 2026-03-08 17:48:13 +02:00
Showing only changes of commit 11c590cf25 - Show all commits

View File

@@ -24,12 +24,20 @@ class FileReader:
self.z_idx = file_header.index('Z') self.z_idx = file_header.index('Z')
def getNextValue(self): def getNextValue(self):
hasslesstech commented 2026-03-03 17:41:56 +02:00 (Migrated from github.com)
Review

This function is prone to crashing on unexpected file lines. Instead of trying to adapt to a specific file format, it might be better to use try/catch and deciding what to do based on that. The code may look like so:

while True:
    row = next(self.file_reader, None)

    if row is None:
            self._rewind_file()
            continue
    try:
        x = int(row[self.x_idx])
        y = int(row[self.y_idx])
        z = int(row[self.z_idx])

        return Accelerometer(x=x, y=y, z=z)
    exception Exception as e:
        continue

This way, in case the file is structured differently, has gaps or other mistakes, the function will silently skip over them and return the next valid group of values.

As an improvement, it may be way better to create a custom reader rather than relying on the csv.reader to make the script resilient against any possible .csv file failures

This function is prone to crashing on unexpected file lines. Instead of trying to adapt to a specific file format, it might be better to use try/catch and deciding what to do based on that. The code may look like so: ``` while True: row = next(self.file_reader, None) if row is None: self._rewind_file() continue try: x = int(row[self.x_idx]) y = int(row[self.y_idx]) z = int(row[self.z_idx]) return Accelerometer(x=x, y=y, z=z) exception Exception as e: continue ``` This way, in case the file is structured differently, has gaps or other mistakes, the function will silently skip over them and return the next valid group of values. As an improvement, it may be way better to create a custom reader rather than relying on the csv.reader to make the script resilient against any possible .csv file failures
VladiusVostokus commented 2026-03-03 18:52:57 +02:00 (Migrated from github.com)
Review

Ok, I'll try it

Ok, I'll try it
row = next(self.file_reader, None)
if row is None:
self._rewind_file()
row = next(self.file_reader) row = next(self.file_reader)
x = int(row[self.x_idx]) x = int(row[self.x_idx])
y = int(row[self.y_idx]) y = int(row[self.y_idx])
z = int(row[self.z_idx]) z = int(row[self.z_idx])
return Accelerometer(x=x, y=y, z=z) return Accelerometer(x=x, y=y, z=z)
def _rewind_file(self):
self.file.seek(0)
self.file_reader = reader(self.file)
next(self.file_reader)
def stopReading(self, *args, **kwargs): def stopReading(self, *args, **kwargs):
if self.file: if self.file:
self.file.close() self.file.close()