生成包含 LINK1 元素的 MDF 有限元网格

Rag*_*rus 3 awk

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

编写一个 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
Run Code Online (Sandbox Code Playgroud)

输入:

n 是垂直线的数量

m 是水平线的数量

dn 是垂直线之间的字符数

dm 是水平线之间的字符数

输出:

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

像这样:

__|__|__|__
__|__|__|__
  |  |  |
Run Code Online (Sandbox Code Playgroud)

并且:

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

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

Ed *_*ton 5

你说你只是想要提示和提示,但生命太短暂了,无法在这里提供 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)
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

.

$ awk -v n=3 -v m=2 -v dn=2 -v dm=1 -f gen.awk
  |  |  |
--|--|--|--
  |  |  |
--|--|--|--
  |  |  |
Run Code Online (Sandbox Code Playgroud)

.

$ awk -v n=5 -v m=4 -v dn=6 -v dm=3 -f gen.awk
      |      |      |      |      |
      |      |      |      |      |
      |      |      |      |      |
------|------|------|------|------|------
      |      |      |      |      |
      |      |      |      |      |
      |      |      |      |      |
------|------|------|------|------|------
      |      |      |      |      |
      |      |      |      |      |
      |      |      |      |      |
------|------|------|------|------|------
      |      |      |      |      |
      |      |      |      |      |
      |      |      |      |      |
------|------|------|------|------|------
      |      |      |      |      |
      |      |      |      |      |
      |      |      |      |      |
Run Code Online (Sandbox Code Playgroud)

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