regex for numeric value for data from text files; closes #127
This commit is contained in:
@ -1,6 +1,6 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from pathlib import Path
|
||||
import re
|
||||
|
||||
from nmreval.io.asciireader import AsciiReader
|
||||
from nmreval.utils import NUMBER_RE
|
||||
@ -18,6 +18,9 @@ class QAsciiReader(QtWidgets.QDialog, Ui_ascii_reader):
|
||||
self.setupUi(self)
|
||||
|
||||
self.reader = None
|
||||
self._matches = []
|
||||
self.regex_input.setText(NUMBER_RE.pattern)
|
||||
self.custom_input.setValidator(QtGui.QDoubleValidator())
|
||||
|
||||
self.comment_textfield = QtWidgets.QPlainTextEdit(self.header_widget)
|
||||
self.comment_textfield.setReadOnly(True)
|
||||
@ -46,6 +49,8 @@ class QAsciiReader(QtWidgets.QDialog, Ui_ascii_reader):
|
||||
def __call__(self, fname, *args, **kwargs):
|
||||
self.reader = AsciiReader(fname)
|
||||
|
||||
self.check_filename(self.regex_input.text())
|
||||
|
||||
if self.skip:
|
||||
self.accept()
|
||||
return
|
||||
@ -62,8 +67,6 @@ class QAsciiReader(QtWidgets.QDialog, Ui_ascii_reader):
|
||||
self.skippy_checkbox.setCheckState(QtCore.Qt.Unchecked)
|
||||
self.skippy_checkbox.blockSignals(False)
|
||||
|
||||
self.check_filename(fname)
|
||||
|
||||
return self
|
||||
|
||||
def set_gui(self):
|
||||
@ -145,7 +148,7 @@ class QAsciiReader(QtWidgets.QDialog, Ui_ascii_reader):
|
||||
staggered_range = 0
|
||||
except ValueError:
|
||||
_ = QtWidgets.QMessageBox.information(self, 'No delays',
|
||||
'Delays cannot be calculated: Not enough or wrong arguments.')
|
||||
'Delays cannot be calculated: Not enough or wrong arguments.')
|
||||
return
|
||||
|
||||
self.reader.calc_delays(start, stop, num_delays, log=self.log_checkBox.isChecked(),
|
||||
@ -204,9 +207,14 @@ class QAsciiReader(QtWidgets.QDialog, Ui_ascii_reader):
|
||||
col_header = [col_header[i] for i in range(len(col_header)) if i in y]
|
||||
|
||||
try:
|
||||
ret_dic = self.reader.export(x=x, y=y, yerr=y_err,
|
||||
mode=self.buttonGroup.checkedButton().text(),
|
||||
col_names=col_header)
|
||||
ret_dic = self.reader.export(
|
||||
x=x,
|
||||
y=y,
|
||||
yerr=y_err,
|
||||
mode=self.buttonGroup.checkedButton().text(),
|
||||
col_names=col_header,
|
||||
num_value=self.get_numerical_value(),
|
||||
)
|
||||
self.data_read.emit(ret_dic)
|
||||
|
||||
except ImportError as e:
|
||||
@ -223,7 +231,45 @@ class QAsciiReader(QtWidgets.QDialog, Ui_ascii_reader):
|
||||
def skip_next_dial(self, _: int):
|
||||
self.skip = self.skippy_checkbox.isChecked()
|
||||
|
||||
def check_filename(self, filename: str | Path):
|
||||
self.label_8.setText(str(filename.stem))
|
||||
for i in NUMBER_RE.finditer(str(filename.stem)):
|
||||
print(i)
|
||||
@QtCore.pyqtSlot(str, name='on_regex_input_textChanged')
|
||||
def check_filename(self, pattern: str = NUMBER_RE.pattern):
|
||||
if self.reader is None:
|
||||
return
|
||||
|
||||
try:
|
||||
pattern = re.compile(pattern)
|
||||
self.regex_input.setStyleSheet('color: rgb(0, 0, 0)')
|
||||
self._matches = [m for m in pattern.finditer(str(self.reader.fname.stem))]
|
||||
except re.error:
|
||||
self._matches = []
|
||||
|
||||
if self._matches:
|
||||
self.re_match_index.blockSignals(True)
|
||||
self.re_match_index.setMaximum(len(self._matches))
|
||||
self.re_match_index.blockSignals(False)
|
||||
else:
|
||||
self.regex_input.setStyleSheet('color: rgb(255, 0, 0)')
|
||||
|
||||
self.show_match(self.re_match_index.value())
|
||||
|
||||
@QtCore.pyqtSlot(int, name='on_re_match_index_valueChanged')
|
||||
def show_match(self, idx: int = 0):
|
||||
fname = str(self.reader.fname.stem)
|
||||
|
||||
if self._matches:
|
||||
m = self._matches[idx-1]
|
||||
self.label_8.setText(f'{fname[:m.start()]}<b>{fname[m.start():m.end()]}</b>{fname[m.end():]}')
|
||||
else:
|
||||
self.label_8.setText(fname)
|
||||
|
||||
def get_numerical_value(self):
|
||||
val = 0
|
||||
if self.re_button.isChecked() and self._matches:
|
||||
m = self._matches[self.re_match_index.value()-1]
|
||||
val = float(NUMBER_RE.search(m.group()).group().replace('p', '.'))
|
||||
elif self.custom_button.isChecked():
|
||||
val = float(self.custom_input.text())
|
||||
|
||||
return val
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user