Leo59: Ja, jeder von ihnen schreibt eine Datei. Und?
und arbeiten nicht zusammen :-)
PS: Es ist unmöglich, die Quelle der unterirdischen Klopfzeichen ohne Quellen genauer zu bestimmen. Irgendwo liegt ein Fehler vor - korrigieren Sie ihn
Platz sparen und Wahrnehmung verbessern - in einer Funktion. Es funktioniert immer noch nicht.
void Fun_Select_2() // dSSd Выбор сочетаний из массивов dSe1_Bal_D и dSe1_Bal_W с Proba>67
{
// 1. УДАЛЯЕМ старые файлы// 2. ПЕРЕБИРАЕМ в поиске соответствия// 3. ПЕЧАТАЕМ найденное в файл// 1. УДАЛЯЕМ старые файлыif(use_Print_Rep_dSS == 1) // =0 -> Условие отключено, =1 -> Печатать в log файл Промежуточные отчёты (dSS)
{
LogName="Rep_dSSd "+EN; // (Interum Report) Название ЛОГА + Название ЭТОГО ЭКСПЕРТА, передаваемое в log файл// Если файл с таким именем существует, то удаляем его ...
ld=log_delete(LogName); // ФЛАГ log файла, удаляемого в директории "logs\\" if(ld==1)
Alert ("Старый файл dSSd УДАЛЁН");
LogName="Rep_dSSw "+EN; // (Interum Report) Название ЛОГА + Название ЭТОГО ЭКСПЕРТА, передаваемое в log файл// Если файл с таким именем существует, то удаляем его ...
ld=log_delete(LogName); // ФЛАГ log файла, удаляемого в директории "logs\\" if(ld==1)
Alert ("Старый файл dSSw УДАЛЁН");
}
// 2. ПЕРЕБИРАЕМ в поиске соответствия// Находим соответствие между [1]-"Num1 А" и [4]-"Num1 B" в массивах dSe1_Bal_D и dSe1_Bal_Wint t=0; // Техническая переменнаяint d=0; // Техническая переменнаяint w=0; // Техническая переменнаяint D=0; // Техническая переменнаяint W=0; // Техническая переменнаяint S=0; // Техническая переменная// Если есть соответствие тогда записываем её в массив dSSd[][90]
Count_dSSd=0; // "Обнуляем" Счётчик записей (строк) в массиве dSSd[][90]
Range_dSSd_one=0; // "Обнуляем" Размер первого измерения (число строк) с индексом_измерения=[0] массива dSSd[][90];
Range_dSSd_two=0; // "Обнуляем" Размер второго измерения (число столбцов) с индексом_измерения=[1] массива dSSd[][90];for(d=0, t=0; d<Range_dSe1_Bal_D_one; d++)
{
for(w=0; w<Range_dSe1_Bal_W_one; w++)
{
if( (dSe1_Bal_W[w][1]==dSe1_Bal_D[d][1]) && (dSe1_Bal_W[w][4]==dSe1_Bal_D[d][4]) )
{
Count_dSSd++; // Счётчик записей (строк) в массиве dSSd[][90]ArrayResize(dSSd, Count_dSSd, 200000); // Задайм новый размер массива с резервированием памяти на 100000 записей (строк) for(S=0, D=0; D<45; D++, S++)
dSSd[t][S] = dSe1_Bal_D[d][D]; // Значения строки массива dSe1_Bal_Dfor(S=45, W=0; W<45; W++, S++)
dSSd[t][S] = dSe1_Bal_W[w][W]; // Значения строки массива dSe1_Bal_W
t++; // Увеличили индекс массива dSSd на "1"
}
}
}
Range_dSSd_one = ArrayRange(dSSd, 0); // Размер первого измерения (число строк) с индексом_измерения=[0] массива dSSd[][90];
Range_dSSd_two = ArrayRange(dSSd, 1); // Размер второго измерения (число столбцов) с индексом_измерения=[1] массива dSSd[][90];// Если есть соответствие тогда записываем её в массив dSSw[][90]
Count_dSSw=0; // "Обнуляем" Счётчик записей (строк) в массиве dSSw[][90]
Range_dSSw_one=0; // "Обнуляем" Размер первого измерения (число строк) с индексом_измерения=[0] массива dSSw[][90];
Range_dSSw_two=0; // "Обнуляем" Размер второго измерения (число столбцов) с индексом_измерения=[1] массива dSSw[][90];for(d=0, t=0; d<Range_dSe1_Bal_D_one; d++)
{
for(w=0; w<Range_dSe1_Bal_W_one; w++)
{
if( (dSe1_Bal_W[w][1]==dSe1_Bal_D[d][1]) && (dSe1_Bal_W[w][4]==dSe1_Bal_D[d][4]) )
{
Count_dSSw++; // Счётчик записей (строк) в массиве dSSw[][90]ArrayResize(dSSw, Count_dSSw, 200000); // Задайм новый размер массива с резервированием памяти на 100000 записей (строк) for(S=0, W=0; W<45; W++, S++)
dSSw[t][S] = dSe1_Bal_W[w][W]; // Значения строки массива dSe1_Bal_Wfor(S=45, D=0; D<45; D++, S++)
dSSw[t][S] = dSe1_Bal_D[d][D]; // Значения строки массива dSe1_Bal_D
t++; // Увеличили индекс массива dSSw на "1"
}
}
}
Range_dSSw_one = ArrayRange(dSSw, 0); // Размер первого измерения (число строк) с индексом_измерения=[0] массива dSSw[][90];
Range_dSSw_two = ArrayRange(dSSw, 1); // Размер второго измерения (число столбцов) с индексом_измерения=[1] массива dSSw[][90];// 3. ПЕЧАТАЕМ найденное в файлint LH_Rep=0; // Хэндл log файла, открытого в директории "logs\\" if(use_Print_Rep_dSS == 1) // =0 -> Условие отключено, =1 -> Печатать в log файл Промежуточные отчёты (dSS)
{
if(Count_dSSd>0)
{
LogName="Rep_dSSd "+EN; // (Interum Report) Название ЛОГА + Название ЭТОГО ЭКСПЕРТА, передаваемое в log файл
LH_Rep=log_open(LogName); // Хэндл log файла, открытого в директории "logs\\"
Fun_Rep_mass90(LH_Rep, dSSd, Count_dSSd); // Функция F 135 Запись Массива mass90[][90] в Промежуточный отчёт в *.csv файл
log_close(LH_Rep); // Закрываем лог-файл этого экспертаAlert ("Записан ОТЧЁТ ", LogName);
}
if(Count_dSSw>0)
{
LogName="Rep_dSSw "+EN; // (Interum Report) Название ЛОГА + Название ЭТОГО ЭКСПЕРТА, передаваемое в log файл
LH_Rep=log_open(LogName); // Хэндл log файла, открытого в директории "logs\\"
Fun_Rep_mass90(LH_Rep, dSSw, Count_dSSw); // Функция F 135 Запись Массива mass90[][90] в Промежуточный отчёт в *.csv файл
log_close(LH_Rep); // Закрываем лог-файл этого экспертаAlert ("Записан ОТЧЁТ ", LogName);
}
}
}
Leo59: Platz sparen und Wahrnehmung verbessern - in einer Funktion. Es funktioniert immer noch nicht.
für die Zukunft - wenn Sie das Ergebnis einer Funktion benötigen (zumindest die funktionierende/nicht funktionierende), machen Sie sie nicht ungültig. Bei oberflächlicher Betrachtung ist es schwer festzustellen, dass es ein Kriterium für "ausgelöst" gibt - es ist nichtig, egal wie man wirft, alles ist gut.
über die Rechte des Debuggers:
Sie haben eine Reihe von globalen Variablen Count_XXX, Range_XXX, die Sie konvertieren (plus dSSxx[] Arrays), verwenden Sie zu entscheiden, ob zu protokollieren oder nicht und dann übergeben Sie irgendwo, entweder durch Verweis oder durch Wert...
Offensichtlich ist etwas mit der Neuberechnung nicht in Ordnung - Count_dSS erhält 0, wenn Sie es erneut aufrufen. Drucken kann helfen, es herauszufinden, oder Haltepunkte und beobachten.
für die Zukunft - wenn Sie das Ergebnis einer Funktion benötigen (ob sie nun funktioniert hat oder nicht), machen Sie sie nicht ungültig. Auf den ersten Blick ist es schwer zu bestimmen, was das Kriterium für "ausgelöst" ist - es ist nichtig, egal wie man es wirft, alles ist gut.
über die Rechte des Debuggers:
Sie haben eine Reihe von globalen Variablen Count_XXX, Range_XXX, die Sie konvertieren (plus Arrays dSSxx[]), basierend auf ihnen Sie entscheiden, ob zu protokollieren oder nicht und dann irgendwo entweder durch Verweis oder durch Wert übergeben...
Offensichtlich ist etwas mit der Neuberechnung nicht in Ordnung - Count_dSS erhält 0, wenn Sie es erneut aufrufen. Drucken kann helfen, es herauszufinden, oder Haltepunkte und beobachten.
Welchen Rückruf meinen Sie? Eine vereinfachte Version:
double dSSd[][90]; // Динамический Массив SelectSort соответствия пары массива dSe1_Bal_W паре массива dSe1_Bal_Dint Count_dSSd=0; // Счётчик записей (строк) в массиве dSSd[][90]int Range_dSSd_one=0; // = ArrayRange(dSS, 0); Размер первого измерения (число строк) с индексом_измерения=[0] массива dSSd[][90];int Range_dSSd_two=0; // = ArrayRange(dSS, 1); Размер второго измерения (число столбцов) с индексом_измерения=[1] массива dSSd[][90];double dSSw[][90]; // Динамический Массив SelectSort соответствия пары массива dSe1_Bal_W паре массива dSe1_Bal_Dint Count_dSSw=0; // Счётчик записей (строк) в массиве dSSw[][90]int Range_dSSw_one=0; // = ArrayRange(dSS, 0); Размер первого измерения (число строк) с индексом_измерения=[0] массива dSSw[][90];int Range_dSSw_two=0; // = ArrayRange(dSS, 1); Размер второго измерения (число столбцов) с индексом_измерения=[1] массива dSSw[][90];int init()
{
ArrayResize(dSSd, 200000, 200000); // Задаём новый размер массива с резервированием памяти на 200000 записей (строк) ArrayResize(dSSw, 200000, 200000); // Задаём новый размер массива с резервированием памяти на 200000 записей (строк)
Fun_Select_2();
return(0);
}
void Fun_Select_2()
{
// Находим соответствие между [1]-"Num1 А" и [4]-"Num1 B" в массивах dSe1_Bal_D и dSe1_Bal_Wint t=0; // Техническая переменнаяint d=0; // Техническая переменнаяint w=0; // Техническая переменнаяint D=0; // Техническая переменнаяint W=0; // Техническая переменнаяint S=0; // Техническая переменная// Если есть соответствие тогда записываем её в массив dSSd[][90]for(d=0, t=0; d<Range_dSe1_Bal_D_one; d++)
{
for(w=0; w<Range_dSe1_Bal_W_one; w++)
{
if( (dSe1_Bal_W[w][1]==dSe1_Bal_D[d][1]) && (dSe1_Bal_W[w][4]==dSe1_Bal_D[d][4]) )
{
Count_dSSd++; // Счётчик записей (строк) в массиве dSSd[][90]ArrayResize(dSSd, Count_dSSd, 200000); // Задаём новый размер массива с резервированием памяти на 100000 записей (строк) for(S=0, D=0; D<45; D++, S++)
dSSd[t][S] = dSe1_Bal_D[d][D]; // Значения строки массива dSe1_Bal_Dfor(S=45, W=0; W<45; W++, S++)
dSSd[t][S] = dSe1_Bal_W[w][W]; // Значения строки массива dSe1_Bal_W
t++; // Увеличили индекс массива dSSd на "1"
}
}
}
Range_dSSd_one = ArrayRange(dSSd, 0); // Размер первого измерения (число строк) с индексом_измерения=[0] массива dSSd[][90];
Range_dSSd_two = ArrayRange(dSSd, 1); // Размер второго измерения (число столбцов) с индексом_измерения=[1] массива dSSd[][90];// Если есть соответствие тогда записываем её в массив dSSw[][90]for(d=0, t=0; d<Range_dSe1_Bal_D_one; d++)
{
for(w=0; w<Range_dSe1_Bal_W_one; w++)
{
if( (dSe1_Bal_W[w][1]==dSe1_Bal_D[d][1]) && (dSe1_Bal_W[w][4]==dSe1_Bal_D[d][4]) )
{
Count_dSSw++; // Счётчик записей (строк) в массиве dSSw[][90]ArrayResize(dSSw, Count_dSSw, 200000); // Задаём новый размер массива с резервированием памяти на 100000 записей (строк) for(S=0, W=0; W<45; W++, S++)
dSSw[t][S] = dSe1_Bal_W[w][W]; // Значения строки массива dSe1_Bal_Wfor(S=45, D=0; D<45; D++, S++)
dSSw[t][S] = dSe1_Bal_D[d][D]; // Значения строки массива dSe1_Bal_D
t++; // Увеличили индекс массива dSSw на "1"
}
}
}
Range_dSSw_one = ArrayRange(dSSw, 0); // Размер первого измерения (число строк) с индексом_измерения=[0] массива dSSw[][90];
Range_dSSw_two = ArrayRange(dSSw, 1); // Размер второго измерения (число столбцов) с индексом_измерения=[1] массива dSSw[][90];
}
// Получаенный результат:// Count_dSSd = 280// Range_dSSd_one = 280// Range_dSSd_two = 90// Массив dSSd заполнен правильными значениями// Count_dSSw = 280// Range_dSSw_one = 0// Range_dSSw_two = 90// Массив dSSw заполнен "0"
// Das Problem stellt sich im Wesentlichen wie folgt dar: // Es gibt zwei dynamische Arrays A[][2] und B[][2] // Wir suchen nach Übereinstimmungen mit dem ersten Dimensionsindex "0". // Array A Array B // 31 25 19 66 // 44 15 62 30 // 62 47 54 71 // 31 94 // Wir wollen bekommen: // Array dSSd[][4] Array dSSw[][4] // 31 25 31 94 31 94 31 25 // 62 47 62 30 62 30 62 47
Leo59: Welchen Rückruf haben Sie im Sinn? Eine vereinfachte Version:
Ich beziehe mich auf eine Funktion, die der ersten ähnlich ist (die im Detail unterschiedlich sein kann). Sie haben die gleiche Frage gestellt - warum funktionieren diese Funktionen getrennt, aber eine nach der anderen (unabhängig von der Reihenfolge) nicht. Genauer gesagt, nur die erste Funktion funktioniert und zeichnet etwas auf.
nun - den globalen Zustand ficken, d.h. der erste Aufruf der ersten dieser Funktionen hat entweder die globalen Variablen oder den Inhalt der Arrays verändert. Warum? Sie sollten es besser wissen, warum sollte es sich beim Schreiben in eine Datei ändern :-) Ehrlich - Durchbruch
Range_dSe1_Bal_W_one
Mir zum Beispiel fällt es schwer und ich zögere. Besorgen Sie sich einen Debugger oder stellen Sie schon jetzt Drucker an allen verdächtigen Stellen auf. Sie verstehen die Logik der Namensgebung und haben eine Vorstellung davon, wie sie funktionieren sollte (was nicht mit der Realität übereinstimmt :-) )
PS/ aus der Erklärung, was in der Eingabe und was draußen ist, sehe ich, dass anstelle von zwei Arrays dSSx[][4] genug ist und ein dSS[][3] :-)
Ich beziehe mich auf eine Funktion, die der ersten ähnlich ist (die im Detail unterschiedlich sein kann). Sie haben die gleiche Frage gestellt - warum funktionieren diese Funktionen getrennt, aber eine nach der anderen (unabhängig von der Reihenfolge) nicht. Genauer gesagt, nur die erste Funktion funktioniert und zeichnet etwas auf.
Also - der globale Zustand ist gefickt, d.h. der erste Aufruf der ersten dieser Funktionen hat entweder globale Variablen oder Inhalte von Arrays verändert. Vielleicht wissen Sie besser, warum sie es beim Schreiben in die Datei ändern sollten :-). Ehrlich - Durchbruch
Mir zum Beispiel fällt es schwer und ich zögere. Besorgen Sie sich einen Debugger oder stellen Sie schon jetzt Drucker an allen verdächtigen Stellen auf. Sie verstehen die Logik der Namensgebung und haben eine Vorstellung davon, wie sie funktionieren sollte (was nicht mit der Realität übereinstimmt :-) )
PS/ aus der Erklärung, was in der Eingabe und was draußen ist, sehe ich, dass anstelle von zwei Arrays dSSx[][4] genug ist und ein dSS[][3] :-)
Maxim, danke, dass Sie nicht gleichgültig sind. Das Problem ist gelöst. Es stellte sich heraus, dass es sich um eine Frage des unzureichenden Speichers handelte.
Können Sie mir sagen, warum dies der Fall sein könnte? :
Fun_1() und Fun_2() sind ähnlich.
Können Sie mir bitte sagen, was die Ursache dafür sein könnte? :
Fun_1() und Fun_2() sind ähnlich.
akademisch - die Funktionen sind nicht rein und verändern den globalen Zustand.
kurz - beide Funktionen lesen und schreiben eine globale Variable oder Datei.
akademisch - die Funktionen sind nicht rein und verändern den globalen Zustand.
kurz gesagt - beide Funktionen lesen und schreiben eine globale Variable oder Datei.
Ja, jeder von ihnen schreibt eine Datei. Und?
und arbeiten nicht zusammen :-)
PS: Es ist unmöglich, die Quelle der unterirdischen Klopfzeichen ohne Quellen genauer zu bestimmen. Irgendwo liegt ein Fehler vor - korrigieren Sie ihn
Platz sparen und Wahrnehmung verbessern - in einer Funktion. Es funktioniert immer noch nicht.
für die Zukunft - wenn Sie das Ergebnis einer Funktion benötigen (zumindest die funktionierende/nicht funktionierende), machen Sie sie nicht ungültig. Bei oberflächlicher Betrachtung ist es schwer festzustellen, dass es ein Kriterium für "ausgelöst" gibt - es ist nichtig, egal wie man wirft, alles ist gut.
über die Rechte des Debuggers:
Sie haben eine Reihe von globalen Variablen Count_XXX, Range_XXX, die Sie konvertieren (plus dSSxx[] Arrays), verwenden Sie zu entscheiden, ob zu protokollieren oder nicht und dann übergeben Sie irgendwo, entweder durch Verweis oder durch Wert...
Offensichtlich ist etwas mit der Neuberechnung nicht in Ordnung - Count_dSS erhält 0, wenn Sie es erneut aufrufen. Drucken kann helfen, es herauszufinden, oder Haltepunkte und beobachten.
für die Zukunft - wenn Sie das Ergebnis einer Funktion benötigen (ob sie nun funktioniert hat oder nicht), machen Sie sie nicht ungültig. Auf den ersten Blick ist es schwer zu bestimmen, was das Kriterium für "ausgelöst" ist - es ist nichtig, egal wie man es wirft, alles ist gut.
über die Rechte des Debuggers:
Sie haben eine Reihe von globalen Variablen Count_XXX, Range_XXX, die Sie konvertieren (plus Arrays dSSxx[]), basierend auf ihnen Sie entscheiden, ob zu protokollieren oder nicht und dann irgendwo entweder durch Verweis oder durch Wert übergeben...
Offensichtlich ist etwas mit der Neuberechnung nicht in Ordnung - Count_dSS erhält 0, wenn Sie es erneut aufrufen. Drucken kann helfen, es herauszufinden, oder Haltepunkte und beobachten.
Eine vereinfachte Version:
// Es gibt zwei dynamische Arrays A[][2] und B[][2]
// Wir suchen nach Übereinstimmungen mit dem ersten Dimensionsindex "0".
// Array A Array B
// 31 25 19 66
// 44 15 62 30
// 62 47 54 71
// 31 94
// Wir wollen bekommen:
// Array dSSd[][4] Array dSSw[][4]
// 31 25 31 94 31 94 31 25
// 62 47 62 30 62 30 62 47
Welchen Rückruf haben Sie im Sinn?
Eine vereinfachte Version:
Ich beziehe mich auf eine Funktion, die der ersten ähnlich ist (die im Detail unterschiedlich sein kann). Sie haben die gleiche Frage gestellt - warum funktionieren diese Funktionen getrennt, aber eine nach der anderen (unabhängig von der Reihenfolge) nicht. Genauer gesagt, nur die erste Funktion funktioniert und zeichnet etwas auf.
nun - den globalen Zustand ficken, d.h. der erste Aufruf der ersten dieser Funktionen hat entweder die globalen Variablen oder den Inhalt der Arrays verändert. Warum? Sie sollten es besser wissen, warum sollte es sich beim Schreiben in eine Datei ändern :-) Ehrlich - Durchbruch
Mir zum Beispiel fällt es schwer und ich zögere. Besorgen Sie sich einen Debugger oder stellen Sie schon jetzt Drucker an allen verdächtigen Stellen auf. Sie verstehen die Logik der Namensgebung und haben eine Vorstellung davon, wie sie funktionieren sollte (was nicht mit der Realität übereinstimmt :-) )
PS/ aus der Erklärung, was in der Eingabe und was draußen ist, sehe ich, dass anstelle von zwei Arrays dSSx[][4] genug ist und ein dSS[][3] :-)
Ich beziehe mich auf eine Funktion, die der ersten ähnlich ist (die im Detail unterschiedlich sein kann). Sie haben die gleiche Frage gestellt - warum funktionieren diese Funktionen getrennt, aber eine nach der anderen (unabhängig von der Reihenfolge) nicht. Genauer gesagt, nur die erste Funktion funktioniert und zeichnet etwas auf.
Also - der globale Zustand ist gefickt, d.h. der erste Aufruf der ersten dieser Funktionen hat entweder globale Variablen oder Inhalte von Arrays verändert. Vielleicht wissen Sie besser, warum sie es beim Schreiben in die Datei ändern sollten :-). Ehrlich - Durchbruch
Mir zum Beispiel fällt es schwer und ich zögere. Besorgen Sie sich einen Debugger oder stellen Sie schon jetzt Drucker an allen verdächtigen Stellen auf. Sie verstehen die Logik der Namensgebung und haben eine Vorstellung davon, wie sie funktionieren sollte (was nicht mit der Realität übereinstimmt :-) )
PS/ aus der Erklärung, was in der Eingabe und was draußen ist, sehe ich, dass anstelle von zwei Arrays dSSx[][4] genug ist und ein dSS[][3] :-)