<span class="group1"><input id="CheckBox1" type="checkbox" name="CheckBox1" /></span>
<span class="group1"><input id="CheckBox2" type="checkbox" name="CheckBox2" /></span>
<span class="group1"><input id="CheckBox3" type="checkbox" name="CheckBox3" /></span>
$('[type=checkbox]').each(function() {
var clienClassName = $(this).parent().attr('class');
$(this).click(function(e) {
// ensure proper event
//if (!e) e = window.event;
//var sender = e.target || e.srcElement;
//if (sender.nodeName != 'INPUT') return;
var clientId = $(this).attr('id');
var isChecked = $(this).is(":checked");
//không cho thay đổi item đã click
if (isChecked == false)
$(this).prop('checked', true);
$('.' + clienClassName).each(function() {
//this là thẻ span
var checkId = $(this).children().first().attr('id');
if (checkId != clientId) {
$('#' + checkId).prop('checked', false);
}
});
});
});
Thứ Hai, 28 tháng 10, 2019
Checkbox group check only one item C#
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="CheckboxDemo.aspx.cs" Inherits="WebApplicationApiUpload.CheckboxDemo" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:CheckBoxList data-toggle="radio" runat="server" RepeatDirection="Horizontal">
<asp:ListItem Value="TGJU"> TG </asp:ListItem>
<asp:ListItem Value="GOLDOZ"> Gold </asp:ListItem>
<asp:ListItem Value="SILVEROZ"> Silver </asp:ListItem>
</asp:CheckBoxList>
</div>
<div>
<asp:CheckBoxList data-toggle="radio" runat="server" RepeatDirection="Horizontal">
<asp:ListItem Value="TGJU"> TG </asp:ListItem>
<asp:ListItem Value="GOLDOZ"> Gold </asp:ListItem>
<asp:ListItem Value="SILVEROZ"> Silver </asp:ListItem>
</asp:CheckBoxList>
</div>
</form>
<script src="js/jquery-3.2.1.min.js"></script>
<script>
$(document).ready(function () {
// turn all CheckBoxLists labeled for 'radio' to be single-select
$('[data-toggle=radio]').each(function () {
var clientId = $(this).attr('id');
$(this).find('input').each(function () {
// set parent's id
$(this).attr('data-parent', clientId);
// add an onclick to each input
$(this).click(function (e) {
// ensure proper event
if (!e) e = window.event;
var sender = e.target || e.srcElement;
if (sender.nodeName != 'INPUT') return;
// toggle off siblings
var id = $(this).attr('id');
var parent = $(this).attr('data-parent');
$('input[data-parent=' + parent + ']').not('#' + id).prop('checked', false);
});
});
});
});
</script>
</body>
</html>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:CheckBoxList data-toggle="radio" runat="server" RepeatDirection="Horizontal">
<asp:ListItem Value="TGJU"> TG </asp:ListItem>
<asp:ListItem Value="GOLDOZ"> Gold </asp:ListItem>
<asp:ListItem Value="SILVEROZ"> Silver </asp:ListItem>
</asp:CheckBoxList>
</div>
<div>
<asp:CheckBoxList data-toggle="radio" runat="server" RepeatDirection="Horizontal">
<asp:ListItem Value="TGJU"> TG </asp:ListItem>
<asp:ListItem Value="GOLDOZ"> Gold </asp:ListItem>
<asp:ListItem Value="SILVEROZ"> Silver </asp:ListItem>
</asp:CheckBoxList>
</div>
</form>
<script src="js/jquery-3.2.1.min.js"></script>
<script>
$(document).ready(function () {
// turn all CheckBoxLists labeled for 'radio' to be single-select
$('[data-toggle=radio]').each(function () {
var clientId = $(this).attr('id');
$(this).find('input').each(function () {
// set parent's id
$(this).attr('data-parent', clientId);
// add an onclick to each input
$(this).click(function (e) {
// ensure proper event
if (!e) e = window.event;
var sender = e.target || e.srcElement;
if (sender.nodeName != 'INPUT') return;
// toggle off siblings
var id = $(this).attr('id');
var parent = $(this).attr('data-parent');
$('input[data-parent=' + parent + ']').not('#' + id).prop('checked', false);
});
});
});
});
</script>
</body>
</html>
Thứ Hai, 14 tháng 10, 2019
ffmpeg tạo thumb Video
ffmpeg -i b.mp4 -ss 00:00:00 -codec copy -t 120 output1.mp4 && ffmpeg -i output1.mp4 -vf "setpts=0.2*PTS" -r 6 -an output2.mp4
ffmpeg -i b.mp4 -ss 00:00:00 -codec copy -t 120 output1.mp4
ffmpeg -i output1.mp4 -vf "setpts=0.2*PTS" -r 6 -an output2.mp4
ffmpeg -i b.mp4 -ss 00:00:00 -codec copy -t 120 output1.mp4
ffmpeg -i output1.mp4 -vf "setpts=0.2*PTS" -r 6 -an output2.mp4
Get Youtube title from video ID
http://www.youtube.com/oembed?url=http://www.youtube.com/watch?v=' . $ref . '&format=json
Ví dụ
https://www.youtube.com/watch?v=DZDYZ9nRHfU
Ta có link:
http://www.youtube.com/oembed?url=http://www.youtube.com/watch?v=DZDYZ9nRHfU&format=json
Ví dụ
https://www.youtube.com/watch?v=DZDYZ9nRHfU
Ta có link:
http://www.youtube.com/oembed?url=http://www.youtube.com/watch?v=DZDYZ9nRHfU&format=json
Thứ Tư, 9 tháng 10, 2019
regex javascript dd/MM/yyyy
+ 31 day months
(0[13578]|1[02])[\/.](0[1-9]|[12][0-9]|3[01])[\/.](18|19|20)[0-9]{2}
(0[1-9]|[12][0-9]|3[01])[\/.](0[13578]|1[02])[\/.](18|19|20)[0-9]{2}
+ 30 day months
(0[469]|11)[\/.](0[1-9]|[12][0-9]|30)[\/.](18|19|20)[0-9]{2}
(0[1-9]|[12][0-9]|30)[\/.](0[469]|11)[\/.](18|19|20)[0-9]{2}
+ February 1-28 always valid
(02)[\/.](0[1-9]|1[0-9]|2[0-8])[\/.](18|19|20)[0-9]{2}
(0[1-9]|1[0-9]|2[0-8])[\/.](02)[\/.](18|19|20)[0-9]{2}
+ February 29 also valid on leap years
(02)[\/.]29[\/.](((18|19|20)(04|08|[2468][048]|[13579][26]))|2000)
29[\/.](02)[\/.](((18|19|20)(04|08|[2468][048]|[13579][26]))|2000)
==> which means it would be this if you put it all together:
Năm nhuận:
a) dd/MM/yyyy
((0[1-9]|[12][0-9]|3[01])[\/.](0[13578]|1[02])[\/.](18|19|20)[0-9]{2})|((0[1-9]|[12][0-9]|30)[\/.](0[469]|11)[\/.](18|19|20)[0-9]{2})|((0[1-9]|1[0-9]|2[0-8])[\/.](02)[\/.](18|19|20)[0-9]{2})|(29[\/.](02)[\/.](((18|19|20)(04|08|[2468][048]|[13579][26]))|2000))
b) dd/MM/yyyy cho phép số 0 có hoặc không ở ngày/tháng
((0?[1-9]|[12][0-9]|3[01])[\/.](0?[13578]|1[02])[\/.](18|19|20)[0-9]{2})|((0?[1-9]|[12][0-9]|30)[\/.](0?[469]|11)[\/.](18|19|20)[0-9]{2})|((0?[1-9]|1[0-9]|2[0-8])[\/.](0?2)[\/.](18|19|20)[0-9]{2})|(29[\/.](0?2)[\/.](((18|19|20)(04|08|[2468][048]|[13579][26]))|2000))
Chuẩn hơn cho dấu - và / :
((0?[1-9]|[12][0-9]|3[01])[\/](0?[13578]|1[02])[\/](18|19|20)[0-9]{2})|((0?[1-9]|[12][0-9]|30)[\/](0?[469]|11)[\/](18|19|20)[0-9]{2})|((0?[1-9]|1[0-9]|2[0-8])[\/](0?2)[\/](18|19|20)[0-9]{2})|(29[\/](0?2)[\/](((18|19|20)(04|08|[2468][048]|[13579][26]))|2000))|((0?[1-9]|[12][0-9]|3[01])[\-](0?[13578]|1[02])[\-](18|19|20)[0-9]{2})|((0?[1-9]|[12][0-9]|30)[\-](0?[469]|11)[\-](18|19|20)[0-9]{2})|((0?[1-9]|1[0-9]|2[0-8])[\-](0?2)[\-](18|19|20)[0-9]{2})|(29[\-](0?2)[\-](((18|19|20)(04|08|[2468][048]|[13579][26]))|2000))
c) MM/dd/yyyy
((0[13578]|1[02])[\/.](0[1-9]|[12][0-9]|3[01])[\/.](18|19|20)[0-9]{2})|((0[469]|11)[\/.](0[1-9]|[12][0-9]|30)[\/.](18|19|20)[0-9]{2})|((02)[\/.](0[1-9]|1[0-9]|2[0-8])[\/.](18|19|20)[0-9]{2})|((02)[\/.]29[\/.](((18|19|20)(04|08|[2468][048]|[13579][26]))|2000))
(0[13578]|1[02])[\/.](0[1-9]|[12][0-9]|3[01])[\/.](18|19|20)[0-9]{2}
(0[1-9]|[12][0-9]|3[01])[\/.](0[13578]|1[02])[\/.](18|19|20)[0-9]{2}
+ 30 day months
(0[469]|11)[\/.](0[1-9]|[12][0-9]|30)[\/.](18|19|20)[0-9]{2}
(0[1-9]|[12][0-9]|30)[\/.](0[469]|11)[\/.](18|19|20)[0-9]{2}
+ February 1-28 always valid
(02)[\/.](0[1-9]|1[0-9]|2[0-8])[\/.](18|19|20)[0-9]{2}
(0[1-9]|1[0-9]|2[0-8])[\/.](02)[\/.](18|19|20)[0-9]{2}
+ February 29 also valid on leap years
(02)[\/.]29[\/.](((18|19|20)(04|08|[2468][048]|[13579][26]))|2000)
29[\/.](02)[\/.](((18|19|20)(04|08|[2468][048]|[13579][26]))|2000)
==> which means it would be this if you put it all together:
Năm nhuận:
a) dd/MM/yyyy
((0[1-9]|[12][0-9]|3[01])[\/.](0[13578]|1[02])[\/.](18|19|20)[0-9]{2})|((0[1-9]|[12][0-9]|30)[\/.](0[469]|11)[\/.](18|19|20)[0-9]{2})|((0[1-9]|1[0-9]|2[0-8])[\/.](02)[\/.](18|19|20)[0-9]{2})|(29[\/.](02)[\/.](((18|19|20)(04|08|[2468][048]|[13579][26]))|2000))
b) dd/MM/yyyy cho phép số 0 có hoặc không ở ngày/tháng
((0?[1-9]|[12][0-9]|3[01])[\/.](0?[13578]|1[02])[\/.](18|19|20)[0-9]{2})|((0?[1-9]|[12][0-9]|30)[\/.](0?[469]|11)[\/.](18|19|20)[0-9]{2})|((0?[1-9]|1[0-9]|2[0-8])[\/.](0?2)[\/.](18|19|20)[0-9]{2})|(29[\/.](0?2)[\/.](((18|19|20)(04|08|[2468][048]|[13579][26]))|2000))
Chuẩn hơn cho dấu - và / :
((0?[1-9]|[12][0-9]|3[01])[\/](0?[13578]|1[02])[\/](18|19|20)[0-9]{2})|((0?[1-9]|[12][0-9]|30)[\/](0?[469]|11)[\/](18|19|20)[0-9]{2})|((0?[1-9]|1[0-9]|2[0-8])[\/](0?2)[\/](18|19|20)[0-9]{2})|(29[\/](0?2)[\/](((18|19|20)(04|08|[2468][048]|[13579][26]))|2000))|((0?[1-9]|[12][0-9]|3[01])[\-](0?[13578]|1[02])[\-](18|19|20)[0-9]{2})|((0?[1-9]|[12][0-9]|30)[\-](0?[469]|11)[\-](18|19|20)[0-9]{2})|((0?[1-9]|1[0-9]|2[0-8])[\-](0?2)[\-](18|19|20)[0-9]{2})|(29[\-](0?2)[\-](((18|19|20)(04|08|[2468][048]|[13579][26]))|2000))
c) MM/dd/yyyy
((0[13578]|1[02])[\/.](0[1-9]|[12][0-9]|3[01])[\/.](18|19|20)[0-9]{2})|((0[469]|11)[\/.](0[1-9]|[12][0-9]|30)[\/.](18|19|20)[0-9]{2})|((02)[\/.](0[1-9]|1[0-9]|2[0-8])[\/.](18|19|20)[0-9]{2})|((02)[\/.]29[\/.](((18|19|20)(04|08|[2468][048]|[13579][26]))|2000))
Thứ Hai, 7 tháng 10, 2019
Kiểm tra ngày tháng dd/MM/yyyy là hợp lệ trong Js
function isValidDmy(dateDmy) {
var seperated = '/';
var arr = dateDmy.split(seperated);
var day = Number(arr[0]);
var month = Number(arr[1]);
var year = Number(arr[2]);
if(isNaN(day)||isNaN(month)||isNaN(year))
return false;
else{
var dateMdy = month+seperated+day+seperated+year;
console.log(dateMdy);
return validateMdy(dateMdy);
}
}
//input is M/d/yyyy or MM/dd/yyyy
function validateMdy(input) {
var date = new Date(input);
input = input.split( '/' );
return date.getMonth() + 1 === +input[0] &&
date.getDate() === +input[1] &&
date.getFullYear() === +input[2];
}
console.log(isValidDmy('29/22/2000'));
var seperated = '/';
var arr = dateDmy.split(seperated);
var day = Number(arr[0]);
var month = Number(arr[1]);
var year = Number(arr[2]);
if(isNaN(day)||isNaN(month)||isNaN(year))
return false;
else{
var dateMdy = month+seperated+day+seperated+year;
console.log(dateMdy);
return validateMdy(dateMdy);
}
}
//input is M/d/yyyy or MM/dd/yyyy
function validateMdy(input) {
var date = new Date(input);
input = input.split( '/' );
return date.getMonth() + 1 === +input[0] &&
date.getDate() === +input[1] &&
date.getFullYear() === +input[2];
}
console.log(isValidDmy('29/22/2000'));
Javascript Print format
// print format
//-- print("Hello, {0}! The answer is {1}.", "World", 42);
function format(fmt, ...args) {
if (!fmt.match(/^(?:(?:(?:[^{}]|(?:\{\{)|(?:\}\}))+)|(?:\{[0-9]+\}))+$/)) {
throw new Error('invalid format string.');
}
return fmt.replace(/((?:[^{}]|(?:\{\{)|(?:\}\}))+)|(?:\{([0-9]+)\})/g, (m, str, index) => {
if (str) {
return str.replace(/(?:{{)|(?:}})/g, m => m[0]);
} else {
if (index >= args.length) {
throw new Error('argument index is out of range in format');
}
return args[index];
}
});
}
//-- print("Hello, {0}! The answer is {1}.", "World", 42);
function format(fmt, ...args) {
if (!fmt.match(/^(?:(?:(?:[^{}]|(?:\{\{)|(?:\}\}))+)|(?:\{[0-9]+\}))+$/)) {
throw new Error('invalid format string.');
}
return fmt.replace(/((?:[^{}]|(?:\{\{)|(?:\}\}))+)|(?:\{([0-9]+)\})/g, (m, str, index) => {
if (str) {
return str.replace(/(?:{{)|(?:}})/g, m => m[0]);
} else {
if (index >= args.length) {
throw new Error('argument index is out of range in format');
}
return args[index];
}
});
}
Thứ Sáu, 4 tháng 10, 2019
Check hợp lệ form sử dụng Jquery
Với ý tưởng ban đầu là tạo các regEx để check hợp lệ và nạp lỗi vào các thẻ HTML đã định sẵn.
Code HTML:
<!DOCTYPE html>
<html>
<head>
<title>Validate Lib Demo</title>
<style type="text/css">
.message {
color: red;
}
</style>
<script type="text/javascript" src="jquery-3.2.1.min.js"></script>
<script type="text/javascript" src="jquery.validate-1.9.1.min.js"></script>
<script type="text/javascript" src="my-simple-validate.js"></script>
</head>
<body>
<form method="get" accept-charset="utf-8" style="width:600px;margin: 0px auto;" id="formDemo">
<fieldset>
<legend>Demo jQuery Validation</legend>
<div>
<label>Số</label>
<input id="txtNumber" name="ho" type="text" placeholder="Vui lòng nhập số">
</div>
<p id="txtNumber_message" class="message"></p>
<div>
<label>Địa chỉ mail</label>
<input id="txtDiaChi" name="diachi" type="text" placeholder="Vui lòng nhập địa chỉ" />
</div>
<div>
<label>Ten</label>
<input id="txtTen" type="text" placeholder="Vui lòng nhập tên" />
<p id="txtTen_message" class="message"></p>
</div>
<div>
<label>Email mới</label>
<input id="txtEmailMoi" class="validator" type="text" placeholder="Vui lòng nhập tên" onkeyup="Validator(this,'required len(6,8) email','',null)" />
<p id="txtEmailMoi_message" class="message"></p>
</div>
<div>
<label>Mật khẩu</label>
<input id="txtPass" name="pass" type="text" placeholder="Nhập mật khẩu" />
</div>
<div>
<label>Mật khẩu</label>
<input id="txtRePass" class="validator" onkeyup="Validator(this,'required cfpass(txtPass)','',null)" name="repass" type="text" placeholder="Nhập lại mật khẩu" />
<p id="txtRePass_message" class="message"></p>
</div>
<div>
<select id="car" class="validator" name="cars" onblur="Validator(this,'required','',null)">
<option value></option>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="fiat">Fiat</option>
<option value="audi">Audi</option>
</select>
<p id="car_message" class="message"></p>
</div>
<div>
<label>Ngày tháng</label>
<input id="txtdate" class="validator" onkeyup="Validator(this,'required date','',null)" name="date" type="text" placeholder="Nhập ngày tháng" />
<p id="txtdate_message" class="message"></p>
</div>
<br/>
<button type="button" id="btnSubmit" onclick="return SubmitForm()">Submit event</button>
</fieldset>
</form>
</body>
</html>
Code JS:
//--regEx----------------------------------------------------------------------------------------//
var regNumber = /^\d+$/;
var regEmail = /^(?:[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])$/i;
var regText = /[a-zA-Z0-9_]+$/;
var regVietnamese = /[a-zA-Z ÀÁÂÃÈÉÊÌÍÒÓÔÕÙÚĂĐĨŨƠàáâãèéêìíòóôõùúăđĩũơƯĂẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼỀỀỂưăạảấầẩẫậắằẳẵặẹẻẽềềểỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪễệỉịọỏốồổỗộớờởỡợụủứừỬỮỰỲỴÝỶỸửữựỳỵỷỹ]+$/;
//--errMessage-----------------------------------------------------------------------------------//
var error = "";
var REQUIRED_DF = "Trường bắt buộc";
var INVALID_DF = "Giá trị không hợp lệ";
var NUMBER_DF = "Giá trị nhập vào phải là số";
var EMAIL_DF = "Email không hợp lệ";
var TEXT_DF = "Giá trị nhập vào phải là chữ cái, chữ số hoặc ký tự gạch dưới";
var VIETNAMESE_DF = "Giá trị nhập vào phải là chữ cái tiếng Việt hoặc khoảng trắng";
var LEN_MINMAX_DF = "Giá trị nhập vào trong khoảng {0} - {1} ký tự";
var LEN_MIN_DF = "Giá trị nhập vào ít nhất {0} ký tự";
var LEN_MAX_DF = "Giá trị nhập vào không quá {0} ký tự";
var PASSWORD_NOT_MATCH_DF = "Mật khẩu không khớp";
var DATE_NOT_VALID_DF = "Ngày tháng không hợp lệ";
//---custom
var REQUIRED = " là trường bắt buộc";
var INVALID = " không hợp lệ";
var NUMBER = " nhập vào phải là số";
var EMAIL = " không hợp lệ";
var TEXT = " nhập vào phải là chữ cái, chữ số hoặc ký tự gạch dưới";
var VIETNAMESE = " nhập vào phải là chữ cái tiếng Việt hoặc khoảng trắng";
var LEN_MINMAX = " nhập vào trong khoảng {0} - {1} ký tự";
var LEN_MIN = " nhập vào ít nhất {0} ký tự";
var LEN_MAX = " nhập vào không quá {0} ký tự";
var PASSWORD_NOT_MATCH = " không khớp";
var DATE_NOT_VALID = "Ngày tháng không hợp lệ";
//--typeCheck------------------------------------------------------------------------------------//
//typeCheck 'required number email text vi len(6,x) cfpass(id_pass) date'
function Validator(item, typeCheck, description, customMessage) {
//khởi gán lỗi
error = "";
//mô tả trường
if (description == null)
description = "";
// lấy id
var itemId = $(item).attr('id');
//console.log(itemId);
//kiểm tra thuộc tính: required
//console.log(!regNumber.test($(item).val()));
//var attr = $(item).attr('required');
// if (typeof attr !== typeof undefined && attr !== false && !$.trim($(item).val()).length) {
// error = REQUIRED;
// } else {
var subTypeCheck = typeCheck.split(' ');
for (var i = 0; i < subTypeCheck.length; i++) {
//alert(subTypeCheck.length)
//console.log(subTypeCheck);
// console.log('+'+subTypeCheck[i]+'+');
// console.log('++'+$(item).val()+'+');
var check = subTypeCheck[i];
// variables
var minVal = 0;
var maxVal = 0;
var lenCheck = 0;
var prePass = "";
var reEnterPass = "";
//--- len check:
if (check.includes('len')) {
check = 'len';
var arrNum = subTypeCheck[i].replace('len(', '').replace(')', '').split(',');
if (!isNaN(arrNum[0]) && !isNaN(arrNum[1])) {
minVal = Number(arrNum[0]);
maxVal = Number(arrNum[1]);
lenCheck = 0;
} else if (!isNaN(arrNum[0])) {
minVal = Number(arrNum[0]);
lenCheck = 1;
} else if (!isNaN(arrNum[1])) {
maxVal = Number(arrNum[1]);
lenCheck = 2;
}
}
//--- re-enter password check
if (check.includes('cfpass')) {
check = 'cfpass';
var idItemPass = '#' + subTypeCheck[i].replace('cfpass(', '').replace(')', '');
prePass = $(idItemPass).val();
reEnterPass = $(item).val();
}
//--------------------------------------CHECK----------------------
switch (check) {
case 'required':
if (!$.trim($(item).val()).length) {
error = REQUIRED;
}
break;
case 'len':
var lenValue = $.trim($(item).val()).length;
switch (lenCheck) {
case 0:
console.log('minmaxx');
if (lenValue < minVal || lenValue > maxVal)
error = format(LEN_MINMAX, minVal, maxVal);
break;
case 1:
console.log('minx');
if (lenValue < minVal)
error = format(LEN_MIN, minVal);
break;
case 2:
console.log('maxx');
if (lenValue > maxVal)
error = format(LEN_MAX, maxVal);
break;
}
break;
case 'text':
if (!regText.test($(item).val())) {
error = TEXT;
}
break;
case 'number':
if (!regNumber.test($(item).val())) {
error = NUMBER;
}
break;
case 'email':
if (!regEmail.test($(item).val())) {
error = EMAIL;
}
break;
case 'vi':
if (!regVietnamese.test($(item).val())) {
error = VIETNAMESE;
}
break;
case 'cfpass':
if (prePass != reEnterPass)
error = PASSWORD_NOT_MATCH;
break;
case 'date':
if (!isValidVietnamDate($.trim($(item).val())))
error = DATE_NOT_VALID;
break;
}
console.log(error);
if (error != "")
break;
}
//------------------------------------------END CHECK ------------------------- //
//------------ SHOW error ---
if (error != "") {
//console.log(customMessage);
if (customMessage == null)
$('#' + itemId + '_message').html(description + error);
else
$('#' + itemId + '_message').html(customMessage);
} else {
//console.log("YES");
$('#' + itemId + '_message').empty();
}
}
//---------------- SUBMIT FORM
function SubmitForm() {
var total = "";
$(".validator").each(function() {
var lstAtrr = getAttributes($(this)); // lấy tất cả thuộc tính
console.log(lstAtrr["id"]); // lấy giá trị từng thuộc tính
console.log(Object.keys(lstAtrr)); // lấy tất cả key thành mảng
lstAllKey = Object.keys(lstAtrr);
if (lstAllKey.includes('onblur'))
$(this).blur();
if (lstAllKey.includes('onclick'))
$(this).click();
if (lstAllKey.includes('onkeyup'))
$(this).keyup();
if (lstAllKey.includes('onkeydown'))
$(this).keydown();
if (lstAllKey.includes('onkeypress'))
$(this).keypress();
if (lstAllKey.includes('onfocus'))
$(this).focus();
if (lstAllKey.includes('onchange'))
$(this).change();
//
// kiểm tra còn lỗi hay không??
var messId = '#' + lstAtrr["id"] + '_message';
console.log($(messId).html());
// if($(messId).html()!='')
// return false;
// return true;
total = total + $(messId).html();
// console.log('TOTAL=');
// console.log(total);
});
if (total == "") {
console.log("FORM is true");
return true;
} else {
console.log("FORM is false");
return false;
}
}
//--------------- Các hàm phụ trợ-------------------------.......
// lấy tất cả các thuộc tính element
function getAttributes($node) {
var attrs = {};
$.each($node[0].attributes, function(index, attribute) {
attrs[attribute.name] = attribute.value;
});
return attrs;
}
// print format
//-- print("Hello, {0}! The answer is {1}.", "World", 42);
function format(fmt, ...args) {
if (!fmt.match(/^(?:(?:(?:[^{}]|(?:\{\{)|(?:\}\}))+)|(?:\{[0-9]+\}))+$/)) {
throw new Error('invalid format string.');
}
return fmt.replace(/((?:[^{}]|(?:\{\{)|(?:\}\}))+)|(?:\{([0-9]+)\})/g, (m, str, index) => {
if (str) {
return str.replace(/(?:{{)|(?:}})/g, m => m[0]);
} else {
if (index >= args.length) {
throw new Error('argument index is out of range in format');
}
return args[index];
}
});
}
//-------------------
function isValidVietnamDate(dateDmy) {
if (dateDmy.includes('/'))
return isValidDmyWithSeparated(dateDmy, '/');
else
return isValidDmyWithSeparated(dateDmy, '-');
}
//Hàm chính kiểm tra ngày tháng separated = / or -
function isValidDmyWithSeparated(dateDmy, separated) {
var arr = dateDmy.split(separated);
console.log(arr.length);
if (arr.length != 3)
return false;
var day = Number(arr[0]);
var month = Number(arr[1]);
var year = Number(arr[2]);
if (isNaN(day) || isNaN(month) || isNaN(year) || year < 1000)
return false;
else {
var dateMdy = month + separated + day + separated + year;
return validateMdy(dateMdy, separated);
}
}
//input is M/d/yyyy or MM/dd/yyyy
function validateMdy(input, separated) {
var date = new Date(input);
input = input.split(separated);
return date.getMonth() + 1 === +input[0] &&
date.getDate() === +input[1] &&
date.getFullYear() === +input[2];
}
Code HTML:
<!DOCTYPE html>
<html>
<head>
<title>Validate Lib Demo</title>
<style type="text/css">
.message {
color: red;
}
</style>
<script type="text/javascript" src="jquery-3.2.1.min.js"></script>
<script type="text/javascript" src="jquery.validate-1.9.1.min.js"></script>
<script type="text/javascript" src="my-simple-validate.js"></script>
</head>
<body>
<form method="get" accept-charset="utf-8" style="width:600px;margin: 0px auto;" id="formDemo">
<fieldset>
<legend>Demo jQuery Validation</legend>
<div>
<label>Số</label>
<input id="txtNumber" name="ho" type="text" placeholder="Vui lòng nhập số">
</div>
<p id="txtNumber_message" class="message"></p>
<div>
<label>Địa chỉ mail</label>
<input id="txtDiaChi" name="diachi" type="text" placeholder="Vui lòng nhập địa chỉ" />
</div>
<div>
<label>Ten</label>
<input id="txtTen" type="text" placeholder="Vui lòng nhập tên" />
<p id="txtTen_message" class="message"></p>
</div>
<div>
<label>Email mới</label>
<input id="txtEmailMoi" class="validator" type="text" placeholder="Vui lòng nhập tên" onkeyup="Validator(this,'required len(6,8) email','',null)" />
<p id="txtEmailMoi_message" class="message"></p>
</div>
<div>
<label>Mật khẩu</label>
<input id="txtPass" name="pass" type="text" placeholder="Nhập mật khẩu" />
</div>
<div>
<label>Mật khẩu</label>
<input id="txtRePass" class="validator" onkeyup="Validator(this,'required cfpass(txtPass)','',null)" name="repass" type="text" placeholder="Nhập lại mật khẩu" />
<p id="txtRePass_message" class="message"></p>
</div>
<div>
<select id="car" class="validator" name="cars" onblur="Validator(this,'required','',null)">
<option value></option>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="fiat">Fiat</option>
<option value="audi">Audi</option>
</select>
<p id="car_message" class="message"></p>
</div>
<div>
<label>Ngày tháng</label>
<input id="txtdate" class="validator" onkeyup="Validator(this,'required date','',null)" name="date" type="text" placeholder="Nhập ngày tháng" />
<p id="txtdate_message" class="message"></p>
</div>
<br/>
<button type="button" id="btnSubmit" onclick="return SubmitForm()">Submit event</button>
</fieldset>
</form>
</body>
</html>
Code JS:
//--regEx----------------------------------------------------------------------------------------//
var regNumber = /^\d+$/;
var regEmail = /^(?:[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])$/i;
var regText = /[a-zA-Z0-9_]+$/;
var regVietnamese = /[a-zA-Z ÀÁÂÃÈÉÊÌÍÒÓÔÕÙÚĂĐĨŨƠàáâãèéêìíòóôõùúăđĩũơƯĂẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼỀỀỂưăạảấầẩẫậắằẳẵặẹẻẽềềểỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪễệỉịọỏốồổỗộớờởỡợụủứừỬỮỰỲỴÝỶỸửữựỳỵỷỹ]+$/;
//--errMessage-----------------------------------------------------------------------------------//
var error = "";
var REQUIRED_DF = "Trường bắt buộc";
var INVALID_DF = "Giá trị không hợp lệ";
var NUMBER_DF = "Giá trị nhập vào phải là số";
var EMAIL_DF = "Email không hợp lệ";
var TEXT_DF = "Giá trị nhập vào phải là chữ cái, chữ số hoặc ký tự gạch dưới";
var VIETNAMESE_DF = "Giá trị nhập vào phải là chữ cái tiếng Việt hoặc khoảng trắng";
var LEN_MINMAX_DF = "Giá trị nhập vào trong khoảng {0} - {1} ký tự";
var LEN_MIN_DF = "Giá trị nhập vào ít nhất {0} ký tự";
var LEN_MAX_DF = "Giá trị nhập vào không quá {0} ký tự";
var PASSWORD_NOT_MATCH_DF = "Mật khẩu không khớp";
var DATE_NOT_VALID_DF = "Ngày tháng không hợp lệ";
//---custom
var REQUIRED = " là trường bắt buộc";
var INVALID = " không hợp lệ";
var NUMBER = " nhập vào phải là số";
var EMAIL = " không hợp lệ";
var TEXT = " nhập vào phải là chữ cái, chữ số hoặc ký tự gạch dưới";
var VIETNAMESE = " nhập vào phải là chữ cái tiếng Việt hoặc khoảng trắng";
var LEN_MINMAX = " nhập vào trong khoảng {0} - {1} ký tự";
var LEN_MIN = " nhập vào ít nhất {0} ký tự";
var LEN_MAX = " nhập vào không quá {0} ký tự";
var PASSWORD_NOT_MATCH = " không khớp";
var DATE_NOT_VALID = "Ngày tháng không hợp lệ";
//--typeCheck------------------------------------------------------------------------------------//
//typeCheck 'required number email text vi len(6,x) cfpass(id_pass) date'
function Validator(item, typeCheck, description, customMessage) {
//khởi gán lỗi
error = "";
//mô tả trường
if (description == null)
description = "";
// lấy id
var itemId = $(item).attr('id');
//console.log(itemId);
//kiểm tra thuộc tính: required
//console.log(!regNumber.test($(item).val()));
//var attr = $(item).attr('required');
// if (typeof attr !== typeof undefined && attr !== false && !$.trim($(item).val()).length) {
// error = REQUIRED;
// } else {
var subTypeCheck = typeCheck.split(' ');
for (var i = 0; i < subTypeCheck.length; i++) {
//alert(subTypeCheck.length)
//console.log(subTypeCheck);
// console.log('+'+subTypeCheck[i]+'+');
// console.log('++'+$(item).val()+'+');
var check = subTypeCheck[i];
// variables
var minVal = 0;
var maxVal = 0;
var lenCheck = 0;
var prePass = "";
var reEnterPass = "";
//--- len check:
if (check.includes('len')) {
check = 'len';
var arrNum = subTypeCheck[i].replace('len(', '').replace(')', '').split(',');
if (!isNaN(arrNum[0]) && !isNaN(arrNum[1])) {
minVal = Number(arrNum[0]);
maxVal = Number(arrNum[1]);
lenCheck = 0;
} else if (!isNaN(arrNum[0])) {
minVal = Number(arrNum[0]);
lenCheck = 1;
} else if (!isNaN(arrNum[1])) {
maxVal = Number(arrNum[1]);
lenCheck = 2;
}
}
//--- re-enter password check
if (check.includes('cfpass')) {
check = 'cfpass';
var idItemPass = '#' + subTypeCheck[i].replace('cfpass(', '').replace(')', '');
prePass = $(idItemPass).val();
reEnterPass = $(item).val();
}
//--------------------------------------CHECK----------------------
switch (check) {
case 'required':
if (!$.trim($(item).val()).length) {
error = REQUIRED;
}
break;
case 'len':
var lenValue = $.trim($(item).val()).length;
switch (lenCheck) {
case 0:
console.log('minmaxx');
if (lenValue < minVal || lenValue > maxVal)
error = format(LEN_MINMAX, minVal, maxVal);
break;
case 1:
console.log('minx');
if (lenValue < minVal)
error = format(LEN_MIN, minVal);
break;
case 2:
console.log('maxx');
if (lenValue > maxVal)
error = format(LEN_MAX, maxVal);
break;
}
break;
case 'text':
if (!regText.test($(item).val())) {
error = TEXT;
}
break;
case 'number':
if (!regNumber.test($(item).val())) {
error = NUMBER;
}
break;
case 'email':
if (!regEmail.test($(item).val())) {
error = EMAIL;
}
break;
case 'vi':
if (!regVietnamese.test($(item).val())) {
error = VIETNAMESE;
}
break;
case 'cfpass':
if (prePass != reEnterPass)
error = PASSWORD_NOT_MATCH;
break;
case 'date':
if (!isValidVietnamDate($.trim($(item).val())))
error = DATE_NOT_VALID;
break;
}
console.log(error);
if (error != "")
break;
}
//------------------------------------------END CHECK ------------------------- //
//------------ SHOW error ---
if (error != "") {
//console.log(customMessage);
if (customMessage == null)
$('#' + itemId + '_message').html(description + error);
else
$('#' + itemId + '_message').html(customMessage);
} else {
//console.log("YES");
$('#' + itemId + '_message').empty();
}
}
//---------------- SUBMIT FORM
function SubmitForm() {
var total = "";
$(".validator").each(function() {
var lstAtrr = getAttributes($(this)); // lấy tất cả thuộc tính
console.log(lstAtrr["id"]); // lấy giá trị từng thuộc tính
console.log(Object.keys(lstAtrr)); // lấy tất cả key thành mảng
lstAllKey = Object.keys(lstAtrr);
if (lstAllKey.includes('onblur'))
$(this).blur();
if (lstAllKey.includes('onclick'))
$(this).click();
if (lstAllKey.includes('onkeyup'))
$(this).keyup();
if (lstAllKey.includes('onkeydown'))
$(this).keydown();
if (lstAllKey.includes('onkeypress'))
$(this).keypress();
if (lstAllKey.includes('onfocus'))
$(this).focus();
if (lstAllKey.includes('onchange'))
$(this).change();
//
// kiểm tra còn lỗi hay không??
var messId = '#' + lstAtrr["id"] + '_message';
console.log($(messId).html());
// if($(messId).html()!='')
// return false;
// return true;
total = total + $(messId).html();
// console.log('TOTAL=');
// console.log(total);
});
if (total == "") {
console.log("FORM is true");
return true;
} else {
console.log("FORM is false");
return false;
}
}
//--------------- Các hàm phụ trợ-------------------------.......
// lấy tất cả các thuộc tính element
function getAttributes($node) {
var attrs = {};
$.each($node[0].attributes, function(index, attribute) {
attrs[attribute.name] = attribute.value;
});
return attrs;
}
// print format
//-- print("Hello, {0}! The answer is {1}.", "World", 42);
function format(fmt, ...args) {
if (!fmt.match(/^(?:(?:(?:[^{}]|(?:\{\{)|(?:\}\}))+)|(?:\{[0-9]+\}))+$/)) {
throw new Error('invalid format string.');
}
return fmt.replace(/((?:[^{}]|(?:\{\{)|(?:\}\}))+)|(?:\{([0-9]+)\})/g, (m, str, index) => {
if (str) {
return str.replace(/(?:{{)|(?:}})/g, m => m[0]);
} else {
if (index >= args.length) {
throw new Error('argument index is out of range in format');
}
return args[index];
}
});
}
//-------------------
function isValidVietnamDate(dateDmy) {
if (dateDmy.includes('/'))
return isValidDmyWithSeparated(dateDmy, '/');
else
return isValidDmyWithSeparated(dateDmy, '-');
}
//Hàm chính kiểm tra ngày tháng separated = / or -
function isValidDmyWithSeparated(dateDmy, separated) {
var arr = dateDmy.split(separated);
console.log(arr.length);
if (arr.length != 3)
return false;
var day = Number(arr[0]);
var month = Number(arr[1]);
var year = Number(arr[2]);
if (isNaN(day) || isNaN(month) || isNaN(year) || year < 1000)
return false;
else {
var dateMdy = month + separated + day + separated + year;
return validateMdy(dateMdy, separated);
}
}
//input is M/d/yyyy or MM/dd/yyyy
function validateMdy(input, separated) {
var date = new Date(input);
input = input.split(separated);
return date.getMonth() + 1 === +input[0] &&
date.getDate() === +input[1] &&
date.getFullYear() === +input[2];
}
Check and Convert Video .mp4 From H265 to H264 C#
Trên Android chỉ chạy được mp4 với codec_name là H264, vì vậy cần hàm chuyển đổi video trên Server rồi trả api kết quả.
Code:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class ConvertVideoH264 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
ConvertVideoH265toH264();
}
string exeFfmpegPath = @"F:\OTL\ffmpeg\ffmpeg\bin\ffmpeg.exe";
string exeFfprobePath = @"F:\OTL\ffmpeg\ffmpeg\bin\ffprobe.exe";
string fileInputPath = @"F:\OTL\ffmpeg\ffmpeg\bin\input.mp4";
protected void ConvertVideoH265toH264()
{
string output = @"F:\OTL\ffmpeg\ffmpeg\bin\output.mp4";
string cmdConvertH265toH264 = String.Format("-i {0} -c:v libx264 -crf 23 -vf format=yuv420p -c:a copy {1}", fileInputPath, output);
string codecName = GetCodecName();
//chuyen doi H255->H264
if (codecName != "h264")
{
Task<string> callTask = Task.Run(() => RunFFTask(exeFfmpegPath, fileInputPath, cmdConvertH265toH264));
callTask.Wait();
}
}
protected string GetCodecName()
{
string cmdGetCodec = String.Format("-v error -select_streams v:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 {0}", fileInputPath);
Task<string> callTask = Task.Run(() => RunFFTask(exeFfprobePath, fileInputPath, cmdGetCodec));
callTask.Wait();
// does NOT deadlock - shouldn't call await Task.Result on main
string codec = callTask.Result;
return codec;
}
protected Task<string> RunFFTask(string exeFilePath, string fileInputPath, string cmd)
{
var tcs = new TaskCompletionSource<string>();
// Use ProcessStartInfo class
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = false;
startInfo.UseShellExecute = false;
startInfo.FileName = exeFilePath;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = String.Format("{0}", cmd);
startInfo.RedirectStandardOutput = true; // add to receive output
var process = new Process
{
StartInfo = startInfo,
EnableRaisingEvents = true,
};
process.Exited += (sender, args) =>
{
tcs.SetResult(process.StandardOutput.ReadLine());
process.Dispose();
};
process.Start();
return tcs.Task;
}
}
Code:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class ConvertVideoH264 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
ConvertVideoH265toH264();
}
string exeFfmpegPath = @"F:\OTL\ffmpeg\ffmpeg\bin\ffmpeg.exe";
string exeFfprobePath = @"F:\OTL\ffmpeg\ffmpeg\bin\ffprobe.exe";
string fileInputPath = @"F:\OTL\ffmpeg\ffmpeg\bin\input.mp4";
protected void ConvertVideoH265toH264()
{
string output = @"F:\OTL\ffmpeg\ffmpeg\bin\output.mp4";
string cmdConvertH265toH264 = String.Format("-i {0} -c:v libx264 -crf 23 -vf format=yuv420p -c:a copy {1}", fileInputPath, output);
string codecName = GetCodecName();
//chuyen doi H255->H264
if (codecName != "h264")
{
Task<string> callTask = Task.Run(() => RunFFTask(exeFfmpegPath, fileInputPath, cmdConvertH265toH264));
callTask.Wait();
}
}
protected string GetCodecName()
{
string cmdGetCodec = String.Format("-v error -select_streams v:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 {0}", fileInputPath);
Task<string> callTask = Task.Run(() => RunFFTask(exeFfprobePath, fileInputPath, cmdGetCodec));
callTask.Wait();
// does NOT deadlock - shouldn't call await Task.Result on main
string codec = callTask.Result;
return codec;
}
protected Task<string> RunFFTask(string exeFilePath, string fileInputPath, string cmd)
{
var tcs = new TaskCompletionSource<string>();
// Use ProcessStartInfo class
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = false;
startInfo.UseShellExecute = false;
startInfo.FileName = exeFilePath;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = String.Format("{0}", cmd);
startInfo.RedirectStandardOutput = true; // add to receive output
var process = new Process
{
StartInfo = startInfo,
EnableRaisingEvents = true,
};
process.Exited += (sender, args) =>
{
tcs.SetResult(process.StandardOutput.ReadLine());
process.Dispose();
};
process.Start();
return tcs.Task;
}
}
Thứ Tư, 2 tháng 10, 2019
Linq trong C#
static void LinqDemo()
{
string sentence = "the quick brown fox jumps over the lazy dog";
string[] list = sentence.Split(' ');
//------------- Sorting data-----------------------------
//Sắp xếp tăng dần với cả 2 điều kiện lọc:
List<string> queryTangDan = list.OrderBy(o => o.Length).ThenBy(o => o.Substring(0, 1)).Select(o => o.ToUpper()).ToList();
//Sắp xếp giảm dần với cả 2 điều kiện lọc, sử dụng đảo ngược Reverse():
List<string> queryGiamDanBangDaoNguoc = list.OrderBy(o => o.Length).ThenBy(o => o.Substring(0, 1)).Select(o => o.ToUpper()).Reverse().ToList();
//Sắp xếp giảm dần với cả 2 điều kiện lọc:
List<string> queryGiamDan = list.OrderByDescending(o => o.Length).ThenByDescending(o => o.Substring(0, 1)).Select(o => o.ToUpper()).ToList();
//------------- Set data-----------------------------
//Loại bỏ phần tử trùng
List<string> queryLoaiBoTrung = list.Distinct().ToList();
//Hiệu của 2 tập hợp: phần tử A không có trong B
List<string> lstB = new List<string>() { "quick", "brown", "dog", "cat" };
List<string> queryHieu = list.Except(lstB).ToList();
//Giao của 2 tập hợp: có cả trong A và B
List<string> queryGiao = list.Intersect(lstB).ToList();
//Hợp của 2 tập hợp: có trong A hoặc B
List<string> queryHop = list.Union(lstB).ToList();
//------------- Filtering Data-----------------------------
//Lọc theo điều kiện: độ dài chuỗi bằng 4
List<string> queryFilter = list.Where(o => o.Length == 4).ToList();
//Lọc theo kiểu dữ liệu
object[] objs = new object[] { "12345", 12 };
List<string> queryFilterType = objs.OfType<string>().ToList(); //return { "12345" }
//------------- Quantifier Operations-----------------------------
List<Student> students = new List<Student>();
students.Add(new Student { ID = 1, Name = "Asutosh", Age = 19 });
students.Add(new Student { ID = 2, Name = "Kapil", Age = 20 });
students.Add(new Student { ID = 3, Name = "Sumit", Age = 21 });
Student newStudent = new Student { ID = 3, Name = "Anil", Age = 22 };
students.Add(newStudent);
//Điều kiện Tất cả SV đều lớn hơn 20 tuổi
bool isAllOver20 = students.All(student => student.Age > 20);
//Điều kiện tồn tại SV lớn hơn 20 tuổi
bool isAnyOver20 = students.Any(student => student.Age > 20);
//Điều kiện chứa SV - cùng 1 đối tượng
bool isContain = students.Contains(newStudent);
Console.WriteLine(isContain);
foreach (string str in queryFilterType)
Console.WriteLine(str);
}
{
string sentence = "the quick brown fox jumps over the lazy dog";
string[] list = sentence.Split(' ');
//------------- Sorting data-----------------------------
//Sắp xếp tăng dần với cả 2 điều kiện lọc:
List<string> queryTangDan = list.OrderBy(o => o.Length).ThenBy(o => o.Substring(0, 1)).Select(o => o.ToUpper()).ToList();
//Sắp xếp giảm dần với cả 2 điều kiện lọc, sử dụng đảo ngược Reverse():
List<string> queryGiamDanBangDaoNguoc = list.OrderBy(o => o.Length).ThenBy(o => o.Substring(0, 1)).Select(o => o.ToUpper()).Reverse().ToList();
//Sắp xếp giảm dần với cả 2 điều kiện lọc:
List<string> queryGiamDan = list.OrderByDescending(o => o.Length).ThenByDescending(o => o.Substring(0, 1)).Select(o => o.ToUpper()).ToList();
//------------- Set data-----------------------------
//Loại bỏ phần tử trùng
List<string> queryLoaiBoTrung = list.Distinct().ToList();
//Hiệu của 2 tập hợp: phần tử A không có trong B
List<string> lstB = new List<string>() { "quick", "brown", "dog", "cat" };
List<string> queryHieu = list.Except(lstB).ToList();
//Giao của 2 tập hợp: có cả trong A và B
List<string> queryGiao = list.Intersect(lstB).ToList();
//Hợp của 2 tập hợp: có trong A hoặc B
List<string> queryHop = list.Union(lstB).ToList();
//------------- Filtering Data-----------------------------
//Lọc theo điều kiện: độ dài chuỗi bằng 4
List<string> queryFilter = list.Where(o => o.Length == 4).ToList();
//Lọc theo kiểu dữ liệu
object[] objs = new object[] { "12345", 12 };
List<string> queryFilterType = objs.OfType<string>().ToList(); //return { "12345" }
//------------- Quantifier Operations-----------------------------
List<Student> students = new List<Student>();
students.Add(new Student { ID = 1, Name = "Asutosh", Age = 19 });
students.Add(new Student { ID = 2, Name = "Kapil", Age = 20 });
students.Add(new Student { ID = 3, Name = "Sumit", Age = 21 });
Student newStudent = new Student { ID = 3, Name = "Anil", Age = 22 };
students.Add(newStudent);
//Điều kiện Tất cả SV đều lớn hơn 20 tuổi
bool isAllOver20 = students.All(student => student.Age > 20);
//Điều kiện tồn tại SV lớn hơn 20 tuổi
bool isAnyOver20 = students.Any(student => student.Age > 20);
//Điều kiện chứa SV - cùng 1 đối tượng
bool isContain = students.Contains(newStudent);
Console.WriteLine(isContain);
foreach (string str in queryFilterType)
Console.WriteLine(str);
}
Trộn 2 file có cùng số dòng trong C#
Vd: file a.txt là
A
B
C
Và file b.txt là
1
2
3
=> Khi trộn sẽ ra
A
1
B
2
C
3
Code:
static void TronFile()
{
// 2 files
const string file1 = @"F:\OTL\Test Tron File\a.txt";
const string file2 = @"F:\OTL\Test Tron File\b.txt";
// Read a text file line by line.
string[] lines1 = File.ReadAllLines(file1);
string[] lines2 = File.ReadAllLines(file2);
//Ghi file
String filepath = @"F:\OTL\Test Tron File\out.txt";// đường dẫn của file muốn tạo
FileStream fs = new FileStream(filepath, FileMode.Create);//Tạo file mới tên là test.txt
StreamWriter sWriter = new StreamWriter(fs, Encoding.UTF8);//fs là 1 FileStream
for (int i = 0; i < lines1.Length; i++)
{
sWriter.WriteLine(lines1[i]);
sWriter.WriteLine(lines2[i]);
}
// Ghi và đóng file
sWriter.Flush();
fs.Close();
}
A
B
C
Và file b.txt là
1
2
3
=> Khi trộn sẽ ra
A
1
B
2
C
3
Code:
static void TronFile()
{
// 2 files
const string file1 = @"F:\OTL\Test Tron File\a.txt";
const string file2 = @"F:\OTL\Test Tron File\b.txt";
// Read a text file line by line.
string[] lines1 = File.ReadAllLines(file1);
string[] lines2 = File.ReadAllLines(file2);
//Ghi file
String filepath = @"F:\OTL\Test Tron File\out.txt";// đường dẫn của file muốn tạo
FileStream fs = new FileStream(filepath, FileMode.Create);//Tạo file mới tên là test.txt
StreamWriter sWriter = new StreamWriter(fs, Encoding.UTF8);//fs là 1 FileStream
for (int i = 0; i < lines1.Length; i++)
{
sWriter.WriteLine(lines1[i]);
sWriter.WriteLine(lines2[i]);
}
// Ghi và đóng file
sWriter.Flush();
fs.Close();
}
Đăng ký:
Bài đăng (Atom)