ファイルの中身のソート – 固定ページ 2 – プログラミング – Home

ファイルの中身のソート
 
通知
すべてクリア

[解決済] ファイルの中身のソート

固定ページ 2 / 2

島
 島
(@島)
ゲスト
結合: 23年前
投稿: 238
 

解決なさったのは喜ばしい事ですが、できればどのように解決なさったのか示して戴ければ
後々(のちのち)別の方々への参考になると思います


返信引用
エハラミホ
 エハラミホ
(@エハラミホ)
ゲスト
結合: 23年前
投稿: 2
 

遅くなってすみません。いろいろ忙しくて......
教えてくださった皆さんありがとうございました。
下記の方法で解決!!しました。

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

#define BUFLEN 300

int cmp(const void *c1, const void *c2);

void main(int argc, char *argv[])
{
FILE *fin, *fout; //ファイルポインタ
int i, lc; //ループカウンタ、ファイル数
char buf[BUFLEN], **line;

if (argc != 3) exit(1);
if ((fin = fopen(argv[1], r)) == NULL) { // 入力ファイルオープン
printf(入力ファイルがオープンできません\n);
exit(1);
}

for (lc = 0; fgets(buf, BUFLEN, fin); lc++);
// printf(lc = %d,lc);
rewind(fin);

if ((line = (char **)malloc(sizeof(char *) * lc)) == NULL) exit(1);

for (i = 0; i < lc; i++)

if ((line[i] = (char *)malloc(BUFLEN)) == NULL) exit(1);

for (i = 0; i < lc && fgets(line[i], BUFLEN, fin); i++);

fclose(fin);

qsort(line, lc, sizeof(char *), cmp);

if ((fout = fopen(argv[2], w)) == NULL) { // 出力ファイルオープン
printf(出力ファイルがオープンできません\n);
exit(1);
}

for (i = 0; i < lc; i++) fputs(line[i], fout);

fclose(fout);
for (i = 0; i < lc; i++) free(line[i]);
free(line);
return;
}

int cmp(void const *c1, void const *c2){

if (!strncmp(*(const char **)c1 + 96, 0000, 4)) return 1;
if (!strncmp(*(const char **)c2 + 96, 0000, 4)) return -1;
if (!strncmp(*(const char **)c1 + 96, , 4)) return 1;
if (!strncmp(*(const char **)c2 + 96, , 4)) return -1;

  return strncmp(*(const char **)c1 + 96, *(const char **)c2 + 96, 4);
}


返信引用
固定ページ 2 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました