using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Diagnostics; using System.Text.RegularExpressions; namespace UIB_Tool_R10 { public partial class Form1 : Form { public string mainFile; public string outDir; public string[] scripts; public Form1() { InitializeComponent(); mainFile = @"C:\Users\may\Desktop\Analysis\Tool_new\Deposit Data R9\ESS9_DE_ms_v1.sav"; outDir = @"C:\Users\may\Desktop"; scripts = new string[99]; getScripts(); prepPaths(); } private void prepPaths() { String myDir = Directory.GetCurrentDirectory(); String text; // set up paths in config file if (File.Exists(myDir + "\\R\\App\\miktex\\texmfs\\config\\fontconfig\\config\\fonts.conf")) { File.Delete(myDir + "\\R\\App\\miktex\\texmfs\\config\\fontconfig\\config\\fonts.conf"); } if (File.Exists(myDir + "\\R\\App\\miktex\\texmfs\\config\\fontconfig\\config\\localfonts.conf")) { File.Delete(myDir + "\\R\\App\\miktex\\texmfs\\config\\fontconfig\\config\\localfonts.conf"); } text = File.ReadAllText(myDir + "\\R\\App\\miktex\\texmfs\\config\\fontconfig\\config\\fonts_clean.conf"); File.WriteAllText(myDir + "\\R\\App\\miktex\\texmfs\\config\\fontconfig\\config\\fonts.conf", text.Replace("MY_DIR", myDir)); text = File.ReadAllText(myDir + "\\R\\App\\miktex\\texmfs\\config\\fontconfig\\config\\localfonts_clean.conf"); File.WriteAllText(myDir + "\\R\\App\\miktex\\texmfs\\config\\fontconfig\\config\\localfonts.conf", text.Replace("MY_DIR", myDir)); } private void getScripts() { Console.WriteLine("Looking for scripts..."); int idx = 0; string[] files = System.IO.Directory.GetFiles(Directory.GetCurrentDirectory() + "\\Tool_files", "*.script"); foreach (String fn in files) { String line; Console.WriteLine("...found " + fn); using (System.IO.StreamReader file = new System.IO.StreamReader(fn)) { while ((line = file.ReadLine()) != null) { if (line.Contains("title:")) { c_script.Items.Add(line.ToString().Split(':')[1].Replace("\"", "")); //scripts[idx] = fn.ToString(); } else if (line.Contains("script:")) { scripts[idx] = line.ToString().Split(':')[1].Replace("\"", "").Trim(); } } } c_script.SelectedIndex = 0; Console.WriteLine("Filename: " + fn); idx++; } Console.WriteLine("Finished searching"); } private void _mainFileSelector_Click(object sender, EventArgs e) { OpenFileDialog openFileDialog1 = new OpenFileDialog { // InitialDirectory = @"C:\", Title = "Browse data Files", CheckFileExists = true, CheckPathExists = true, DefaultExt = "txt", Filter = "SPSS, Stata, SAS or CSV data (*.sav;*.dta;*.sas7bdat;*.csv)|*.sav;*.dta;*.sas7bdat;*.csv", FilterIndex = 2, RestoreDirectory = true, ReadOnlyChecked = true, ShowReadOnly = true }; if (openFileDialog1.ShowDialog() == DialogResult.OK) { t_mainFile.Text = openFileDialog1.FileName; this.mainFile = openFileDialog1.FileName; this.checkData(); } } private void Form1_Load(object sender, EventArgs e) { } private void label1_Click(object sender, EventArgs e) { } private void label2_Click(object sender, EventArgs e) { } private void label1_Click_1(object sender, EventArgs e) { } private void _outdirSelector_Click(object sender, EventArgs e) { FolderBrowserDialog outDir = new FolderBrowserDialog(); if (outDir.ShowDialog() == DialogResult.OK) { t_outdir.Text = outDir.SelectedPath; this.outDir = outDir.SelectedPath; this.checkData(); } } private void checkData() { if (this.mainFile != "" && this.outDir != "" && File.Exists(this.mainFile) && Directory.Exists(this.outDir)) { b_generate.Enabled = true; } else { b_generate.Enabled = false; } } private void b_generate_Click(object sender, EventArgs e) { string scriptFile = GetScriptFile(); if (scriptFile == "0") { return; } // zamrzni dtb.Text = "Please wait, generating report..."; b_generate.Enabled = false; // First, remove log file (if it exists) if (File.Exists(outDir + "\\error.log")) { try { File.Delete(outDir + "\\error.log"); } catch { } } String dir = Directory.GetCurrentDirectory() + "\\"; // odkomentiraj spodnjo vrstico int res = ExecuteCommand(dir.Replace(" ", "^ ") + "R\\App\\R-portable\\bin\\R -e \"Sys.setenv(R_LIBS_USER=''); .libPaths(''); Sys.setenv(PATH = paste('', '" + dir.Replace("\\", "/") + "R/App/miktex/texmfs/install/miktex/bin/x64/', sep =.Platform$path.sep)); Sys.setenv(RSTUDIO_PANDOC = '" + dir.Replace("\\", "/") + "R/App/pandoc'); rmarkdown::render('" + scriptFile + "', params=list(mainFile = \'" + mainFile.Replace("\\", "/") + "\'),output_file = '" + outDir.Replace("\\", "/").Replace(" ", "\\ ") + "/Report.pdf')\"", outDir + "\\error.log"); Console.WriteLine(dir.Replace(" ", "^ ") + "R\\App\\R-portable\\bin\\R -e \"Sys.setenv(R_LIBS_USER=''); .libPaths(''); Sys.setenv(PATH = paste('', '" + dir.Replace("\\", "/") + "R/App/miktex/texmfs/install/miktex/bin/x64/', sep =.Platform$path.sep)); Sys.setenv(RSTUDIO_PANDOC = '" + dir.Replace("\\", "/") + "R/App/pandoc'); rmarkdown::render('" + scriptFile + "', params=list(mainFile = \'" + mainFile.Replace("\\", "/") + "\'),output_file = '" + outDir.Replace("\\", "/").Replace(" ", "\\ ") + "/Report.pdf')\""); if (res == 0) { dtb.Text = "Report generated!"; if (c_autoOpen.SelectedIndex == 0) { System.Diagnostics.Process.Start(outDir.Replace(" ", "\\ ") + "\\Report.pdf"); } } else { dtb.Text = "There has been an error while generating the report..."; System.Windows.Forms.MessageBox.Show("There has been an error. Please contact your CC and send them 'error.log' from the output folder so they will be able to pinpoint the error cause."); } } private string GetScriptFile() { String addition = ""; switch (mainFile.Split('.').Last().ToLower()) { case "sav": addition = "-sav.Rmd"; break; case "dta": addition = "-dta.Rmd"; break; case "sas7bdat": addition = "-sas.Rmd"; break; case "csv": addition = "-csv.Rmd"; break; default: System.Windows.Forms.MessageBox.Show("Unknown data file extension. Only SAV, DTA, SAS7bdat and CSV are supported."); return "0"; } return System.IO.Directory.GetCurrentDirectory().Replace("\\", "/") + "/Tool_files/" + this.scripts[c_script.SelectedIndex] + addition; } static int ExecuteCommand(string command, string logfile = "") { int result; var processInfo = new ProcessStartInfo("cmd.exe", "/c " + command); processInfo.CreateNoWindow = true; processInfo.UseShellExecute = false; processInfo.RedirectStandardError = true; processInfo.RedirectStandardOutput = true; var process = Process.Start(processInfo); StreamWriter w = File.AppendText(logfile); process.OutputDataReceived += (object sender, DataReceivedEventArgs e) => // Console.WriteLine("output>>" + e.Data); w.WriteLine(e.Data); process.BeginOutputReadLine(); process.ErrorDataReceived += (object sender, DataReceivedEventArgs e) => // Console.WriteLine("error>>" + e.Data); w.WriteLine(e.Data); process.BeginErrorReadLine(); process.WaitForExit(); Console.WriteLine("ExitCode: {0}", process.ExitCode); w.WriteLine(process.ExitCode); result = process.ExitCode; process.Close(); return result; } private void dtb_TextChanged(object sender, EventArgs e) { } } }