Перейти к содержимому

Фотография

Нужно написать простую программкуНе бесплатно !


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 43

#21
Hec_KFY

Hec_KFY
  • Гость
  • 29 сообщений
Могу написать что угодно. Огромный опыт в разработке программных продуктов, их внедрении и сопровождении.
  • 0

#22
Big Joe

Big Joe
  • Постоялец
  • 316 сообщений
Что угодно, не громко сказано)
  • 0

#23
Hec_KFY

Hec_KFY
  • Гость
  • 29 сообщений
писал всякое, от простецких субд до нейронных сетей
  • 0

#24
Visual1

Visual1
  • В доску свой
  • 1 198 сообщений
А такое можете сделать?

Изображение

Пользователь вводит исходный код программы в одном текстовом поле формы, нажимает кнопку "Compile and Run". Если во введенном коде нет ошибок, то ваша программа его компилирует, запускает, и отображает результат его работы в другом текстовом поле. :rolleyes:
  • 0

#25
xxel

xxel
  • Завсегдатай
  • 146 сообщений

писал всякое, от простецких субд до нейронных сетей

"простецкая субд" по сложности примерно равна нейронной сети.
ничего сверхестественного в нейронках нет, но для пыли в глаза
упоминать их очень любят.

А такое можете сделать?

какой смысл в школьном вопросе, решение которого предложено производителем?
или все велосипедим по незнанию?
http://support.micro...b/304655/EN-US/

но даже если уж совсем не умеем интернетом пользоваться, то не
морочась на всякие ньюансы, если очень надо по быстрому, на
коленке, это пишется за 10 минут.
System.IO.File.WriteAllText(@".\inp.cs", "using System; namespace ConsoleApplication1 { class Program { "
				+ "static void Main(string[] args) { " + textBox1.Text + "}}}");
			System.Diagnostics.Process p = System.Diagnostics.Process.Start(@"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\csc.exe", @".\inp.cs");
			p.WaitForExit();
			if (p.ExitCode == 0)
			{
				System.Diagnostics.Process p2 = new System.Diagnostics.Process(); 
				p2.StartInfo.RedirectStandardOutput = true;
				p2.StartInfo.FileName = @".\inp.exe";
				p2.StartInfo.UseShellExecute = false;
				p2.Start();
				textBox2.Text = p2.StandardOutput.ReadToEnd();
			} else
				textBox2.Text = "Error";

  • 0

#26
Big Joe

Big Joe
  • Постоялец
  • 316 сообщений
...

Сообщение отредактировал Big Joe: 31.05.2010, 15:10:49

  • 0

#27
Visual1

Visual1
  • В доску свой
  • 1 198 сообщений

какой смысл в школьном вопросе, решение которого предложено производителем?
или все велосипедим по незнанию?
http://support.micro...b/304655/EN-US/

"Велосипедите" (а точнее говоря, хамите без особых на то причин) в данном случае вы. В приведенной вами ссылке говорится: "The code above uses the CompilerParameters object to tell the compiler that you want to generate an executable file (as opposed to a DLL) and that you want to output the resulting assembly to disk". Затем скомпилированный дисковый файл вызывается как отдельное приложение, со своим окном:
...
string Output = "Out.exe";
...
if (ButtonObject.Text == "Run") Process.Start(Output);
Это лишь отдаленно похоже на картинку в моем сообщении. Вам понятно, в чем разница, или надо объяснять?


но даже если уж совсем не умеем интернетом пользоваться, то не морочась на всякие ньюансы, если очень надо по быстрому, на коленке, это пишется за 10 минут.

System.IO.File.WriteAllText(@".\inp.cs", "using System; namespace ConsoleApplication1 { class Program { "
				+ "static void Main(string[] args) { " + textBox1.Text + "}}}");
			System.Diagnostics.Process p = System.Diagnostics.Process.Start(@"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\csc.exe", @".\inp.cs");
...

А это ваще... Таким "школьным" способом из программы разве что стандартный notepad.exe вызывать. Или calc.exe. Впрочем, способ вполне законный. Я сам такой пример уже показывал здесь, где-то пару лет назад. :-)
  • 0

#28
Hec_KFY

Hec_KFY
  • Гость
  • 29 сообщений
Вот Вам код. Сделал на скорую ногу ))))
Но работает так как на картинке

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
String s = jTextArea1.getText();
s = "public class Test { public Test(){} public void run(){"+s+"} }";
File file = new File("C:\\Test.java");
class GetClass extends ClassLoader{
public GetClass(ClassLoader cl){
super(cl);
}
public Class toClass(String name, byte[] b) {
if (b != null) {
return defineClass(name, b, 0, b.length, this.getClass()
.getProtectionDomain());
} else {
return null;
}
}
}

try {
OutputStream out = new FileOutputStream(file);
out.write(s.getBytes());
out.flush();
out.close();
Runtime.getRuntime().exec("javac C:\\Test.java");
InputStream in = new FileInputStream("C:\\Test.class");
BufferedInputStream bf = new BufferedInputStream(in);
byte[] b = new byte[bf.available()];
bf.read(b);
Class c = new GetClass(null).toClass("Test", b);
Object o = c.newInstance();
o.getClass().getMethod("run", new Class[]{}).invoke(o, null);
out = new OutputStream() {
private int BUFFER_SIZE = 8192;
private JTextArea target;
private byte[] buffer = new byte[BUFFER_SIZE];
private int pos = 0;

@Override
public void write(int b) throws IOException {
buffer[pos++] = (byte)b;
if (pos == BUFFER_SIZE) {
flush();
}

}
@Override
public void flush() throws IOException
{
byte[] flush = null;
if (pos != BUFFER_SIZE) {
flush = new byte[pos];
System.arraycopy(buffer, 0, flush, 0, pos);
}
else {
flush = buffer;
}
jTextArea2.append(new String(flush));
pos = 0;
}

};
PrintStream outStream = new PrintStream(out, true);
System.setOut(outStream);
} catch (Exception ex) {
Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
}
}
  • 0

#29
Visual1

Visual1
  • В доску свой
  • 1 198 сообщений

Вот Вам код. Сделал на скорую ногу ))))
Но работает так как на картинке
...

Я в Java почти ничего не смыслю, и ошибок найти не могу. Но по некоторым строкам кода могу видеть, что используются именно те идеи, которые нужны в данном случае. Нечто подобное технологии Reflection в .NET. С уважением снимаю шляпу. Респект!
  • 0

#30
Padre_Romario

Padre_Romario
  • Постоялец
  • 384 сообщений
Что за манера на форумах 3.14ськами мериться? Голый флуд. Надо для умников таких соревнование устроить.

MODERATORIAL [egoist]
Предупреждение за нарушение п.2.2.7, 2.2.5

Сообщение отредактировал egoist: 03.06.2010, 14:17:21

  • 0

#31
Big Joe

Big Joe
  • Постоялец
  • 316 сообщений
2 Visual1

Не могли бы выложить исходный код вашей программы, мне как изучающему шарп, очень интересно.
  • 0

#32
Visual1

Visual1
  • В доску свой
  • 1 198 сообщений
Глюк, сорри.

Сообщение отредактировал Visual1: 01.06.2010, 23:22:25

  • 0

#33
marenmiroy

marenmiroy

    standalone

  • В доску свой
  • 2 822 сообщений

Что за манера на форумах 3.14ськами мериться? Голый флуд. Надо для умников таких соревнование устроить.

Да эти товарищи и в этой теме тем же занимались.
Реальных проектов нет, так они на форумах пиарятся :-)
  • 0

#34
Visual1

Visual1
  • В доску свой
  • 1 198 сообщений
2 Big Joe

Программа не моя, сам изучаю шарп. Исходный код класса, который выполняет основную работу, выглядит так:
public class CodeDriver
	{
		private string prefix =
			"using System;" +
			"public static class Driver" +
			"{" +
			"   public static void Run()" +
			"   {";
		private string postfix =
			"   }" +
			"}";
		public string CompileAndRun(string input, out bool hasError)
		{
			hasError = false;
			string returnData = null;
			
			CompilerResults results = null;
			using (CSharpCodeProvider provider = new CSharpCodeProvider())
			{
				CompilerParameters options = new CompilerParameters();
				options.GenerateInMemory = true;
				
				StringBuilder sb = new StringBuilder();
				sb.Append(prefix);
				sb.Append(input);
				sb.Append(postfix);

				results = provider.CompileAssemblyFromSource(options, sb.ToString());
			}
			if (results.Errors.HasErrors)
			{
				hasError = true;
				StringBuilder errorMessage = new StringBuilder();
				foreach (CompilerError error in results.Errors)
				{
					errorMessage.AppendFormat("{0} {1}", error.Line, error.ErrorText + Environment.NewLine);
				}
				returnData = errorMessage.ToString();
			}
			else
			{
				TextWriter temp = Console.Out;
				StringWriter writer = new StringWriter();
				Console.SetOut(writer);
				Type driverType = results.CompiledAssembly.GetType("Driver");

				driverType.InvokeMember("Run",BindingFlags.InvokeMethod |
					BindingFlags.Static | BindingFlags.Public,
					null, null, null);
				Console.SetOut(temp);

				returnData = writer.ToString();
			}
			return returnData;
		}
	}

Теперь можно легко написать обработчик нажатия на кнопку в главной форме с использованием этого класса:
private void Compile_Click(object sender, System.Windows.RoutedEventArgs e)
		{
			CodeDriver driver = new CodeDriver();
			bool isError;
			textOutput.Text = driver.CompileAndRun(textCode.Text, out isError);
			if (isError)
			{
				textOutput.Background = Brushes.Red;
			}
		}

  • 0

#35
Big Joe

Big Joe
  • Постоялец
  • 316 сообщений
Спасибо. :D
  • 0

#36
Visual1

Visual1
  • В доску свой
  • 1 198 сообщений

Спасибо.

Всегда пожалуйста. Очень интересно и полезно, разве нет? А говорят, что мы тут "3.14письками меряемся" и что у нас "голый флуд". Вот ведь дурачье. И откуда такие только берутся. :(
  • 0

#37
Big Joe

Big Joe
  • Постоялец
  • 316 сообщений
Голый флуд это когда один доказывает всем, что женщина не может быть программером или нет хорошего индуса программиста на планете. А решать интересные задачи, при необходимости получать решения это очень полезно и интересно. А кому не интересно, пусть не напрягается.
  • 0

#38
Padre_Romario

Padre_Romario
  • Постоялец
  • 384 сообщений


Спасибо.

Всегда пожалуйста. Очень интересно и полезно, разве нет? А говорят, что мы тут "3.14письками меряемся" и что у нас "голый флуд". Вот ведь дурачье. И откуда такие только берутся. :-)

Эй, умник, насчет дурачья за метлой послеживай. Есть правила на этот счет. (Модеру на заметку!) Просто на большенстве форумов как правило пустая болтовня.

MODERATORIAL [egoist]
Устное предупреждение. За любое дальнейшее продолжение дискуссии в этом же тоне будут выдваться предупреждения

Сообщение отредактировал egoist: 03.06.2010, 14:21:54

  • 0

#39
xxel

xxel
  • Завсегдатай
  • 146 сообщений

А это ваще... Таким "школьным" способом из программы разве что стандартный notepad.exe вызывать. Или calc.exe. Впрочем, способ вполне законный.

Это называется unix-way и единственный универсальный способ для данной задачи.

Смех начнется при попытке сделать парсер жабы или паскаля через всякие CSharpCodeProvider
/* только не надо отмазов, что в исходной задаче этого не требовалось */

Вот и спрашивается зачем делать сложно и специфично, если можно просто и универсально.

Я сам ...где-то пару лет назад....

этому примеру лет так 40. совпадает с рождением юниха. Неоригинально
  • 0

#40
Big Joe

Big Joe
  • Постоялец
  • 316 сообщений
Что за неадекватные люди просто ужас. "Просто на большенстве форумов", там и выражай свои ни довольствия, здесь люди тренируют мозги, если у тебя их нет, тебе тут не место.
  • 0


Количество пользователей, читающих эту тему: 1

пользователей: 0, неизвестных прохожих: 1, скрытых пользователей: 0

Размещение рекламы на сайте     Предложения о сотрудничестве     Служба поддержки пользователей

© 2011-2022 vse.kz. При любом использовании материалов Форума ссылка на vse.kz обязательна.