- 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
private void OutputLabels(DataTable dt)
{
string label;
// Iterate rows of table
foreach (DataRow row in dt.Rows)
{
int labelLen;
label = String.Empty;
label += AddFieldValue(label, row, "Title");
label += AddFieldValue(label, row, "FirstName");
label += AddFieldValue(label, row, "MiddleInitial");
label += AddFieldValue(label, row, "LastName");
label += AddFieldValue(label, row, "Suffix");
label += "\n";
label += AddFieldValue(label, row, "Address1");
label += AddFieldValue(label, row, "AptNo");
label += "\n";
labelLen = label.Length;
label += AddFieldValue(label, row, "Address2");
if (label.Length != labelLen)
label += "\n";
label += AddFieldValue(label, row, "City");
label += AddFieldValue(label, row, "State");
label += AddFieldValue(label, row, "Zip");
Console.WriteLine(label);
Console.WriteLine();
}
}
private string AddFieldValue(string label, DataRow row,
string fieldName)
{
if (! DBNull.Value.Equals(row[fieldName]))
return (string) row[fieldName] + " ";
else
return String.Empty;
}
label не используется в AddFieldValue. Официальный пример MS - https://docs.microsoft.com/en-us/dotnet/api/system.dbnull.value?view=netframework-4.7.2
use System.Text.StringBuilder, Luke.
ну или List<string> и потом Join какой-гнить
Чую питониздо
но лучгше StringBuilder конечно
ЗЫ. Еси есь сринг буйлдыр, то конешно лутше иго юзать.
но в жабе и CLR у нас StringBuilder, за свою пткобезопастность в жабе прозванный буфером
экономят нескока байт
или
> чтобы ни пихать в пул строк еще и "", экономят нескока байт
???
А "" попадет в стат. секцию файла, пул строк.
Разумеется, везде где ты укажешь "" ты получишь ссылку на одну и ту же строку, но в случае String.Empty ты не будешь засирать свой стрингпул лишней строкой.
Кроме того String.isNullOrEmpty наверняка начинается с проверки указателя на равенство с String.Empty, а в случае "" тебе придеца сравнивать строку.
Так что использувая String.Empty ты экономишь несколько тактов CPU и 2 байта (0x00 0x00) в строковом пуле.
так вижу
>>Разумеется, везде где ты укажешь "" ты получишь ссылку на одну и ту же строку
Стринг пулы есть во всех ЯПах где немутабельные строки: строковые литералы всегда кладутся в волшебное место и все 100500 их упоминаний превращаются в ссылку на них. И в .NET и в сишечке или JVM
правда я х3 если это JVM spec или импл. детали OracleJVM/OpenJDK
а так про это на экзамене по SCJP еще спрашивали в хуйзнает когда году)
да, я когда-то работал в конторе где надо было сдавать)
декомпильни и позырь
Если ты билдером соберешь строку "макака" от она не будет равна литералу "макака"
System.out.print("пшел в дупу");
Жысон наврядли кто-то интернит, но можно, если ты его 10050 раз грузишь
Тащимт главный смысл пула в том чтобы код
for(int i = 0; i < 100500;i++) {
foo.setBar("pitux");
}
не создал тебе 100500 питухов
1) грузим в память сорок две строки "key"
2) получаем те-ле-фун-ке 42 объекта
3) интернируем
4) получаем 1 объект
5) GC за нами чистит
профит
Как ты дернешь intern() не разбив яи не создав строки?
string.Empty wins in a really corner case, which can lead to some magical bug and really hard to debug:
If there is a zero width space in "".
[^\x20-\x7F]
ну если конечно система аскисовместима, если это не советский комп который вообще не умеет англ буквы
З.Ы. кстати, почитал, для -P grep использует установленный в систему PCRE, так что можно было вообще писать
чтите прыщепозикс
LC_COLLATE
This variable determines the locale category for character collation. It determines collation information for regular expressions and sorting, including equivalence classes and multi-character collating elements, in various utilities and the strcoll() and strxfrm() functions. Additional semantics of this variable, if any, are implementation-dependent.
Extended Regular Expressions сообщает нам
Regular expressions are a context-independent syntax that can represent a wide variety of character sets and character set orderings, where these character sets are interpreted according to the current locale. While many regular expressions can be interpreted differently depending on the current locale, many features, such as character class expressions, provide for contextual invariance across locales.
Так что да, обязан уметь
зы: разумеется, твой TTY должен уметь локаль тоже
Твой терминал должен уметь отображать символы в указаенной в локале кодировке. Иначе grep погрепает, а не выходе покажет тебе мусор.
findstr, вероятно, работает хорошо.
А лучше всего работает Select-String
в помершале
Кроме кафе бэбе есть еще MZ у PE и ELF у ELF и 55AA у всех BIOS ROMов от карточек всех двух видов до mbr
Строка считается сматченной, если в ней найдено хотя бы одно вхождение паттерна. Не обязательно вся строка матчится как паттерн. -v инвертирует вывод, то есть мы увидим только такие строки, которые ПОЛНОСТЬЮ состоят из символов, не входящих в [a-zA_Z0-9_ ]. Поэтому тебе и выдало питве. Если бы там была e латиницей, строка бы не вывелась.
Задача же, насколько я понял, требует вывести наоборот, все такие строки, где есть хотя бы один non-ascii character, и, желательно, его подстветить.
Приведенный мной греп их подсветит красным цветом и сообщит номер строки.
кста, это не позиксовая хрень емнип
но GNUный умеет
Убедиться, что вот на этой
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/grep.html
странице нет слова color достаточно?
и тут нет
https://man.openbsd.org/grep.1
а тут есть
https://www.gnu.org/software/grep/manual/html_node/Environment-Variables.html#Environment-Variables
ps: ой, ты так и сделал же