敢えてCプログラムでやる場合のサンプルです
TZ=EDT date +'%w %m %-d %T %Z %Y' | ./translation fr.txt
として実行してください。
c
1 # include <stdio.h>
2 # include <string.h>
3
4 int main ( int argc , char * argv [ ] )
5 {
6 int i ;
7 if ( argc != 2 ) {
8 printf ( "ファイルが指定されていません\n" ) ;
9 return - 1 ;
10 }
11
12 FILE * fp ;
13 char * fname = argv [ 1 ] ;
14 fp = fopen ( fname , "r" ) ;
15 if ( fp == NULL ) {
16 printf ( "%sファイルが開けません¥n" , fname ) ;
17 return - 1 ;
18 }
19
20 char mbuf [ 12 ] [ 20 ] = { 0 } ;
21 char wbuf [ 7 ] [ 20 ] = { 0 } ;
22
23 fscanf ( fp , "%s %s %s %s %s %s %s\n" , wbuf [ 0 ] , wbuf [ 1 ] , wbuf [ 2 ] , wbuf [ 3 ] , wbuf [ 4 ] , wbuf [ 5 ] , wbuf [ 6 ] ) ;
24 fscanf ( fp , "%s %s %s %s %s %s %s %s %s %s %s %s\n" , mbuf [ 0 ] , mbuf [ 1 ] , mbuf [ 2 ] , mbuf [ 3 ] , mbuf [ 4 ] ,
25 mbuf [ 5 ] , mbuf [ 6 ] , mbuf [ 7 ] , mbuf [ 8 ] , mbuf [ 9 ] , mbuf [ 10 ] , mbuf [ 11 ] ) ;
26 fclose ( fp ) ;
27
28 int mon , week , day ;
29 char tim [ 10 ] = { 0 } , zon [ 10 ] = { 0 } , yar [ 10 ] = { 0 } ;
30
31 scanf ( "%d %d %d %s %s %s\n" , & week , & mon , & day , tim , zon , yar ) ;
32 printf ( "%s %s %d %s %s %s\n" , wbuf [ week ] , mbuf [ mon - 1 ] , day , tim , zon , yar ) ;
33 return 0 ;
34 }
すみません遅れてしまいました。急な野暮用が発生したので・・・・・
解説を付けさせて頂きます。まずこのプログラムの概要
Linuxのdateにて日付を取得する様にします、その際にタイムゾーンは
標準(EDT)にて表示、さらにweekdayは番号、0スタートの日曜日で出力
する様にします。
TZ=EDT date +'%w %m %-d %T %Z %Y' と実行すると
4 10 20 04:27:21 EDT 2016 が得られるとします。
上記の場合4なので木曜日になります。もし動きが変であればこの結果
が得られていないかをご確認ください。OSにより違う表示の場合が有る
かもしれません。
ご指定のファイルfr.txtは、日曜始まりになっているのでこれを利用
する事とします。
Dimanche Lundi Mardi Mercredi Jeudi Vendredi Samedi
月は10ですので調度10番目の文字列とします。
以下ソースの中身とインラインにてご説明です。
char mbuf[12][20]={0};
char wbuf[7][20]={0};
//mbuf 月を格納するエリアを確保します。20文字×12の配列で初期値は0(0x00)とします。
//同様にwbufエリアを取ります。
fscanf(fp, "%s %s %s %s %s %s %s\n", wbuf[0], wbuf[1], wbuf[2], wbuf[3], wbuf[4], wbuf[5], wbuf[6]);
fscanf(fp, "%s %s %s %s %s %s %s %s %s %s %s %s\n", mbuf[0], mbuf[1], mbuf[2], mbuf[3], mbuf[4],
mbuf[5], mbuf[6], mbuf[7], mbuf[8], mbuf[9], mbuf[10], mbuf[11]);
//ファイルfpから文字列と数字は一度に取得するfscanfを使ってwbuf配列に文字列を設定します。
//"%s %s %s %s %s %s %s\n"は、ブランクでセパレートされた7個の文字列のファイル1行の形を指定しています。
//fscanfは右から順にwbuf[0]へ1番目の文字列、wbuf[1]へ2番目と入れて7番目の配列に文字列を設定します。
//次のfscanfはファイルの二行目を読込み同様にmbufへ文字列を設定します。
fclose( fp );
int mon, week, day;
char tim[10]={0}, zon[10]={0}, yar[10]={0};
scanf("%d %d %d %s %s %s\n", &week, &mon, &day, tim, zon, yar);
//scanfは標準入力stdinからの読込みを行います。dateがパイプされたストリームが読み込まれます。
//このストリームには数字と文字列が混在しているので%dで数字、%sで文字列として各項目に値を設定します。
printf("%s %s %d %s %s %s\n", wbuf[week], mbuf[mon-1], day, tim, zon, yar);
//printfは標準出力へのものです、その際weekは0スタートでしたのでそのまま配列で配置して月は1からのスタートなので-1を行い配置し%sにて出力します。
return 0;
}
疑問がございますれば、お知らせください。
ちょっと書き方が良くないので修正しました。fscanfのセパレータのデフォルトはTAB,空白でした。
c
1 # include <stdio.h>
2 # include <string.h>
3
4 int main ( int argc , char * argv [ ] )
5 {
6 int i ;
7 if ( argc != 2 ) {
8 printf ( "ファイルが指定されていません\n" ) ;
9 return - 1 ;
10 }
11
12 FILE * fp ;
13 char * fname = argv [ 1 ] ;
14 fp = fopen ( fname , "r" ) ;
15 if ( fp == NULL ) {
16 printf ( "%sファイルが開けません¥n" , fname ) ;
17 return - 1 ;
18 }
19
20 char mbuf [ 12 ] [ 20 ] = { 0 } ;
21 char wbuf [ 7 ] [ 20 ] = { 0 } ;
22 fscanf ( fp , "%s%s%s%s%s%s%s" , wbuf , wbuf + 1 , wbuf + 2 , wbuf + 3 , wbuf + 4 , wbuf + 5 , wbuf + 6 ) ;
23 fscanf ( fp , "%s%s%s%s%s%s%s%s%s%s%s%s" , mbuf , mbuf + 1 , mbuf + 2 , mbuf + 3 , mbuf + 4 ,
24 mbuf + 5 , mbuf + 6 , mbuf + 7 , mbuf + 8 , mbuf + 9 , mbuf + 10 , mbuf + 11 ) ;
25 fclose ( fp ) ;
26
27 //date +'%w %m %-d %T %Z %Y' 4 10 20 09:53:08 JST 2016
28 int mon , week , day ;
29 char tim [ 10 ] = { 0 } , zon [ 10 ] = { 0 } , yar [ 10 ] = { 0 } ;
30 scanf ( "%d%d%d%s%s%s" , & week , & mon , & day , tim , zon , yar ) ;
31 printf ( "%s %s %d %s %s %s\n" , wbuf [ week ] , mbuf [ mon - 1 ] , day , tim , zon , yar ) ;
32 return 0 ;
33 }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/20 00:46