-
−2
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
string rec(const string str, char c){return str;}
void cer(){}
main(){
string s,d="Text",a;
ifstream fin;
vector<string> mas;
fin.open("test.txt");
//if (fin.is_open()) cout<<"1";else cout<<"0";
while(fin>>s)
{bool f=0;
for(int i=0; i<s.size(); ++i)
if (s[i]==d[0])
{
f=1;
for (int j=0; j<s.size()&&j<d.size(); ++j)
if (d[j]!=s[i+j]) f=0;
if (f)
{
a.clear();
for (int j=0; j<i; ++j)
a=a+s[j];
a=a+"Hi";
for (int j=i; j<s.size(); ++j)
a=a+s[j];
}
}
if (f) {mas.push_back("\n");mas.push_back(a);mas.push_back("\n");}
else mas.push_back(s);
s=rec(s,'0');
}
ofstream fout;
fout.open("output.txt");
for (int i=0; i<mas.size(); ++i) fout<<mas[i]<<"\t";
}
ДД всем просветленным.
Есть код на С++ , который нормально компилируется и меняет текст в указанном файле. Вопрос: как его использовать для изменения данных при парсинге сайта. По логике Tokenizer передает лексемы в Parser для дальнейшего построения DOM. Значит надо добавить подобный код в Tokenizer, чтобы он передавал уже исправленные данные. Но на практике Tokenizer работает с Buffer(nsHtml5Tokenizer::tokenizeBuffer( nsHtml5UTF16Buffer* buffer)), причем с логическим(bool), а код для строчки из файла.
Как вариант добавить в сам Parser(nsHtml5Parser::Parse(const nsAString& aSourceBuffer, void* aKey, const nsACString& ContentType, bool aLastCall, nsDTDMode aMode) , но не могу разобраться как это сделать.
При компиляции вылетает куча ошибок.
Использованные файлы: nsHtml5Parser.cpp и nsHtml5Tokenizer.cpp, FireFox(версия 47), компилятор MSVS2013.
DrAli,
12 Октября 2018
-
+2
- 1
- 2
- 3
- 4
- 5
- 6
- 7
class Test(contextlib.ExitStack):
def __init__(self):
super().__init__()
with contextlib.ExitStack() as s:
self.foo = s.enter_context(Foo())
self.bar = s.enter_context(Bar())
self.enter_context(s.pop_all())
Неужели в питоне нет более адекватного способа описать класс, который держит джва ресурса и корректно их освобождает во всех ситуациях? И эти люди ругают кресты за сложность управления памятью...
bormand,
11 Октября 2018
-
−1
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
public static function findById($id)
{
$model = self::where('id', $id)->get();
$count = $model->getIterator()->count();
if($count > 0) {
return $model->getIterator()->current();
}
return false;
}
Laravel Eloquent Model
pb92,
11 Октября 2018
-
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
private static readonly ConcurrentDictionary<Expression, object> CachedFunctions;
public static Func<TEntity, bool> AsFunc<TEntity>(this object entity, Expression<Func<TEntity, bool>> expr)
where TEntity : class, IEntity
{
//@see http://sergeyteplyakov.blogspot.ru/2015/06/lazy-trick-with-concurrentdictionary.html
return (Func<TEntity, bool>)CachedFunctions.GetOrAdd(expr, id => new Lazy<object>(
() => CachedFunctions.GetOrAdd(id, expr.Compile())));
}
Вот так хорошая идея ломается о кривую реализацию. Вместо того чтобы сохранить в кэш требуемый тип, сохраняем туда Lazy, возвращающий себя же :)
leff,
11 Октября 2018
-
+1
- 1
- 2
- 3
- 4
- 5
- 6
- 7
public GlobalSetting ReadGlobalSettingById(string id)
{
int totalItems;
var globalSettings = ReadGlobalSettings(PageSetting.All, out totalItems);
return globalSettings.FirstOrDefault(e => e.GlobalSettingID == id);
}
Инновационный алгоритм считывания сущности по ID:
1) считываем ВСЕ записи из базы в память;
2) в памяти находим сущность с нужным ID;
3) все остальное пусть Garbage Collector подберет;
4) удобно же, не правда ли?)
Moses,
11 Октября 2018
-
+2
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
private int SortWObyAD(WorkOrderShort wo1, WorkOrderShort wo2)
{
if (wo1.AD == wo2.AD)
{
return 0;
}
else if (wo1.AD > wo2.AD)
{
return 1;
}
else
{
return -1;
}
}
Сразу 2 достоинства:
1) абсолютно не понятно, что такое AD;
2) ах да, все это можно было бы заменить одной строкой "return wo1.AD - wo2.AD", т.к. все это будет использоваться в одной из стандартных функций сортировки
Moses,
11 Октября 2018
-
+1
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
public int GetWorkOrder(...)
{
var wait = 0;
const int stepWait = 30;
var marker1 = false;
do
{
if (marker1 == true) wait = wait + stepWait;
...
do
{
marker1 = false;
...
if (ChoosenWO.Count == 0)
{
if (counter == postalAreas.Count)
{
marker1 = true;
break;
}
...
counter = counter + 1;
}
else
{
...
}
} while (ChoosenWO.Count == 0);
} while (wait < ((endDayTime.Hour - DateTime.UtcNow.Hour) * 60 + (endDayTime.Minute - DateTime.UtcNow.Minute)));
return -1;
}
Очень важный алгоритм, работающий на продакшене... Разработанный менеджером и написанный аналитиком...
Moses,
11 Октября 2018
-
+1
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
// todo '+1' is temporary
private string CorrectPhoneNumber(string phoneNumber, string countryCode = "+1")
{
if (phoneNumber.Substring(0, 1) != "+")
{
return string.Format("{0}{1}", phoneNumber.Length == 10 ? countryCode : "+", phoneNumber);
}
return phoneNumber;
}
Genious!
Moses,
11 Октября 2018
-
+2
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
[HttpPost]
public string PayFromCreditCard(CreditCardViewModel cardInfo, double depositValue)
{
try
{
// todo: make real payment
return AjaxResult.CreateSuccess();
}
catch (Exception exc)
{
return AjaxResult.CreateError(exc.Message);
}
}
Этот код сейчас живет где-то на продакшене...
Moses,
11 Октября 2018
-
+1
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
std::size_t fib(const std::size_t index) {
if (index < 3)
return !!index;
std::size_t f2 = 1; // f(n - 2)
std::size_t f1 = 1; // f(n - 1)
std::size_t result = 0;
for (std::size_t i = 2; i < index; ++i)
{
result = f1 + f2;
f1 = f2;
f2 = result;
}
return result;
}
Что Clang вытворяет с несчастной функцией Фибоначчи?
https://godbolt.org/z/2SFUm0
Elvenfighter,
10 Октября 2018