GotAI.NET
Форум: Проблемы искусственного интеллекта
Регистрация
|
Вход
Все темы
|
Новая тема
Стр.3 (15)
<<
< Пред.
|
След. >
>>
Поиск:
Автор
Тема: На: Как получить значения множественных(точками) аргументов функции в Си?
гость
62.212.239.*
На: Как получить значения множественных(точками) аргументов функции в Си?
Добавлено: 29 сен 21 10:06
Цитата:
Автор: гость
Это
"правильный" подход
, с позиции ООП,
С чего это вы решили что это правильный подход??? Ваше решение не то что не правильное, оно вообще никакое, это даже не нулевой уровень, минус 100500! За такой код на реальном проекте могут прямо на рабочем месте отодрать в рот и задницу всем коллективом.
Правильный подход предполагает применение всех технологий и фреймворков, с акцентом на самые современные, в каждом фрагменте код отражать пестрить темплитами, ООП(минимум 3-5 уровней вложенности), конечно переопределить все операторы во всех классах, везде должным быть трайкетчи и разумеется переиначить нужно все стандартные типы тайпдефом на понятные вам названия. Сразу нужно готовить асинхронный версии классов и функций, вообще ко всему заранее нужно приготовиться, обязательно буст заюзать(всем должно быть понятно что вы умеете с ним работать).
Худо бедно, но профессиональный код табличного парсера здесь
, но я бы не рискнул такое чакапить на гит, могут оштрафовать как минимум, сыроватый код, хотя дядя корпел над ним 3 года.
[
Ответ
][
Цитата
]
гость
178.176.212.*
На: Как получить значения множественных(точками) аргументов функции в Си?
Добавлено: 29 сен 21 11:05
ну вот нашел что-то, но он неидеальный, мягко говоря, его нужно приспособить для разных форматов csv и прочее. А накуй он вам нужен, этот парсер?
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
float duration; clock_t start, finish;
AnsiString path = Edit1->Text;
int flen=0;
int i=0,j=0,i1=0;
int a=1;
int b=0;
int max = 20;
int m=0;
int s=0;
int f =0;
char *vsp = new char [max]; for (i = 0; i < max; i++) { vsp[i] = 100;}
start = clock();
//==================================================================
FILE *F;
F = fopen(path.c_str(),"r");
flen = filelength(fileno(F));
char *String = new char [flen];
fread ( &String[0], 1, flen, F);
fclose(F);
//===================================================================
i=0; while (String[i]!=10) { if (String[i]==59) {a++;} i++; }
for(i=0; i < flen; i++)
{
if (String[i]==59) { s++;}
if (String[i]==10) {if(s!=a-1){goto end2;} s=0; b++; }
i1++;
}
end2:
AnsiString **mass = new AnsiString* [a];
for (i = 0; i < a; i++) { mass[i] = new AnsiString[b]; }
for(i=0; i < i1; i++)
{
vsp[m] = String[i];
if (String[i]==59) { vsp[m]=0; m=-1; mass[s][f] = AnsiString(vsp); s++; }
if (String[i]==10) { vsp[m]=0; mass[s][f] = AnsiString(vsp); s=0; m=-1; f++; }
m++;
}
delete [] String;
delete [] vsp;
for (i = 0; i < a; i++) delete[]mass[i]; delete[]mass;
finish = clock();
duration = (float)(finish - start) / CLOCKS_PER_SEC;
ListBox1->Items->Add("размер файла " + IntToStr(flen));
ListBox1->Items->Add("количество столбцов " + IntToStr(a));
ListBox1->Items->Add("количество строк " + IntToStr(b));
ListBox1->Items->Add("время выполнения программы " + FloatToStr(duration));
}
[
Ответ
][
Цитата
]
гость
62.212.239.*
На: Как получить значения множественных(точками) аргументов функции в Си?
Добавлено: 29 сен 21 15:50
Цитата:
Автор: гость
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
}
АААААААА-ХА-ХА-ХА! Капец! ЛОЛ
Ну вы даёте! Хорошо что хоть имени своего не засветили! Вам писать код ПРОТИВОПОКАЗАНО!!! Метите лучше дворы, или водите трактор.
[
Ответ
][
Цитата
]
гость
178.176.212.*
На: Как получить значения множественных(точками) аргументов функции в Си?
Добавлено: 29 сен 21 21:36
Цитата:
Автор: гость
Хорошо что хоть имени своего не засветили!
хорошо, что вы своего кода здесь не засветили..
а то мы бы умерли от смеха. Говорят, хакер воид скоропостижно скончался, просматривая код сторожа rrr3, от смеха.
[
Ответ
][
Цитата
]
гость
178.176.212.*
На: Как получить значения множественных(точками) аргументов функции в Си?
Добавлено: 29 сен 21 21:40
Цитата:
Автор: гость
Правильный подход предполагает применение всех технологий и фреймворков,
правильный подход предполагает быстрое и правильное функционирование проги, а не тот бред, что вы пишете.
А судя по продуктам, нормального кода никто не пишет, все продукты гавно, как в плане производительности, так в и в плане функциональности.
[
Ответ
][
Цитата
]
гость
62.212.239.*
На: Как получить значения множественных(точками) аргументов функции в Си?
Добавлено: 30 сен 21 4:28
Цитата:
Автор: гость
хорошо, что вы своего кода здесь не засветили..
а то мы бы умерли от смеха. Говорят, хакер воид скоропостижно скончался, просматривая код сторожа rrr3, от смеха.
Я вам привел пример кода, как надо писать в первом приближении. Свой код выкладывать не представляю возможным, так как я никогда не писал код сам для себя, только в команде, только как ЗАРАНЕЕ ПРОДУМАННЫЙ элемент общего процесса. Сейчас вообще никто не пишет код самостоятельно, по наитию, да ещё и всё самому целиком. Нормальный парсер — это командная работа, нужны разные спецы, кто хорошо работает с файловой системой, с асинхронным кодом и тд.
ЗЫ с хакерами и сторожами не знаком, не в курсе кто от чего умер, впрочем туда им и дорога, хакеры это как правили интроверты, в нормальных коллективах таких нет, так как берут в первую очередь исходя из наличия социально-эмоционального интеллекта и хорошей памяти, а не интеллекта логического и всяких способностей.
[
Ответ
][
Цитата
]
гость
159.89.174.*
На: Как получить значения множественных(точками) аргументов функции в Си?
Добавлено: 30 сен 21 6:37
Цитата:
Автор: гость 62.212.239.*
Худо бедно, но профессиональный код табличного парсера здесь
Спасибо, но к сожалению этот "профессиональный" код работает не на много быстрее чем мой "никакой", прикол в том что на питоне персер читает одногиговый файл за 12 сек, а ваш за 5 мин.
Цитата:
Автор: гость 178.176.212.*
ну вот нашел что-то, но он неидеальный, мягко говоря, его нужно приспособить для разных форматов csv и прочее. А накуй он вам нужен, этот парсер?
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
float duration; clock_t start, finish;
AnsiString path = Edit1->Text;
int flen=0;
int i=0,j=0,i1=0;
int a=1;
int b=0;
int max = 20;
int m=0;
int s=0;
int f =0;
char *vsp = new char [max]; for (i = 0; i < max; i++) { vsp[i] = 100;}
start = clock();
//==================================================================
FILE *F;
F = fopen(path.c_str(),"r");
flen = filelength(fileno(F));
char *String = new char [flen];
fread ( &String[0], 1, flen, F);
fclose(F);
//===================================================================
i=0; while (String[i]!=10) { if (String[i]==59) {a++;} i++; }
for(i=0; i < flen; i++)
{
if (String[i]==59) { s++;}
if (String[i]==10) {if(s!=a-1){goto end2;} s=0; b++; }
i1++;
}
end2:
AnsiString **mass = new AnsiString* [a];
for (i = 0; i < a; i++) { mass[i] = new AnsiString[b]; }
for(i=0; i < i1; i++)
{
vsp[m] = String[i];
if (String[i]==59) { vsp[m]=0; m=-1; mass[s][f] = AnsiString(vsp); s++; }
if (String[i]==10) { vsp[m]=0; mass[s][f] = AnsiString(vsp); s=0; m=-1; f++; }
m++;
}
delete [] String;
delete [] vsp;
for (i = 0; i < a; i++) delete[]mass[i]; delete[]mass;
finish = clock();
duration = (float)(finish - start) / CLOCKS_PER_SEC;
ListBox1->Items->Add("размер файла " + IntToStr(flen));
ListBox1->Items->Add("количество столбцов " + IntToStr(a));
ListBox1->Items->Add("количество строк " + IntToStr(b));
ListBox1->Items->Add("время выполнения программы " + FloatToStr(duration));
}
Спасибо, но пока не смог почистить ваш код до рабочего состояния от gui и не стандартных элементов, толком оценить поэтому не могу.
Парсер мне нужен для работы с ML, датасеты как правило в csv.
[
Ответ
][
Цитата
]
Дмитрий Стволовой
Сообщений: 364
На: Как получить значения множественных(точками) аргументов функции в Си?
Добавлено: 30 сен 21 7:15
Цитата:
Автор: гость
Спасибо, но к сожалению этот "профессиональный" код работает не на много быстрее чем мой "никакой", прикол в том что на питоне персер читает одногиговый файл за 12 сек, а ваш за 5 мин.
Спасибо, но пока не смог почистить ваш код до рабочего состояния от gui и не стандартных элементов, толком оценить поэтому не могу.
Парсер мне нужен для работы с ML, датасеты как правило в csv.
Файл в студию, просто интересно почему так долго у вас.
PS питон сам такие действия не делает, скорей всего это функции на Си или даже асемблере
[
Ответ
][
Цитата
]
гость
45.12.134.*
На: Как получить значения множественных(точками) аргументов функции в Си?
Добавлено: 30 сен 21 8:44
Виктор Генадьевич Царегородцев пишет на асемблере "узкие места"
[
Ответ
][
Цитата
]
гость
178.176.212.*
На: Как получить значения множественных(точками) аргументов функции в Си?
Добавлено: 30 сен 21 8:51
Цитата:
Автор: гость
Спасибо, но пока не смог почистить ваш код до рабочего состояния от gui и не стандартных элементов, толком оценить поэтому не могу.
это я на C++ Builder написал, есть такая среда, я там развлекаюсь иногда со всякой хернёй. Мне ваш код тоже немного непонятен, векторы не люблю, он у вас полинейно как-то считывает из файла? Если это так, то не удивительно, что медленно работает. Я считал сразу весь файл целиком в массив char, и дальше работал только с оперативкой. Причём обратите внимание, в csv в ячейке в общем случае не число, а текст, или число., то есть тип double не подойдет.
[
Ответ
][
Цитата
]
гость
178.176.212.*
На: Как получить значения множественных(точками) аргументов функции в Си?
Добавлено: 30 сен 21 9:27
сейчас запустил код на всякий случай, на файле 20 мб выполняется 600 миллисекунд, то есть гиг прочитает ориентировочно за 30 секунд. Но, блядь, не за 12, как на пайтоне
)
[
Ответ
][
Цитата
]
гость
178.176.212.*
На: Как получить значения множественных(точками) аргументов функции в Си?
Добавлено: 01 окт 21 4:42
сейчас посидел, переделал для целых чисел улучшил результат в пять раз, теперь 100 миллисекунд:
[
Ответ
][
Цитата
]
гость
159.89.174.*
На: Как получить значения множественных(точками) аргументов функции в Си?
+1
Добавлено: 01 окт 21 7:28
Цитата:
Автор: Дмитрий Стволовой
Файл в студию, просто интересно почему так долго у вас.
PS питон сам такие действия не делает, скорей всего это функции на Си или даже асемблере
Я понимаю, но мне нужно на Си.
Файл датасета здесь:
Цитата:
Автор: гость
это я на C++ Builder написал, есть такая среда, я там развлекаюсь иногда со всякой хернёй. Мне ваш код тоже немного непонятен, векторы не люблю, он у вас полинейно как-то считывает из файла? Если это так, то не удивительно, что медленно работает. Я считал сразу весь файл целиком в массив char, и дальше работал только с оперативкой. Причём обратите внимание, в csv в ячейке в общем случае не число, а текст, или число., то есть тип double не подойдет.
Это код из тутора какогото учебного. Я
попробовал ещё этот парсер
результат на много лучше, 24 секунды(
файл inputs.csv
).
Если не трудно уберите пожалуйста не стандартные типы данных чтобы была чистая функция или метод функции, вида float** parser(const char* path), хотя можно дабл или вектор векторов не суть.
[
Ответ
][
Цитата
]
гость
178.176.212.*
На: Как получить значения множественных(точками) аргументов функции в Си?
Добавлено: 01 окт 21 9:33
Цитата:
Автор: гость
Если не трудно уберите пожалуйста не стандартные типы данных чтобы была чистая функция или метод функции, вида float** parser(const char* path), хотя можно дабл или вектор векторов не суть. .
памяти не хватает, вашу "табличку" прочесть, 100*1300000 ячеек, пишет out of memory.
) Там еще и заголовок есть, насколько я понял, первая строка, ее читать не нужно.
вам мой код особо не поможет, я для целых чисел сделал, имея разряды числа в массиве char, я "сконструировал" из них целое число, тем самым убрав преобразование типов, которое отнимает много времени. а у вас с плавающей запятой, хрен его знает, можно ли для float так сделать. в принципе, наверное, можно..
используйте тот парсер, который за 24 секунды, быстрее наврядли будет. у меня он только считывал ваш файл в массив char 4 секунды целых, а еще извлекать из него float.. быстрее 10 секунд точно не будет.
[
Ответ
][
Цитата
]
гость
176.10.99.*
На: Как получить значения множественных(точками) аргументов функции в Си?
Добавлено: 01 окт 21 11:51
Любой парсер это автомат, некая урезанная версия машины Тьюринга, по моему с этого стоит начинать.
[
Ответ
][
Цитата
]
Стр.3 (15)
:
1
2
[3]
4
5
6
7
...
15
<<
< Пред.
|
След. >
>>
Главная
|
Материалы
|
Справочник
|
Гостевая книга
|
Форум
|
Ссылки
|
О сайте
Вопросы и замечания направляйте нам по
Copyright © 2001-2022, www.gotai.net