なかのにっき

最新版はこちら。 突っ込みは各日付の BBS エントリのほか、 メール (nakano@st.seikei.ac.jp) や フォーム からどうぞ。 なおスパム除けのため、BBS 機能には 緩い認証を入れて います。 検索エンジンから来た方は、エンジンの方のキャッシュを見るか、 下の簡易検索を試してみてください。


hns - 日記自動生成システム - Version 2.19.5

先月 2023年10月 来月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Namazu for hns による簡易全文検索
詳しくは 詳細指定/ヘルプを参照して下さい
検索式:

2023年10月01日() [n年日記]

#1 Visual Studio 2022 のコマンドラインコンパイル環境つくり

プログラミング C の授業の課題採点で、学生からの提出物のソースコードのコンパイルが通るかどうかと、実行結果を一括で見るための環境作り。

まずコマンドラインからコンパイルするための情報はこちらにまとまっていた。 VS2022 Community でも OK で、vcvarsall.bat は
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat
にあった。これをコマンドプロンプトから実行して
cl.exe foo.c
などとすると foo.obj と foo.exe ができあがって実行もできる。よしよし。

ただし提出された c ソースをコンパイルしようとすると、
foo.c(1): warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を
含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。
foo.c(4): fatal error C1075: '{': 一致するトークンが見つかりませんでした
という warning が出る。これも調べたら ということで、BOM つき NKF に変換しちゃうのが簡単ぽい。 ということで nkf -oc=UTF-8-BOM がよさそう。

なお、コマンドプロンプトは chcp 65001 で UTF-8 になるはずなんだが(参考 このへん )、日本語のある c プログラムの出力が微妙に化ける。 PowerShell だと大丈夫そうなので、実行はそっちでやることに決定。ということは .PS1 を同時に作ればいい。

ということであとは組み合わせればいいんだが、wsl の bash script から cmd.exe 経由で cl.exe を実行しようとすると、vcvarsall.bat のところのスペースがうまく処理できなくて苦戦。結局 .bat ファイルを一時的に作って、それを実行することにした。あまり美しくないけど。

学生さんの c ソースは「us(学籍番号)_(彼らの付けたファイル名).c」という名前でサブフォルダに入っているので、 それをとってきて nkf にかけてコンパイルして、一律実行用の execall.ps1 を作るところまで。
#!/bin/bash
#
# WSL から実行する。WSL には nkf が必要。Windows には VS2022 Community のインストールが必要。
# 引き数に与えるサブフォルダに、「us(学籍番号)_(彼らのつけたファイル名).c」で入っている想定。
#
if [ $# -ne 1 ]; then
  echo "Usage: $0 [Cfolder]";
  exit 1
fi
FOLDER=$1

# BOM 付き UTF-8 に変換しつつコピー
for subc in $FOLDER/*.c; do
  compc=`basename $subc | cut -d _ -f 1`.c
  echo $subc $compc
  nkf --oc=UTF-8-BOM "$subc" > $compc
done

# 一括コンパイル
TMPBAT=temp_$$.bat
cat << 'EOS' > ./$TMPBAT
chcp 65001
call "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x64
for %%i in (*.c) do (
  cl.exe %%i
)
EOS

cmd.exe /c $TMPBAT

rm $TMPBAT

# 一括実行用の PowerShell ファイルを生成
PS1FILE=execall.ps1
echo "chcp 65001" > $PS1FILE
for exe in *.exe; do
    echo "Write-Output -InputObject \"[Exec $exe]\"" >> $PS1FILE
    echo "pause" >> $PS1FILE
    echo ".\\$exe" >> $PS1FILE
done
wsl のシェルから実行して、nkf -W をパイプしてログをとると、一応コンパイルの状況も確認できる。

#2 word ファイルをまとめてひとつの pdf にする

これは ChatGPT さんの言う通りでできた(笑) Python で複数の .docx をひとつの PDF へ変換
コメント [全部読む/投稿する]

2023年10月05日(木) [n年日記]

#1 システムワイドなロケール設定 〜 Debian GNU/Linux

# update-locale LANG=en_US.UTF-8 LANGUAGE=en_US:en
という感じで、/etc/default/locale が書き変わる。つぎのログインから反映されるそう。
コメント [全部読む/投稿する]

2023年10月07日() [n年日記]

#1 本日の ChatGPT 案件

BOMつきUTF-8テキストファイルからのBOMの削除:

sed '1s/^\xEF\xBB\xBF//' input.txt > output.txt
でいける。

テキストファイルを inux のコマンドラインから pdf にする:

apt install libreoffice-writer して、
libreoffice --headless --convert-to pdf your_document.txt
という感じで。
コメント [全部読む/投稿する]

以上、3 日分です。
タイトル一覧
カテゴリ分類
book
dept
issp
labo
paper
snap
stock
vsj
Powered by hns-2.19.5, HyperNikkiSystem Project

中野武雄 (NAKANO, Takeo) <nakano@st.seikei.ac.jp> Since 1999-10-07
RSS feed, 更新時刻, LIRS エントリ, アクセス制御 (解説)

中野のホームページへ