如何使用Calc(或Excel)来减少编程时重复的代码编辑?
How to use Calc (or Excel) to reduce repetitive code editing while programming?
问题 由于没有建设性而被关闭,所以我会尽量让这个问题有一个具体的答案。
我的问题是针对 Android/Java 的,但它适用于任何编程语言。
我有一些代码如下所示:
switch (view.getId()) {
case R.id.v_black:
if (bgButtonIsSelected) {
backgroundColor = getResources().getColor(R.color.black);
} else {
textColor = getResources().getColor(R.color.black);
}
break;
case R.id.v_white:
if (bgButtonIsSelected) {
backgroundColor = getResources().getColor(R.color.white);
} else {
textColor = getResources().getColor(R.color.white);
}
break;
}
现在我需要为所有其他颜色添加更多 case
。所以到处都是 "black"(或 "white"),我需要用其他颜色名称替换它。问题是,他们有很多。我已经把它们都写了一次,我不想再写了。
这是我之前写颜色的地方(color.xml):
<color name="black">#000000</color>
<color name="white">#ffffff</color>
<color name="red_100">#ffcdd2</color>
<color name="red_200">#ef9a9a</color>
<color name="red_500">#f44336</color>
<color name="red_800">#c62828</color>
<color name="pink_100">#f8bbd0</color>
<color name="pink_200">#f48fb1</color>
<color name="pink_500">#e91e63</color>
<color name="pink_800">#ad1457</color>
<color name="purple_100">#e1bee7</color>
<color name="purple_200">#ce93d8</color>
<color name="purple_500">#9c27b0</color>
<color name="purple_800">#6a1b9a</color>
<color name="deep_purple_100">#d1c4e9</color>
<color name="deep_purple_200">#b39ddb</color>
<color name="deep_purple_500">#673ab7</color>
<color name="deep_purple_800">#4527a0</color>
<color name="indigo_100">#c5cae9</color>
<color name="indigo_200">#9fa8da</color>
<color name="indigo_500">#3f51b5</color>
<color name="indigo_800">#283593</color>
<color name="blue_100">#bbdefb</color>
<color name="blue_200">#90caf9</color>
<color name="blue_500">#2196f3</color>
<color name="blue_800">#1565c0</color>
<color name="light_blue_100">#b3e5fc</color>
<color name="light_blue_200">#81d4fa</color>
<color name="light_blue_500">#03a9f4</color>
<color name="light_blue_800">#0277bd</color>
<color name="cyan_100">#b2ebf2</color>
<color name="cyan_200">#80deea</color>
<color name="cyan_500">#00bcd4</color>
<color name="cyan_800">#00838f</color>
<color name="teal_100">#b2dfdb</color>
<color name="teal_200">#80cbc4</color>
<color name="teal_500">#009688</color>
<color name="teal_800">#00695c</color>
<color name="green_100">#c8e6c9</color>
<color name="green_200">#a5d6a7</color>
<color name="green_500">#4caf50</color>
<color name="green_800">#2e7d32</color>
<color name="light_green_100">#dcedc8</color>
<color name="light_green_200">#c5e1a5</color>
<color name="light_green_500">#8bc34a</color>
<color name="light_green_800">#558b2f</color>
<color name="lime_100">#f0f4c3</color>
<color name="lime_200">#e6ee9c</color>
<color name="lime_500">#cddc39</color>
<color name="lime_800">#9e9d24</color>
<color name="yellow_100">#fff9c4</color>
<color name="yellow_200">#fff59d</color>
<color name="yellow_500">#ffeb3b</color>
<color name="yellow_800">#f9a825</color>
<color name="amber_100">#ffecb3</color>
<color name="amber_200">#ffe082</color>
<color name="amber_500">#ffc107</color>
<color name="amber_800">#ff8f00</color>
<color name="orange_100">#ffe0b2</color>
<color name="orange_200">#ffcc80</color>
<color name="orange_500">#ff9800</color>
<color name="orange_800">#ef6c00</color>
<color name="deep_orange_100">#ffccbc</color>
<color name="deep_orange_200">#ffab91</color>
<color name="deep_orange_500">#ff5722</color>
<color name="deep_orange_800">#d84315</color>
<color name="brown_100">#d7ccc8</color>
<color name="brown_200">#bcaaa4</color>
<color name="brown_500">#795548</color>
<color name="brown_800">#4e342e</color>
<color name="grey_100">#f5f5f5</color>
<color name="grey_200">#eeeeee</color>
<color name="grey_500">#9e9e9e</color>
<color name="grey_800">#424242</color>
<color name="blue_grey_100">#cfd8dc</color>
<color name="blue_grey_200">#b0bec5</color>
<color name="blue_grey_500">#607d8b</color>
<color name="blue_grey_800">#37474f</color>
我知道我可以复制粘贴,但有没有更快的方法?我如何使用 Calc 或 Excel 加快这个过程?
(下面的答案节省了我很多时间,我想我会与其他程序员分享。)
首先你需要隔离你已经写好的颜色名称。它们目前采用以下格式:
<color name="COLOR_NAME">#80deea</color>
复制整个列表并将其作为无格式文本 (Ctrl+Shift+V) 粘贴到电子表格程序中。 (我正在使用 LibreOffice Calc 作为答案。我想 Excel 的过程与此类似。)应该会弹出 "Text Import"。在 "Separated by"/"Other" 中输入双引号 (")。(因为它是围绕颜色名称的内容。)说好。
现在有三列,第二列中有颜色名称。您可以删除第一列和第三列。我们已经分离了颜色名称。
第二步是将这些名称放入代码中的正确位置。我们要插入的代码格式如下:
case R.id.v_COLOR_NAME:
if (bgButtonIsSelected) {
backgroundColor = getResources().getColor(R.color.COLOR_NAME);
} else {
textColor = getResources().getColor(R.color.COLOR_NAME);
}
break;
去掉换行符,使其在一行中,如下所示:
case R.id.v_COLOR_NAME: if (bgButtonIsSelected) {backgroundColor = getResources().getColor(R.color.COLOR_NAME);} else { textColor = getResources().getColor(R.color.COLOR_NAME);} break;
共有三个 COLOR_NAME
处,因此将线分为四部分。复制每个部分并将其粘贴到 Calc 中的列顶部。然后将这四个单元格一直复制到每个颜色名称。
现在在顶行右侧(我将使用最后一张图片中的 H 列。)编写以下公式将所有部分连接在一起:
=D1&B1&E1&B1&F1&B1&G1
其中 B 列是 COLOR_NAME
,D、E、F 和 G 列是代码的四个部分。将此单元格中的公式一直向下复制。现在,当我复制此专栏时,它会给我
"case R.id.v_red_100: if (bgButtonIsSelected) {backgroundColor = getResources().getColor(R.color.red_100);} else { textColor = getResources().getColor(R.color.red_100);} break;"
"case R.id.v_red_200: if (bgButtonIsSelected) {backgroundColor = getResources().getColor(R.color.red_200);} else { textColor = getResources().getColor(R.color.red_200);} break;"
"case R.id.v_red_500: if (bgButtonIsSelected) {backgroundColor = getResources().getColor(R.color.red_500);} else { textColor = getResources().getColor(R.color.red_500);} break;"
"case R.id.v_red_800: if (bgButtonIsSelected) {backgroundColor = getResources().getColor(R.color.red_800);} else { textColor = getResources().getColor(R.color.red_800);} break;"
"case R.id.v_pink_100: if (bgButtonIsSelected) {backgroundColor = getResources().getColor(R.color.pink_100);} else { textColor = getResources().getColor(R.color.pink_100);} break;"
...
嗯... Calc 将其放在引号中,因此我需要将其删除。我将所有内容粘贴到 LibreOffice Writer(或 Word 或您使用的任何东西)中,并将 "case
替换为 case
,将 break;"
替换为 break;
。 (我可以使用 Writer 支持的正则表达式,但我总是忘记行首和行尾的表达式。这样做比在 Whosebug 上查找要快。)
最后,您可以将所有内容传递到您的代码编辑器中。如果您的编辑器不错,它会自动将其格式化为应有的格式。 (在 Eclipse 中为 Cntl+Shift+F。)
太棒了!我节省了所有时间,才有时间为您制作本教程。希望其他人也能像我一样享受它。
您不需要 excel 或 calc,您需要正确构建您的程序。
private static Map<Integer, Integer> idToColor = new Map<Integer, Integer>();
//at init time
void initMap(){
idToColor.add(R.id.v_white, R.color.v_white);
//1 line per color
}
然后你的开关变成:
Integer color = idToColor.get(view.getId());
if(color != null){
if (bgButtonIsSelected) {
backgroundColor = getResources().getColor(color.getValue());
} else {
textColor = getResources().getColor(color.getValue());
}
}
现在添加颜色是 1 行 - 将其添加到地图中。
问题 由于没有建设性而被关闭,所以我会尽量让这个问题有一个具体的答案。
我的问题是针对 Android/Java 的,但它适用于任何编程语言。
我有一些代码如下所示:
switch (view.getId()) {
case R.id.v_black:
if (bgButtonIsSelected) {
backgroundColor = getResources().getColor(R.color.black);
} else {
textColor = getResources().getColor(R.color.black);
}
break;
case R.id.v_white:
if (bgButtonIsSelected) {
backgroundColor = getResources().getColor(R.color.white);
} else {
textColor = getResources().getColor(R.color.white);
}
break;
}
现在我需要为所有其他颜色添加更多 case
。所以到处都是 "black"(或 "white"),我需要用其他颜色名称替换它。问题是,他们有很多。我已经把它们都写了一次,我不想再写了。
这是我之前写颜色的地方(color.xml):
<color name="black">#000000</color>
<color name="white">#ffffff</color>
<color name="red_100">#ffcdd2</color>
<color name="red_200">#ef9a9a</color>
<color name="red_500">#f44336</color>
<color name="red_800">#c62828</color>
<color name="pink_100">#f8bbd0</color>
<color name="pink_200">#f48fb1</color>
<color name="pink_500">#e91e63</color>
<color name="pink_800">#ad1457</color>
<color name="purple_100">#e1bee7</color>
<color name="purple_200">#ce93d8</color>
<color name="purple_500">#9c27b0</color>
<color name="purple_800">#6a1b9a</color>
<color name="deep_purple_100">#d1c4e9</color>
<color name="deep_purple_200">#b39ddb</color>
<color name="deep_purple_500">#673ab7</color>
<color name="deep_purple_800">#4527a0</color>
<color name="indigo_100">#c5cae9</color>
<color name="indigo_200">#9fa8da</color>
<color name="indigo_500">#3f51b5</color>
<color name="indigo_800">#283593</color>
<color name="blue_100">#bbdefb</color>
<color name="blue_200">#90caf9</color>
<color name="blue_500">#2196f3</color>
<color name="blue_800">#1565c0</color>
<color name="light_blue_100">#b3e5fc</color>
<color name="light_blue_200">#81d4fa</color>
<color name="light_blue_500">#03a9f4</color>
<color name="light_blue_800">#0277bd</color>
<color name="cyan_100">#b2ebf2</color>
<color name="cyan_200">#80deea</color>
<color name="cyan_500">#00bcd4</color>
<color name="cyan_800">#00838f</color>
<color name="teal_100">#b2dfdb</color>
<color name="teal_200">#80cbc4</color>
<color name="teal_500">#009688</color>
<color name="teal_800">#00695c</color>
<color name="green_100">#c8e6c9</color>
<color name="green_200">#a5d6a7</color>
<color name="green_500">#4caf50</color>
<color name="green_800">#2e7d32</color>
<color name="light_green_100">#dcedc8</color>
<color name="light_green_200">#c5e1a5</color>
<color name="light_green_500">#8bc34a</color>
<color name="light_green_800">#558b2f</color>
<color name="lime_100">#f0f4c3</color>
<color name="lime_200">#e6ee9c</color>
<color name="lime_500">#cddc39</color>
<color name="lime_800">#9e9d24</color>
<color name="yellow_100">#fff9c4</color>
<color name="yellow_200">#fff59d</color>
<color name="yellow_500">#ffeb3b</color>
<color name="yellow_800">#f9a825</color>
<color name="amber_100">#ffecb3</color>
<color name="amber_200">#ffe082</color>
<color name="amber_500">#ffc107</color>
<color name="amber_800">#ff8f00</color>
<color name="orange_100">#ffe0b2</color>
<color name="orange_200">#ffcc80</color>
<color name="orange_500">#ff9800</color>
<color name="orange_800">#ef6c00</color>
<color name="deep_orange_100">#ffccbc</color>
<color name="deep_orange_200">#ffab91</color>
<color name="deep_orange_500">#ff5722</color>
<color name="deep_orange_800">#d84315</color>
<color name="brown_100">#d7ccc8</color>
<color name="brown_200">#bcaaa4</color>
<color name="brown_500">#795548</color>
<color name="brown_800">#4e342e</color>
<color name="grey_100">#f5f5f5</color>
<color name="grey_200">#eeeeee</color>
<color name="grey_500">#9e9e9e</color>
<color name="grey_800">#424242</color>
<color name="blue_grey_100">#cfd8dc</color>
<color name="blue_grey_200">#b0bec5</color>
<color name="blue_grey_500">#607d8b</color>
<color name="blue_grey_800">#37474f</color>
我知道我可以复制粘贴,但有没有更快的方法?我如何使用 Calc 或 Excel 加快这个过程?
(下面的答案节省了我很多时间,我想我会与其他程序员分享。)
首先你需要隔离你已经写好的颜色名称。它们目前采用以下格式:
<color name="COLOR_NAME">#80deea</color>
复制整个列表并将其作为无格式文本 (Ctrl+Shift+V) 粘贴到电子表格程序中。 (我正在使用 LibreOffice Calc 作为答案。我想 Excel 的过程与此类似。)应该会弹出 "Text Import"。在 "Separated by"/"Other" 中输入双引号 (")。(因为它是围绕颜色名称的内容。)说好。
现在有三列,第二列中有颜色名称。您可以删除第一列和第三列。我们已经分离了颜色名称。
第二步是将这些名称放入代码中的正确位置。我们要插入的代码格式如下:
case R.id.v_COLOR_NAME:
if (bgButtonIsSelected) {
backgroundColor = getResources().getColor(R.color.COLOR_NAME);
} else {
textColor = getResources().getColor(R.color.COLOR_NAME);
}
break;
去掉换行符,使其在一行中,如下所示:
case R.id.v_COLOR_NAME: if (bgButtonIsSelected) {backgroundColor = getResources().getColor(R.color.COLOR_NAME);} else { textColor = getResources().getColor(R.color.COLOR_NAME);} break;
共有三个 COLOR_NAME
处,因此将线分为四部分。复制每个部分并将其粘贴到 Calc 中的列顶部。然后将这四个单元格一直复制到每个颜色名称。
现在在顶行右侧(我将使用最后一张图片中的 H 列。)编写以下公式将所有部分连接在一起:
=D1&B1&E1&B1&F1&B1&G1
其中 B 列是 COLOR_NAME
,D、E、F 和 G 列是代码的四个部分。将此单元格中的公式一直向下复制。现在,当我复制此专栏时,它会给我
"case R.id.v_red_100: if (bgButtonIsSelected) {backgroundColor = getResources().getColor(R.color.red_100);} else { textColor = getResources().getColor(R.color.red_100);} break;"
"case R.id.v_red_200: if (bgButtonIsSelected) {backgroundColor = getResources().getColor(R.color.red_200);} else { textColor = getResources().getColor(R.color.red_200);} break;"
"case R.id.v_red_500: if (bgButtonIsSelected) {backgroundColor = getResources().getColor(R.color.red_500);} else { textColor = getResources().getColor(R.color.red_500);} break;"
"case R.id.v_red_800: if (bgButtonIsSelected) {backgroundColor = getResources().getColor(R.color.red_800);} else { textColor = getResources().getColor(R.color.red_800);} break;"
"case R.id.v_pink_100: if (bgButtonIsSelected) {backgroundColor = getResources().getColor(R.color.pink_100);} else { textColor = getResources().getColor(R.color.pink_100);} break;"
...
嗯... Calc 将其放在引号中,因此我需要将其删除。我将所有内容粘贴到 LibreOffice Writer(或 Word 或您使用的任何东西)中,并将 "case
替换为 case
,将 break;"
替换为 break;
。 (我可以使用 Writer 支持的正则表达式,但我总是忘记行首和行尾的表达式。这样做比在 Whosebug 上查找要快。)
最后,您可以将所有内容传递到您的代码编辑器中。如果您的编辑器不错,它会自动将其格式化为应有的格式。 (在 Eclipse 中为 Cntl+Shift+F。)
太棒了!我节省了所有时间,才有时间为您制作本教程。希望其他人也能像我一样享受它。
您不需要 excel 或 calc,您需要正确构建您的程序。
private static Map<Integer, Integer> idToColor = new Map<Integer, Integer>();
//at init time
void initMap(){
idToColor.add(R.id.v_white, R.color.v_white);
//1 line per color
}
然后你的开关变成:
Integer color = idToColor.get(view.getId());
if(color != null){
if (bgButtonIsSelected) {
backgroundColor = getResources().getColor(color.getValue());
} else {
textColor = getResources().getColor(color.getValue());
}
}
现在添加颜色是 1 行 - 将其添加到地图中。