
test.txtというテキストファイルに入力されている文字を読み込んでtest1.txtに7文字になったなら改行して2行目に書き込み、また2行目が7文字以上になったら3行目に書き込むというプログラムを作りたいのですがどうもうまくいきません。色々ネットで探したりしたのですがstrlenをうまく使うのかな~ぐらいしか見当はつきません・・・。
何かよいアドバイスをお願いします!m(_ _)m
例
test.txt
---------------------------------
私の一番好きな食べ物はリンゴです。
---------------------------------
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
test1.txt
----------------------------------
私の一番好きな
食べ物はリンゴ
です。
----------------------------------
No.2ベストアンサー
- 回答日時:
#include <stdio.h>
int iskanji(unsigned char c){
//シフトJIS、1バイト目
//(0x81 <= c <= 0x9F あるいは0xE0 <= c <= 0xFC)
return (0x81 <= c && c <= 0x9F) || (0xE0 <= c && c <= 0xFC);
}
int main(void){
FILE *fin, *fout;
int c;
unsigned count=0;
fin=fopen("test.txt", "r");
fout=fopen("test1.txt", "w");
while(EOF!=(c=fgetc(fin))){
fputc((char)c, fout);
count++;
if(c == '\n'){
count=0;
}
if(iskanji((unsigned char)c)){
fputc(fgetc(fin), fout);
}
if(count && count % 7==0){
fputc('\n', fout);
}
}
fclose(fout);
fclose(fin);
return 0;
}
返答ありがとうございます。このプログラム通りに入力してみましたところ、半角はうまく7文字ごとに改行されて出力したのですが漢字などの全角の場合ですと文字化けをしてしまいまして表示できませんでした。
そこで質問なのですが
(0x81 <= c && c <= 0x9F) || (0xE0 <= c && c <= 0xFC);
この文はなにを意味しているのでしょうか?
私としてはここに原因があるものと考えています。
何卒よろしくお願いします。
No.5
- 回答日時:
#2>漢字などの全角の場合ですと文字化けをしてしまいまして表示できませんでした。
そうですか・・(;_;)
#2>(0x81 <= c && c <= 0x9F) || (0xE0 <= c && c <= 0xFC);
この部分は、SHIFT_JIS の1バイト目を判定するものです。
日本語の文字コードとして、SHIFT_JISが使われていると想定しています。
1バイト目が該当するとき、無条件に2バイト目を出力しています。
No.4
- 回答日時:
テキストが英字(一バイト文字)だけなら
int main(int argc, char *argv[])
{
FILE *in,*out;
char szText[8];
if((in=fopen("test.txt","r"))==NULL) {
printf("test.txtが開けません\n");
return 0;
}
if((out=fopen("test1.txt","w"))==NULL) {
printf("test1.txtが開けません\n");
fclose(in);
return 0;
}
while(fgets(szText,8,in)!=NULL) {
fprintf(out,"%s",szText);
if(strlen(szText)==7)
fprintf(out,"\n");
}
fclose(out);
fclose(in);
return 0;
}
で出来るはずだけどね……
No.3
- 回答日時:
手元のBCC5.5.1 では正常だけど、
それ以外では正常かどうか確信が持てない
添削希望回答です。
アルファベットと日本語を同じ一文字と扱うために、setlocale () を使ってます。
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main(void){
setlocale(LC_NUMERIC,"jpn");
wchar_t* fn = L"test.txt";
wchar_t* output = L"out.txt";
FILE* fp = _wfopen(fn, L"r"), *fout = _wfopen(output, L"w");
if (fp == NULL){
fwprintf(stderr, L"ERROR: \" %s \" Not Found\n", fn);
return EXIT_FAILURE;
}
wchar_t buf[8];
wchar_t* wct;
while ( ( wct = fgetws(buf, sizeof(buf)/sizeof(buf[0]), fp) ) != NULL){
fwprintf( fout, L"%s\n", wct );
}
fcloseall();
return EXIT_SUCCESS;
}
No.1
- 回答日時:
7文字毎に改行する方法ならば以下でどうでしょう。
strlenを使う必要はないです。
0. 書き出し用バッファを初期化する。
1. ループして、読み込んだ文字を1文字ずつ書き出し用バッファに追加する。
2. 7文字出来たらループを抜ける。
3. 改行文字を書き出し用バッファに追加。
4. 読み込む文字がまだあるのならば1.に戻る。
5. 読み込む文字が終了したら書き出しバッファの内容をtest1.txtに書き出す。
1.のところでは半角、全角の処理をきちんとやってくださいね。
まずは、こんな夜分にお返事をして下さってありがとうございます。質問欄に記述し忘れたのですがC言語は素人同然なのでまたいくつか質問させていただきます。
書き出し用バッファとは何でしょうか?
また、半角・全角の処理をきちんとやると言うのはどういう事でしょうか?
何卒、よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Ruby ruby 1 2022/06/10 13:31
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 入力待ちをして、受け取った正の整数が表す行数だけ既存 4 2022/07/05 10:12
- PHP 文字列を段落で分ける方法を教えて下さい。 2 2023/03/09 10:03
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
- C言語・C++・C# [C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について 5 2022/10/05 11:03
- UNIX・Linux Linuxについて質問です。 以下のhistoryの出力結果から、sedコマンドのファイル名tmp1 1 2023/02/03 20:11
- Excel(エクセル) 製品番号での整列と、検索に関して 3 2023/06/28 19:20
- その他(プログラミング・Web制作) VScodeでpythonプログラムの関数を実行したい 2 2022/07/13 19:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
なぜCSQとCIP形式ではコ...
-
複数ファイルの同時読み込みの...
-
256*256の読み込み、fscanfでは...
-
テキストを一文字以上ずつ読み...
-
C言語 ファイル入出力について
-
CSVファイルの内容を構造体に格...
-
OpenGLによる描画内容をBMP出力
-
大量の入力ファイルを扱うとき...
-
fopenの使い方
-
自己相関関数を求めるプログラ...
-
辞書順にソートしたいのですが...
-
C言語でファイル読み書きを早く...
-
c言語でのfscanfについて
-
Winsockの通信処理にてファイル...
-
C言語による画像処理で出力時に...
-
ガンマ変換 C言語でプログラ...
-
C言語におけるファイル読み込み...
-
テキストファイルに出力した結...
-
C言語 連番データの読み込み
-
C言語について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
日本語ファイル名のFTPについて
-
C言語でファイル読み書きを早く...
-
複数ファイルの同時読み込みの...
-
ファイル出力で改行を入れたい!
-
c言語でのfscanfについて
-
ファイルへの書込み処理が異常...
-
テキストファイル内に対して, ...
-
CRC32の計算方法
-
fgets( ) の返り値は何?
-
VisualStudioでのファイルの入...
-
C言語にてXMLファイルから任意...
-
datファイルの読み込み
-
CSVファイルの内容を構造体に格...
-
C言語 連番データの読み込み
-
Winsockの通信処理にてファイル...
-
fopenでファイル名に、変数を使...
-
容量の大きいCSVファイルの読み...
-
画像の白黒表示
-
ライブラリ関数と同名のメンバ関数
-
YUV動画像を1ピクセルごとにず...
おすすめ情報