首页 > 解决方案 > 生成包含 LINK1 元素的 MDF 有限元网格

问题描述

我在大学得到了以下作业:

编写一个 AWK 程序,该程序可以生成包含 LINK1 元素的 MDF 有限元网格。网格的几何形状包含 n 条垂直线和 m 条水平线。n 和 m 值是 AWK 程序的参数。线之间的垂直和水平距离也是参数。网格的形状如下图所示:

网格的形状

示例执行:

awk –v n=3 –v m=2 –v dn=2 –v dm=1 –f gen.awk > output.mdf

输入:

n是垂直线的数量

m是水平线的数量

dn是垂直线之间的字符数

dm是水平线之间的字符数

输出:

output.mdf是我需要在其中绘制这些线的测量数据格式文件。

像这样:

__|__|__|__
__|__|__|__
  |  |  |

并且:

请确保 output.mdf 文件有效。可以使用 chkmdf.exe 或 e_plot32.exe 程序来检查 MDF 文件的有效性。

不要误会我的意思,我不想有人为我解决,我知道这个平台不是为了那个。我只要求一些入门技巧,文件

标签: awk

解决方案


您说您只是想要提示和提示,但生命太短,无法在此处提供 awk 教程,所以如果您使用-而不是_作为行分隔符而没有解释,这里是如何做到这一点:

$ cat gen.awk
BEGIN {
    numCols = n + 1
    colWidth = dn
    numRows = m + 1
    rowHeight = dm

    colSep = "|"
    rowSep = sprintf("%*s",colWidth,"")
    gsub(/ /,"-",rowSep)

    for (rowNr=1; rowNr<=numRows; rowNr++) {
        for (subRowNr=1; subRowNr<=rowHeight; subRowNr++) {
            for (colNr=1; colNr<=numCols; colNr++) {
                printf "%*s%s", colWidth, "", (colNr<numCols ? colSep : ORS)
            }
        }
        if ( rowNr < numRows ) {
            for (colNr=1; colNr<=numCols; colNr++) {
                printf "%s%s", rowSep, (colNr<numCols ? colSep : ORS)
            }
        }
    }
}

.

$ awk -v n=3 -v m=2 -v dn=2 -v dm=1 -f gen.awk
  |  |  |
--|--|--|--
  |  |  |
--|--|--|--
  |  |  |

.

$ awk -v n=5 -v m=4 -v dn=6 -v dm=3 -f gen.awk
      |      |      |      |      |
      |      |      |      |      |
      |      |      |      |      |
------|------|------|------|------|------
      |      |      |      |      |
      |      |      |      |      |
      |      |      |      |      |
------|------|------|------|------|------
      |      |      |      |      |
      |      |      |      |      |
      |      |      |      |      |
------|------|------|------|------|------
      |      |      |      |      |
      |      |      |      |      |
      |      |      |      |      |
------|------|------|------|------|------
      |      |      |      |      |
      |      |      |      |      |
      |      |      |      |      |

你可以用谷歌搜索结构、添加prints 等来弄清楚它在做什么,然后从中学习并修复它以输出你想要的确切格式。我还强烈建议您阅读 Arnold Robbins 所著的《Effective Awk Programming, 4th Edition》一书——所有其他有关 awk 的书籍都不完整和/或已过时和/或存在其他问题。


推荐阅读