C言語に自信ニキおる?

記事サムネイル
1 : 2024/07/24(水) 02:52:29.662 ID:zp1S3nDQa
“うんち”
“ちんちん”
“ま●こ”

って文字列のうちどれかがファイル名に入ってたら別のディレクトリに移すってのやりたいんやけど
chatgptに書かせたんやけど上手くいかない

試しに条件満たすファイルの数だけ数えさせても0って言われんねん
これなんでなん??日本語なのがややこしい??

2 : 2024/07/24(水) 02:54:13.017 ID:d3sH29jTQ
英語は試したんか?
3 : 2024/07/24(水) 02:55:19.285 ID:zp1S3nDQa
>>2
うんことかのとこほんとは人名
4 : 2024/07/24(水) 02:55:49.985 ID:klYGsNmUo
シェルスクリプトでやったほうが良くね?
6 : 2024/07/24(水) 02:58:45.842 ID:zp1S3nDQa
>>4
なにそれ🥺
授業でC言語触っただけだからCしか環境ない
せっかくならこいつにやらせてみるかって思っただけなんや、ゴリゴリgptに書かせてるからなんの勉強にもなってないが
11 : 2024/07/24(水) 03:02:14.202 ID:klYGsNmUo
>>6
複数のコマンドを逐次実行するようにしてくれるやつや
5 : 2024/07/24(水) 02:57:19.007 ID:zp1S3nDQa
gpt選手の書いたコードがこちら

#include
#include
#include
#include

#define NUM_STRINGS 39

const char *strings[NUM_STRINGS] = {
“string1”, “string2”, “string3”, /* … その他の36個の文字列 … */ “string39”
};

int containsAny(const char *filename) {
for (int i = 0; i < NUM_STRINGS; i++) {
if (strstr(filename, strings[i]) != NULL) {
return 1; // 一致する文字列が見つかった
}
}
return 0; // 一致する文字列が見つからなかった
}

int main() {
const char *sourceDir = “C:\\path\\to\\source\\*”;
const char *destinationDir = “C:\\path\\to\\destination\\”;
char oldPath[MAX_PATH];
char newPath[MAX_PATH];

WIN32_FIND_DATA findFileData;
HANDLE hFind = FindFirstFile(sourceDir, &findFileData);

if (hFind == INVALID_HANDLE_VALUE) {
printf(“ディレクトリを開くことができませんでした。\n”);
return 1;
}

do {
if (!(findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
snprintf(oldPath, sizeof(oldPath), “%s%s”, sourceDir, findFileData.cFileName);
snprintf(newPath, sizeof(newPath), “%s%s”, destinationDir, findFileData.cFileName);

if (containsAny(findFileData.cFileName)) {
if (rename(oldPath, newPath) == 0) {
printf(“ファイル %s を移動しました。\n”, findFileData.cFileName);
} else {
perror(“ファイルの移動に失敗しました”);
}
}
}
} while (FindNextFile(hFind, &findFileData) != 0);

FindClose(hFind);
return 0;
}

26 : 2024/07/24(水) 03:12:02.539 ID:klYGsNmUo
>>5
ディレクトリ内のファイルはちゃんと取得できるんか?
32 : 2024/07/24(水) 03:14:33.707 ID:zp1S3nDQa
>>26
>>19
これは該当0個って言われるからディレクトリ開いて検索始める所まではできてると思う
ディレクトリ覗く権限がないとかそんなレベルでは無いと思う、多分やけど😅
7 : 2024/07/24(水) 03:00:08.702 ID:zp1S3nDQa
人力でやれば15分で終わるんやけどなんか深夜の思いつきでやったんや
そしたら全然上手くいかなくてなんか意地でずっとやってる
8 : 2024/07/24(水) 03:00:54.562 ID:zp1S3nDQa
誰か自信ニキおらんの??
9 : 2024/07/24(水) 03:01:19.992 ID:zp1S3nDQa
底辺大学生の暇つぶしに付き合ってくれる大人募集中や
10 : 2024/07/24(水) 03:01:58.171 ID:vm/76N7zO
Instr関数でいいよね
14 : 2024/07/24(水) 03:03:00.745 ID:zp1S3nDQa
>>10
Cの環境と初歩的な操作ができるからやらせてるだけでコードの中身はワイの知識大幅に超えてるんや
だから申し訳ないんやけど具体的にどう書けばいいのか教えてくれんか
12 : 2024/07/24(水) 03:02:42.566 ID:klYGsNmUo
どこでエラー出すのかも貼ってや
16 : 2024/07/24(水) 03:04:45.297 ID:zp1S3nDQa
>>12
エラーとかでない、メッセージなんも出ない
コンパイルエラーもなし

これもしや検索の段階であかんか?と思って、別で当てはまるファイルの数だけ数える奴書いたら、該当ファイル0個って言われたんや

13 : 2024/07/24(水) 03:03:00.600 ID:aapU/kng5
pythonでやれ
17 : 2024/07/24(水) 03:05:53.067 ID:zp1S3nDQa
>>13
コンパイルじゃなくて機械語に翻訳するのと実行一気にやる感じのやつ

ワイのPythonの知識こんだけや

15 : 2024/07/24(水) 03:03:33.268 ID:x15j1sn3g
C言語ってワイがガキの頃からあるけどまだ使われてるの?
18 : 2024/07/24(水) 03:08:08.621 ID:mz58Xpjv/
まったくわからん🤪
19 : 2024/07/24(水) 03:08:09.427 ID:zp1S3nDQa
これが数数えさせるだけのやつ
こっちは普通に動くけど0個って言われる
↓↓↓

#include
#include
#include
#include

#define NUM_STRINGS 39

const char *strings[NUM_STRINGS] = {
“string1”, “string2”, “string3”, /* … その他の36個の文字列 … */ “string39”
};

// 特定の文字列のいずれかがファイル名に含まれているかを確認する関数
int containsAny(const char *filename) {
for (int i = 0; i < NUM_STRINGS; i++) {
if (strstr(filename, strings[i]) != NULL) {
return 1; // 一致する文字列が見つかった
}
}
return 0; // 一致する文字列が見つからなかった
}

int main() {
const char *sourceDir = “C:\\path\\to\\source\\*”; // ワイルドカードを追加
HANDLE hFind;
WIN32_FIND_DATA findFileData;
int count = 0; // ファイルカウント用の変数

// ディレクトリを開く
hFind = FindFirstFile(sourceDir, &findFileData);

if (hFind == INVALID_HANDLE_VALUE) {
printf(“ディレクトリを開くことができませんでした。エラーコード: %lu\n”, GetLastError());
return 1;
}

// ディレクトリ内のファイルを列挙
do {
// ディレクトリでないファイルのみ対象
if (!(findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
if (containsAny(findFileData.cFileName)) {
count++; // 対象ファイルのカウント
}
}
} while (FindNextFile(hFind, &findFileData) != 0);

// ディレクトリを閉じる
FindClose(hFind);

// 結果を出力
printf(“条件に一致するファイルの数: %d\n”, count);

return 0;
}

20 : 2024/07/24(水) 03:08:39.040 ID:2hniA5lKM
ソースの文字コードとファイル名の文字コードが違うんちゃうん
23 : 2024/07/24(水) 03:11:05.738 ID:zp1S3nDQa
>>20
コードはVSCodeで書いてUTF-8でエンコードのはずなんやけど
ファイル名ってデフォだと違ったりする感じ?もしかして
29 : 2024/07/24(水) 03:13:12.240 ID:pqmuvNE7E
>>23
とりあえず帰ってきたfile名表示させて確認しないと
38 : 2024/07/24(水) 03:16:27.382 ID:zp1S3nDQa
>>29
すまんgptに書かせて背伸びしてるだけでガチで触りしかやってないんやけど帰ってくるファイル名ってどこで見るんや
42 : 2024/07/24(水) 03:19:31.128 ID:klYGsNmUo
>>38
printf(“%s\n”, findFileData.cFileName);

これをdo whileの中に入れればええんやないか?

49 : 2024/07/24(水) 03:26:57.273 ID:zp1S3nDQa
>>42 やったら普通にファイル名出た!!!
これがいい事なのか悪いことなのかはわからん
30 : 2024/07/24(水) 03:13:31.786 ID:2hniA5lKM
>>23
試しに英語ファイル名でテストして成功するか実験してみろや
39 : 2024/07/24(水) 03:16:33.544 ID:zp1S3nDQa
>>30
賢い
22 : 2024/07/24(水) 03:10:43.581 ID:mz58Xpjv/
専攻でも無いし違ってたらすまんな
24 : 2024/07/24(水) 03:11:40.925 ID:1y1qmnV0.
ためしにcontainsAnyのとこでfilenameとstrings[i]をprintfで逐一表示させてみたら?
36 : 2024/07/24(水) 03:16:09.209 ID:fsSUGsmGD
>>24
とりあえずこれやれや
46 : 2024/07/24(水) 03:23:46.079 ID:zp1S3nDQa
>>24
>>36
ファイル名の後に文字化けした変な文字列がついてるのが羅列された
なんかめっちゃ長い出力だったから入れるとこ間違えてるかもやけど
48 : 2024/07/24(水) 03:25:58.927 ID:1y1qmnV0.
>>46
ヌル文字入ってないんちゃうか?
25 : 2024/07/24(水) 03:11:48.313 ID:ngpkmoCIS
今更Cって何するんや?
33 : 2024/07/24(水) 03:14:43.744 ID:NkVmkH1ih
Cでやる内容ではない
40 : 2024/07/24(水) 03:18:39.720 ID:DHtNg1XCG
GPTに直せって言えば直すんちゃうか
50 : 2024/07/24(水) 03:27:10.531 ID:zp1S3nDQa
>>40
それ100回やった
41 : 2024/07/24(水) 03:19:11.743 ID:dRNI2EPlS
久々に触るもんやないなCは
定期的に触ってないとわからんくなる
43 : 2024/07/24(水) 03:21:22.332 ID:1y1qmnV0.
VSCodeでデバッガ使えるならそれで追っていくのが一番早いんちゃうか?
51 : 2024/07/24(水) 03:27:59.905 ID:zp1S3nDQa
>>43
自分で調べて言われるがままに使えるようにはしたけど
デバッグ必要なほどのプログラム授業で到底まだやってないからデバッガーの使い方が分かりません一切
すまんな無能で
44 : 2024/07/24(水) 03:22:11.943 ID:0K9KjjiPM
findしてパイプしてmvすればええね
45 : 2024/07/24(水) 03:23:16.656 ID:pAGQuGgAx
Cなんて古の言語使ってなにするんや
組み込みでもやる気か
52 : 2024/07/24(水) 03:28:55.056 ID:zp1S3nDQa
>>45
ワイ「手動で探すのちょっとめんどいなぁ…せや!暇つぶしがてら授業で触ったCでやらせてみたろ!!」
なお今
47 : 2024/07/24(水) 03:25:01.214 ID:mz58Xpjv/
文字コードかあ

コメント

タイトルとURLをコピーしました