Доделал определение размерности консолью.

This commit is contained in:
2023-11-24 17:04:22 +03:00
parent 5626cea52b
commit 5b02a435ce
2 changed files with 38 additions and 23 deletions

View File

@@ -520,6 +520,10 @@ public abstract class Sapfor extends OSDComponent {
} }
return true; return true;
} }
//---
public static Vector<String> outputLines = null;
public static Vector<String> errorsLines = null;
//---
public static boolean performScript(String name, //имя скрипта public static boolean performScript(String name, //имя скрипта
File sapfor_drv, //путь к сапфору File sapfor_drv, //путь к сапфору
File workspace, //проект File workspace, //проект
@@ -534,6 +538,8 @@ public abstract class Sapfor extends OSDComponent {
Utils.CheckDirectory(data_workspace); Utils.CheckDirectory(data_workspace);
File outputFile = new File(data_workspace, outName); File outputFile = new File(data_workspace, outName);
File errorsFile = new File(data_workspace, errName); File errorsFile = new File(data_workspace, errName);
outputLines = null;
errorsLines = null;
Utils.delete_with_check(outputFile); Utils.delete_with_check(outputFile);
Utils.delete_with_check(errorsFile); Utils.delete_with_check(errorsFile);
//--- //---
@@ -568,8 +574,8 @@ public abstract class Sapfor extends OSDComponent {
while (!flag); while (!flag);
process = null; process = null;
//--- //---
Vector<String> outputLines = new Vector<>(FileUtils.readLines(outputFile)); outputLines = new Vector<>(FileUtils.readLines(outputFile));
Vector<String> errorsLines = new Vector<>(FileUtils.readLines(errorsFile)); errorsLines = new Vector<>(FileUtils.readLines(errorsFile));
return (exit_code == 0) && return (exit_code == 0) &&
checkLines(outputLines) && checkLines(outputLines) &&
checkLines(errorsLines); checkLines(errorsLines);

View File

@@ -29,23 +29,23 @@ public class CreateTestFromFolder extends Pass_2021<Test> {
} }
Group group = null; Group group = null;
File dir = null; File dir = null;
boolean show_log; boolean from_directory_chooser;
Vector<ProjectFile> project_files = new Vector<>(); Vector<ProjectFile> project_files = new Vector<>();
@Override @Override
protected boolean canStart(Object... args) throws Exception { protected boolean canStart(Object... args) throws Exception {
if (args.length == 0) { if (args.length == 0) {
show_log = true; from_directory_chooser = true;
if (!Current.Check(Log, Current.Group)) if (!Current.Check(Log, Current.Group))
return false; return false;
dir = directoryChooser.ShowDialog(); dir = directoryChooser.ShowDialog();
group = Current.getGroup(); group = Current.getGroup();
} else { } else {
show_log = false; from_directory_chooser = false;
dir = (File) args[0]; dir = (File) args[0];
group = (Group) args[1]; group = (Group) args[1];
} }
if (dir == null) { if (dir == null) {
if (show_log) Log.Writeln_("Папка не выбрана."); if (from_directory_chooser) Log.Writeln_("Папка не выбрана.");
return false; return false;
} }
//--- //---
@@ -58,18 +58,20 @@ public class CreateTestFromFolder extends Pass_2021<Test> {
int other_project_files = 0; int other_project_files = 0;
//--- //---
if (dir.getName().equalsIgnoreCase(Constants.data)) { if (dir.getName().equalsIgnoreCase(Constants.data)) {
if (show_log) Log.Writeln_("Папка " + Utils.Brackets(dir) + " является служебной папкой визуализатора."); if (from_directory_chooser)
Log.Writeln_("Папка " + Utils.Brackets(dir) + " является служебной папкой визуализатора.");
return false; return false;
} }
//-- //--
if (files == null) { if (files == null) {
if (show_log) Log.Writeln_("Не удалось получить список файлов для папки " + Utils.Brackets(dir) + "."); if (from_directory_chooser)
Log.Writeln_("Не удалось получить список файлов для папки " + Utils.Brackets(dir) + ".");
return false; return false;
} }
//-- //--
for (File file : files) { for (File file : files) {
if (!Utils.validateProjectFile(file, Log)) { if (!Utils.validateProjectFile(file, Log)) {
if (show_log) if (from_directory_chooser)
Log.Writeln_("Имя файла " + Utils.Brackets(file.getName()) + " содержит запрещённые символы " + Constants.all_forbidden_characters_string + ", или кириллицу."); Log.Writeln_("Имя файла " + Utils.Brackets(file.getName()) + " содержит запрещённые символы " + Constants.all_forbidden_characters_string + ", или кириллицу.");
bad++; bad++;
} }
@@ -97,19 +99,19 @@ public class CreateTestFromFolder extends Pass_2021<Test> {
} }
//-- //--
if (subdirs > 0) { if (subdirs > 0) {
if (show_log) Log.Writeln_("Папка " + Utils.Brackets(dir) + " содержит вложенные подпапки."); if (from_directory_chooser) Log.Writeln_("Папка " + Utils.Brackets(dir) + " содержит вложенные подпапки.");
return false; return false;
} }
if (bad > 0) { if (bad > 0) {
return false; return false;
} }
if (fortran_programs == 0) { if (fortran_programs == 0) {
if (show_log) if (from_directory_chooser)
Log.Writeln_("Папка не содержит ни одной программы на языке " + group.language.getDescription() + "."); Log.Writeln_("Папка не содержит ни одной программы на языке " + group.language.getDescription() + ".");
return false; return false;
} }
if (other_project_files > 0) { if (other_project_files > 0) {
if (show_log) if (from_directory_chooser)
Log.Writeln_("Папка содержит файлы, не являющиеся программами на языке FORTRAN, или заголовочными."); Log.Writeln_("Папка содержит файлы, не являющиеся программами на языке FORTRAN, или заголовочными.");
return false; return false;
} }
@@ -137,15 +139,21 @@ public class CreateTestFromFolder extends Pass_2021<Test> {
//-- получить размерность консольным сапфором. папка уже отправлена и чистить ее не нужно!! //-- получить размерность консольным сапфором. папка уже отправлена и чистить ее не нужно!!
ShowMessage2("Синтаксический анализ"); ShowMessage2("Синтаксический анализ");
if (Sapfor.parse(Current.getSapfor().getFile(), project.Home, Current.getSapfor().getConsoleFlags()) if (Sapfor.parse(Current.getSapfor().getFile(), project.Home, Current.getSapfor().getConsoleFlags())
) { ) {
ShowMessage2("Определение размерности"); ShowMessage2("Определение размерности");
if (Sapfor.analysis(Current.getSapfor().getFile(), project.Home, if (Sapfor.analysis(Current.getSapfor().getFile(), project.Home,
PassCode_2021.SPF_GetMaxMinBlockDistribution, PassCode_2021.SPF_GetMaxMinBlockDistribution,
Current.getSapfor().getConsoleFlags())) { Current.getSapfor().getConsoleFlags())) {
for (String line: Sapfor.outputLines){
String prefix = "GET_MIN_MAX_BLOCK_DIST: ";
if (line.startsWith(prefix)){
String s = line.substring(prefix.length());
System.out.println(Utils.Brackets(s));
String[] data = s.split(" ");
target.min_dim = Integer.parseInt(data[0]);
target.max_dim = Integer.parseInt(data[1]);
}
}
} else Log.Writeln_("Не удалось определить размерность.проекта " + Utils.Brackets(dir.getName())); } else Log.Writeln_("Не удалось определить размерность.проекта " + Utils.Brackets(dir.getName()));
} else { } else {
Log.Writeln_("Не удалось выполнить синтаксический анализ проекта " + Utils.Brackets(dir.getName())); Log.Writeln_("Не удалось выполнить синтаксический анализ проекта " + Utils.Brackets(dir.getName()));
@@ -159,6 +167,7 @@ public class CreateTestFromFolder extends Pass_2021<Test> {
@Override @Override
protected void performDone() throws Exception { protected void performDone() throws Exception {
super.performDone(); super.performDone();
if (from_directory_chooser)
passes.get(PassCode_2021.PublishTest).Do(target); passes.get(PassCode_2021.PublishTest).Do(target);
} }
} }