Ответы пользователя по тегу C#
  • Парсинг сложного документа RTF, извлечение табличных данных и разбиение на страницы, как?

    mindtester
    @mindtester Автор вопроса, куратор тега C#
    http://iczin.su/hexagram_48
    1 - https://github.com/SourceCodeBackup/RtfDomParser лучший кандидат на извлечение данных. и уж точно на экпресс иследование
    надо было просто научится его готовить
    к счастью структура документа довольно четкая, по этому все решаемо. но либо не умеет сохранять модифицированные документы, либо я все еще не понимаю как пользоваться тамошний Writer-ом

    2 - https://github.com/sgolivernet/nrtftree умеет сохранять текущее состояние, а значит может быть использован для нарезки. если научиться применять знания о структуре, полученные с помощью RtfDomParser. возможно и парсить можно.. но время выполнения задания не бесконечно. так что нарезку видимо придется делать средствами печати в PDF, явно будет быстрее (по условиям задания, на выхлопе нужны постраничные PDF)
    Ответ написан
  • Конвертация RTF в PDF на C#, строго бесплатными компонентами, кому таковые известны?

    mindtester
    @mindtester Автор вопроса, куратор тега C#
    http://iczin.su/hexagram_48
    в итоге интенсивных поисков, приходится признать, что все полностью фришные инструменты, пытаются рендерить в html и лишь затем в pdf

    если по условиям задания, мне разрешат использовать офис upd - все сводится к автоматизации задания печать в pdf принтер. если нет - упростим задачу до рендеринга html, а уж браузеры использовать не запрещено точно ))
    вышло еще проще ))
    internal static bool wordAsConverter(string rtf, string pdf, bool verb = true, bool clean = true)
    {
      $"\t..try convert to pdf...".print();
      var res = false;
      var app = new Application();
      try
      {
        var doc = app.Documents.Open(rtf);
        doc.ExportAsFixedFormat(pdf, WdExportFormat.wdExportFormatPDF);
        doc.Close(false);
        res = true;
        var fn = Path.GetFileName(rtf);
        if (verb) $"\t{fn} converted to pdf".print();
        if (clean)
        {
          File.Delete(rtf);
          if (verb) $"\t{fn} deleted".print();
        }
      }
      catch (Exception e) { e.Message.print(); }
      finally { app.Quit(false); }
      return res;
    }
    // привычка, для уменьшения многословности кода
    internal static void print(this string s) => Console.WriteLine(s);

    всем спасибо за участие!
    Ответ написан
    Комментировать
  • Какое графическое API выбрать для C#?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    Какой API лучше для этого языка?

    - а для вас?
    - а для задачи?
    Ответ написан
    6 комментариев
  • В чем проблема динамического подключения DLL?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    Что я делаю не так?
    все

    если бы у вас была DLL на C/C++ - был бы повод и способ решения.. для дотнета - вам нужно просто включить проект библиотеки в в решение (solution)
    .. сравните с тем как подключаются nuget пакеты, это образец решения

    ps
    Цель в том, чтобы dll подгружалась с сервера, и существовала только в оперативной памяти, поэтому подобные танцы с бубном
    намек - чаще такие вещи решаются через скриптование

    pps Алексей Павлов, Степан Гервик,
    я неправильно выразился, под фразой "только подключение сборки" я имел в виду, как раз динамическое подключение сборки, либо через Assembly.Load, либо AppDomain.Load()
    +
    Цель в том, чтобы dll подгружалась с сервера, и существовала только в оперативной памяти, поэтому подобные танцы с бубном
    .. ну начнем с того, что надо иметь правильно компилированные версии DLL для всех вероятных клиентских ОС.. это изначально выбор пути жуткого геморроя.. думаю на этом можно и закончить ))
    Ответ написан
    4 комментария
  • Для кого все же предназначен код, полученный из CIL (байт-кода .net)?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    хорошо сформулированный вопрос, содержит не менее половины ответа (с)
    тут так..
    CIL действительно компилируется в машинный код
    да, действительно
    зачем указывать список целевых операционных систем?
    не поверите, но минимальный ответ примерно таков - правильный формат исполняемого файла
    ps да да, как подмечено Saboteur, и правильные обращения к ОС, тоже.. или даже на первом месте.. .. эмм.. для CIL.. того же Mono, да проверьте сами! ))
    Ответ написан
    Комментировать
  • Как разбить строку по 2 символам \\(путь к файлу)?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    \\(путь к файлу)
    это синтаксис литералов в тексте программы, что бы компилятор различал применение \ как служебного символа и как просто символа. реально строки путей содержат один символ разделитель \

    так что разбивать надо именно по нему. хотя и записывается как '\\'. но это один символ

    еще посмотрите класс Path https://docs.microsoft.com/ru-ru/dotnet/api/system...
    иногда его достаточно для выделения пути без имени, имени файла, имени без расширения, или расширения без имени
    Ответ написан
    Комментировать
  • Как упорядочить вывод в консоли?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    public static void Show(string dirPath, int level)
    {
    ...
           var sb = new StringBuilder();
           sb.Append('\t', level);
           sb.Append(dirFiles[i]);
           Console.WriteLine(sb);
    ...
           Show(dirs[i], level + 1);
    ...
    }
    ...
    static void Main(string[] args)
    {
           Show("D:\\test", 0);
    ...
    }


    ps естественно, возможны и другие извращения..
    spoiler
    public static int level;
    ...
    public static void Show(string dirPath)
    {
    ...
           var sb = new StringBuilder();
           sb.Append('\t', level);
           sb.Append(dirFiles[i]);
           Console.WriteLine(sb);
    ...
           level++;
           Show(dirs[i]);
           level--;
           // очевидно что первый вариант будет попроще и понадежнее
    ...
    }
    ...
    static void Main(string[] args)
    {
           level = 0;
           Show("D:\\test");
    ...
    }
    Ответ написан
    5 комментариев
  • Как конвертировать файл в UTF8 с помощью C#?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    а так? (я не против стримов, общий принцип то тот же.. просто куча суеты уже под капотом ;)
    using System.IO;
    using System.Text;
    
    namespace ansi2utf8
    {
        class Program
        {
            static void Main(string[] args)
            {
                var t = File.ReadAllText("quest.txt", Encoding.Default);
                File.WriteAllText("quest8.txt", t, Encoding.UTF8);
            }
        }
    }
    spoiler
    Jf3pH9u.pngm36z6IT.png
    вся папка проекта с компиляцией и тд..
    https://www.sendspace.com/file/a635b5
    Ответ написан
    3 комментария
  • C# стоимость обработки исключений?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    в общем случае, все сводится к стройности логики обработки ошибок. возможно вам стоит прочитать эту статью
    https://habr.com/ru/post/339606/
    у автора ряд публикаций, в тч он достаточно активно пишет и о C#
    https://habr.com/ru/users/marshinov/posts/
    Ответ написан
    1 комментарий
  • Почему file.exists не видит файл?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    что такое textBox1.Text?
    что такое @"G:\std\profiles\" + textBox1.Text?
    Есть подозрения
    что если textBox1.Text фрагмент пути, типа конкретное приложение или имя профиля тогда
    if (File.Exists(@"G:\std\profiles\" + textBox1.Text + @"\cfg.txt"))
    // со слешами тоже повнимательнее надо
    но если textBox1.Text альтернативное имя файла, видимо
    if (File.Exists(@"G:\std\profiles\" + textBox1.Text))

    а так же выводите промежуточные значения для отладки. не надо ломать голову, что и куда, вы пуляете в слупую
    Ответ написан
    2 комментария
  • Как реализовать бесконечный баланс Unity?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    Ответ написан
    Комментировать
  • WinForms в monodevelop на ubuntu?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    ни как
    (upd см камент от Foggy Finder про https://github.com/picoe/Eto но стоит помнить, что это:
    1 - эмуляция
    2 - частная инициатива
    ++
    makarychev13 в каментах тут, утверждает что
    майки сделали винформы кроссплатформенными в .NET Core 3
    хотя и без пруфа, но что то гуглится.. надо понимать, что "майки" мало чего будут делать просто так. тут главный вопрос востребованность (особенно в энтерпрайзе, но в нем самом, формы, как бы уже признаны маргинальной веткой эволюции).. ).
    ... .NET WinForms по своей сути, является оберткой над интерфейсной частью win32 api, которого за пределами винды нет, ни когда не было, и ни когда не будет* (upd см каменты, возможно формочки будут кросами в .NET Core. но не сегодня точно). другой вопрос WPF - это глобально переработанный интерфейс к системе. и возможностей больше, и на полпути к кросу - Xamarin и AvaloniaUI, основаны на XAML. получив опыт WPF, в них будет легче стартовать. ну или сразу можно с них начинать, если винда не нужна (или сразу нужен кросс).
    Ответ написан
    7 комментариев
  • Как преобразовать типы со знаком вопроса в типы без него?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    Комментировать
  • Как лучше: выучить с# или сразу с# под Unity?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    все зависит от цели:
    - хотите писать игры?
    с# но сразу под юнити
    а если не получится покорить мир играми, потом подтянете Asp, .Net Core, WPF или что понадобится
    - хотите в ближайшей перспективе работать кодером? (но по вечерам все равно пытаться писать игры) - тогда наоборот
    Ответ написан
    Комментировать
  • Как сделать вывод в цикле один раз?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    ну тогда уж:
    int[,] a = { { 1, 1, 1 }, { 1, 1, 1 }, { 1, 1, 1 } };
    bool s = true;
    for (int i = 0; i < a.GetLength(0) && s; ++i)
      for (int j = 0; j < a.GetLength(1) && s; ++j)
        s &= a[i, j] == a[j, i];
    Console.WriteLine(s ? "Симметрична" : "Ne simmetrichna");

    при этом можно и просто присваивать контрольке значение
    int[,] a = { { 1, 1, 1 }, { 1, 1, 1 }, { 1, 1, 1 } };
    bool s = true;
    for (int i = 0; i < a.GetLength(0) && s; ++i)
      for (int j = 0; j < a.GetLength(1) && s; ++j)
        s = a[i, j] == a[j, i];
    Console.WriteLine(s ? "Симметрична" : "Ne simmetrichna");

    а можно проверять квадратность матрицы до начала циклов, а так же перебирать "треугольник"
    spoiler
    using System;
    
    namespace simm_array
    {
        class Program
        {
            static void Main(string[] args)
            {
                var m = new int[,] { { 1, 1, 1 }, { 1, 1, 1 }, { 1, 1, 1 } };
                var w = m.GetLength(0);
                var h = m.GetLength(1);
                var s = w == h;
                for (var x = 0; x < w && s; ++x)
                    for (var y = x; y < h && s; ++y)
                        s = m[x, y] == m[y, x];
                Console.WriteLine(s ? "Симметрична" : "Ne simmetrichna");
            }
        }
    }

    в каментах предложено не сканировать главную диагональ.. и это логично! )) .. ну собственно и просто делается
    spoiler
    using System;
    
    namespace simm_array
    {
        class Program
        {
            static void Main(string[] args)
            {
                var m = new int[,] { { 1, 1, 1 }, { 1, 1, 1 }, { 1, 1, 1 } };
                var w = m.GetLength(0);
                var h = m.GetLength(1);
                var s = w == h;
                for (var x = 0; x < w && s; ++x)
                    for (var y = x + 1; y < h && s; ++y)
                        s = m[x, y] == m[y, x];
                Console.WriteLine(s ? "Симметрична" : "Ne simmetrichna");
            }
        }
    }

    ну и немного функционального стиля+синтаксического сахара
    spoiler
    using System;
    
    namespace simm_array
    {
        static class Program
        {
            static void Main(string[] args)
            {
                var m = new int[,] { { 1, 1, 1 }, { 1, 1, 1 }, { 1, 1, 1 } };
                m.dump();
                m.isSymmetrical().report();
            }
    
            static bool isSymmetrical(this int[,] m)
            {
                var w = m.GetLength(0);
                var h = m.GetLength(1);
                var s = w == h;
                for (var x = 0; x < w && s; x++)
                    for (var y = x + 1; y < h && s; y++)
                        s = m[x, y] == m[y, x];
                return s;
            }
    
            static void dump(this int[,] m)
            {
                var w = m.GetLength(0);
                var h = m.GetLength(1);
                for (var x = 0; x < w; x++)
                {
                    for (var y = 0; y < h; y++)
                    {
                        Console.Write($"\t{m[x, y]}");
                    }
                    Console.WriteLine();
                }
                Console.WriteLine();
            }
    
            static void report(this bool s) => Console.WriteLine(s ? "Симметрична" : "Ne simmetrichna");
        }
    }

    выхлоп
    1P9RDij.png
    Ответ написан
    6 комментариев
  • Как обратиться к элементам структуры в c#?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    int n = pictureBox1.Height; // n строк изображения, m столбцов
    int m = n;
    да ну ладно... ?!!!!!!!!!... почему не
    int n = pictureBox1.Height; // n строк изображения, m столбцов
    int m = pictureBox1.Width;
    откуда вы знаете, что там точный квадрат?.. но это мелочи на фоне остального
    struct complex //комплексное число
            {
                public float Re;
                public float Im;
            }
    и
    furie[u][v].Re = ...
    furie[u][v].Im = ...
    ну тогда и пишите
    var furie = new complex[...
    именно complex .. !!!
    .. дальше.. какой размерности?...
    furie[u][v].Re = ...
    furie[u][v].Im = ...

    при этом
    for (u = 0; u < 20; u++)
        for (v = 0; v < 20; v++)

    вот эти 20точки то откуда? вы перебираете индексы от 0 до 19 по двум измерениям.. итог:
    var furie = new complex[20,20];
    ... но это ни чего не гарантирует в смысле какой то правильной работы. бог знает сколько еще у вас не явных косяков.. да верен ли код, который вы переводите?.. но заявленные ошибки компилятор пропустит.. ))
    Ответ написан
  • Как создать чат на разных платформах(андроид и десктоп)?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    Мы подумали про SignalR но так как участники чата не в одном платформе как то использования этой библиотеки будет не правильно
    с чего вдруг?
    помощь гугла SignalR java => https://docs.microsoft.com/ru-ru/aspnet/core/signa...

    ps работая на "чистом" сокете, думаю что пилить лобзиком придется даже больше. вопрос скорее что у вас на стороне сервера уже есть? или какие навыки глубже? если C#+ASP.Net, то сигналР будет разумным выбором
    Ответ написан
    2 комментария
  • Как запустить ASP.NET Core проект?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    Ответ написан
    Комментировать
  • Как считать из файла?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    1 - не очевидно что такое
    G

    2 - если надо получить числовые пары, без страховки от ошибок и тд, к примеру так
    using System;
    using System.IO;
    
    namespace t_text_read_and_parsing
    {
        class Program
        {
            static void Main(string[] args)
            {
                var lines = File.ReadAllLines("text.txt");
                foreach (var l in lines)
                {
                    var tokens = l.Split(' ');
                    if (int.TryParse(tokens[0], out var a) && int.TryParse(tokens[1], out var b))
                        Console.WriteLine($"\t{a}\t{b}");
                }
            }
        }
    }

    выхлоп
    zFGjEpZ.png
    Ответ написан