Помощь новичкам


#2464

Для TryRead есть функция с prompt?

UPD: Видимо, её нет, поэтому я предложил её тут: Замечания и предложения.

Ну это (см. приложенное изображение) действительно дезинформация. Должно же быть “41мин”. Даже перезагрузка страницы с форумом не помогает. И так, видимо, везде, где должно быть x1мин (где x=2 или x=3 или x=4 или x=5 (но при x=5, видимо, я не смогу проверить, так как раньше этого “yмин” превращается в “1ч”)).

Что значит “->”? Это оператор?

Насчёт панели навигации по коду я понял, но в окне “Просмотр выражений” у меня всегда пусто, а “Окно дизассемблирования” для меня — тёмный лес. Так зачем тогда нужны окна “Просмотр выражений” и “Окно дизассемблирования”?


#2468

http://pascalabc.net/downloads/Presentations/Tutorials/ProcFuncLambdas.pdf

У цитат есть кнопки справа сверху, по которым можно смотреть оригинальное сообщение. И когда цитата изменена - 1 кнопки нет.

Вообще расчёт идёт на отсутствие неадекватов. Защищаться от того что никогда не было и вряд ли будет - плохая идея.


#2469

Про цитаты понятно (кроме того,

).


#2470

Не представляю.

Ну, у вас есть предпросмотр справа, тестируйте.


#2471

Да, оператор. Используется в лямбда-выражениях. Ну ещё им можно представлять типы делегатов (T1->T2)


#2473

Не хочу долго тестировать, но, видимо, если full = true, то это значит “сообщение процитировано полностью, нет нужды в показе кнопки “показать полностью” справа сверху от цитаты.”

Значение full по умолчанию (если не указано) — false.

Судя по эксперименту, это утверждение неверно, т. е. всё зависит от значения переменной true в заголовке перед цитатой. Если кнопку оставить — просто будет легче сравнить и, следовательно, увидеть изменение, если слова в цитате изменены.


#2474

Теперь остались только нижеприведённые вопросы:

Кстати, мой аватар в цитате цитаты становится квадратным (см. выше).

За что отвечают опции “MainForm*” и “Dock*Portion” в “C:\PABCWork.NET\PascalABCNET.ini”?


#2475

Щёлкните и введите простое выражение при трассировке


#2476

А надо именно много и долго. Так получите на много больше информации чем то, что вам могут пересказать, даже если бы кто то и знал ответы на все ваши интересные, но жесть какие многочисленные вопросы.


#2477

Теперь понятно, но зачем это может пригодиться?

Старые оставшиеся вопросы

Зачем нужно “окно дизассемблирования”?

…при вводе в, как мне показалось, любую числовую переменную (даже типа BigInteger) в скомпилированной версии программы (в отличие от теста в самом паскале), максимальное количество цифр в числе = 254 (дальше просто не воспринимает нажатия клавиш с цифрами). Почему? (Как-то подозрительно близко к 2^8…)

За что отвечают опции “MainForm*”, “MainFormMaximized” и “Dock*Portion” в “C:\PABCWork.NET\PascalABCNET.ini”? Всё, что я выяснил: DockBottomPortion — высота нижней панели, DockLeftPortion — ширина панели с образцами кода (появляется слева). А что тогда появляется справа?


#2478

Похоже, это ограничение ввода консоли. Через Shift+F9 тоже воспроизводится. @Admin вообще это вроде как даже немного обходится:


#2479

Есть ли в паскале аналог await для работы с асинхронным потоком


#2480

await это сахар. Используйте методы Task-ов напрямую.

Ну, в паскале этот сахар вроде как тоже должен появится, когда то…


#2481

А можно пример, как мне дождаться, когда асинхронный поток завершится.


#2482

Асинхронный поток это Thread. Task-и (задачи) работают вообще по другому принципу.

uses System.Threading.Tasks;

begin
  var t := new Task<integer>(()->
  begin
    Sleep(1000);
    Result := 5;
  end);
  t.Start;
  t.GetAwaiter.GetResult.Println;
end.

#2483

Разобрался, запилил код через

task.Status = System.Threading.Tasks.TaskStatus.RanToCompletion;


#2484

Это вы хватили. Task - всего лишь обёртка над потоками.


#2485

Задачи делают на много больше чем потоки. И правила обращения с ними немного отличаются.

К примеру у потоков такое не зависнет, а вот с задачами так нельзя:

begin
  var ev := new System.Threading.ManualResetEvent(false);
  var tsks := ArrGen(System.Environment.ProcessorCount+1,i->
    System.Threading.Tasks.Task.Run(()->
    begin
      if i=System.Environment.ProcessorCount then
        ev.Set else
        ev.WaitOne;
      lock output do Writeln(i);
    end)
  );
  Readln;
end.

Всё дело в том, что задачи работают уже на заранее созданных потоках, вместо создания новых. Это позволяет экономить на времени создания потоков, зато это не полная мультизадачность, где выполнение всё время переключается между всеми задачами. Даже задачи, поток которых находится в состоянии ожидания, как при ожидание системного события (в том числе при lock), не могут отдать время процессора другим задачам.

Нет, это ужасно. Кроме того что вы загружается процессор непонятно чем (.GetAwaiter.GetResult и .Wait ставят ожидающий поток на паузу). Вы ещё и не учитываете ситуацию где во время выполнения задачи произошла ошибка.


#2486

Имеется два текстовых файла ~по 100МБ. Ф1 содержит три колонки разделенные табуляцией:

Аааа	111	123
Бсвы	211	466
Аууу	100	222
Эауы	222	222
...

Ф2 содержит две колонки разделенные табуляцией:

Бауа	66
Аааа	300
Вуууу	222
Аваа	222
...

Нужно составить текстовый файл Ф3 на четыре колонки, который содержит только те записи, у который совпадают значения первых колонок (ключ). В данном случае, это

Аааа 111 123 300

Пока что решаем в Exel, а вот какие средства .Net лучше подходят для простого решения ?


#2487
type
  TableRow = class
    items: array of string;
    
    constructor(l: string) :=
    self.items := l.ToWords;
    
    static function ReadFile(fname: string) :=
    ReadLines(fname).Select(l->new TableRow(l));
    
    static function Compatible(r1,r2: TableRow) :=
    r1.items[0] = r2.items[0];
    
  end;
  
begin
  var f2 := TableRow.ReadFile('2.txt').ToArray;
  var f3 := System.IO.File.CreateText('3.txt');
  
  foreach var r1 in TableRow.ReadFile('1.txt') do
  begin
    var r2 := f2.Find(r2->TableRow.Compatible(r1,r2));
    if r2=nil then exit;
    foreach var v in r1.items + r2.items.Skip(1) do
    begin
      f3.Write(v);
      f3.Write(' ');
    end;
    f3.WriteLine;
  end;
  
  f3.Close;
end.