掲示板ランキング  その他  シングル用  セミダブル用  ダブル用  ワイドダブル用  クィーン用  キング用


掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板1

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧

No.7506

ファイル名を入力し、拡張子のみ変更
投稿者---より(2007/06/11 16:11:47)


C++を使用し、秀丸でコンパイル・実行しています。
大学の演習ぶりにプログラミングをしております。

txtファイルを読み込んで、
doc形式に変換するプログラムを作成しています。

現時点では拡張子も含めて、
入出力どちらのファイル名も自分で入力するようになっています。
たとえば、入力ファイル名として「test.txt」、
出力ファイル名として「test.doc」を自ら入力するといった通りです。

    printf("Dump File-name:");  scanf("%s",filename1);
    printf("Dest.File-name:");  scanf("%s",filename2);

1度だけの入力で拡張子のみ変更させ、
出力ファイル名をつけるにはどうすれば良いでしょうか。
よろしくお願いします。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:ファイル名を入力し、拡張子のみ変更 7507 2007/06/11 16:44:41
<子記事> Re:ファイル名を入力し、拡張子のみ変更 7510 へろり 2007/06/11 19:39:36
<子記事> Re:ファイル名を入力し、拡張子のみ変更 7512 yoh2 2007/06/11 22:33:32
<子記事> Re:ファイル名を入力し、拡張子のみ変更 7514 より 2007/06/12 11:12:33


No.7507

Re:ファイル名を入力し、拡張子のみ変更
投稿者---榊(2007/06/11 16:44:41)


>1度だけの入力で拡張子のみ変更させ、
>出力ファイル名をつけるにはどうすれば良いでしょうか。

文字列操作系の関数を使用して、入力文字列を編集します。
sscanf()/strtok()/sprintf()/strcat()/strcmp() などを利用します。


この投稿にコメントする

削除パスワード

No.7508

Re:ファイル名を入力し、拡張子のみ変更
投稿者---榊(2007/06/11 17:16:24)


もう少しエレガントなやり方はあると思うけど。。。

#include <stdio.h>
#include <string.h>

#define MAX_NAME    32

int main(void)
{
    char filename[MAX_NAME];
    char cpfile[MAX_NAME];
    char ex[MAX_NAME];
    char *p_c;

    printf("input name ==>");
    scanf("%s", filename);

    strcpy(cpfile, filename);
    p_c = strrchr(cpfile, '.');
    if (p_c != NULL) {
        strcpy(ex, (p_c + 1));
        *p_c = '\0';
    }

    if (0 == strcmp(ex, "txt"))
        strcat(cpfile, ".doc");
    else if (0 == strcmp(ex, "doc"))
        strcat(cpfile, ".txt");
    else
        strcat(cpfile, ".err");

    printf("%s\n%s\n", filename, cpfile);

    return 0;
}



この投稿にコメントする

削除パスワード

No.7510

Re:ファイル名を入力し、拡張子のみ変更
投稿者---へろり(2007/06/11 19:39:36)


>txtファイルを読み込んで、
>doc形式に変換するプログラムを作成しています。
>

ですから、拡張子を持たないファイルにdocを付加しちゃだめでしょう。

で。
char fname[260], *cp;

scanf("%s", fname);
cp = strrchr(fname, '.');
if(cp = !strcmp(cp + 1, "txt")  ? cp : NULL)
	strcpy(cp, ".doc");


で。


この投稿にコメントする

削除パスワード

No.7511

Re:ファイル名を入力し、拡張子のみ変更
投稿者---yoh2(2007/06/11 22:17:00)


> cp = strrchr(fname, '.');
> if(cp = !strcmp(cp + 1, "txt")  ? cp : NULL)

これはマズいでしょう。'.'が見付からないとき、strcmpで(char *)NULL + 1を
読みに行ってしまいます。正しくは
if(cp && !strcmp(cp + 1, "txt"))

てな感じではないかと。



この投稿にコメントする

削除パスワード

No.7512

Re:ファイル名を入力し、拡張子のみ変更
投稿者---yoh2(2007/06/11 22:33:32)


別スレッドでは、テキストファイル名を入力し、その拡張子をdocに変更する
ことによってdocファイル名を得るといった方向で話が進んでいますが、
入力を「ファイル名から拡張子を除いた部分」としてもよいなら、話は
単純になります。入力を一回にする、という目的はこれでも果たせますし。
    char basename[128], txtname[128], docname[128];

    ... /* basename ← 拡張子を取り除いた名前。fgets()なりscanf()なりで。 */
    sprintf(txtname, "%s.txt", basename);
    sprintf(docname, "%s.doc", basename);

<余談>
>C++を使用し、秀丸でコンパイル・実行しています。
>大学の演習ぶりにプログラミングをしております。

秀丸はコンパイラではありませんよ。
マクロ機能を利用して、編集中のファイルのコンパイル→実行を
秀丸上からできるようにしているだけで、コンパイラやリンカは別にあるはずです。
# いやまあ、理論上、秀丸マクロでコンパイラを作れそうな気もしますが、
# そんな暇なことをする人はそうそういないかと。できても重そうですし。

私の通っていた大学でも、同様にセットアップされた秀丸を使う授業が
ありましたが、秀丸がコンパイラだと勘違いする学生の多いこと……
</余談>


この投稿にコメントする

削除パスワード

No.7514

Re:ファイル名を入力し、拡張子のみ変更
投稿者---より(2007/06/12 11:12:33)


どうもありがとうございます。
非常に参考になり、解決いたしました。
関数をもっと勉強しなければいけませんね。


>秀丸上からできるようにしているだけで、コンパイラやリンカは別にあるはずです。

Borlandのものでコンパイルしている様でした。
お恥ずかしいばかりです(^^;


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧





掲示板提供:(有)リアル・インテグリティ