66#include "Json.h"
77
88
9- // 结构体用于存储命令行参数的值
9+ // 结构体用于存储命令行参数的值
1010struct CommandLineArgs {
11- FILE * input ; // 输入流
12- FILE * output ; // 输出流
13- int compress ; // 是否压缩
14- int format ; // 是否格式化
15- int utf8Text ; // 是否为utf-8 文本 是则需资源回收时删除中间文件
16- char * convertCacheFilePath ; // 为utf-8文本时转换为gbk格式时生成的临时文件
17- char * outputFilePath ; // 需要输出文件路径, 当为utf-8文本时用于转换回utf-8文本
18-
11+ FILE * input ; // 输入流
12+ FILE * output ; // 输出流
13+ int compress ; // 是否压缩
14+ int format ; // 是否格式化
15+ // int utf8Text; // 是否为utf-8 文本 是则需资源回收时删除中间文件
16+ // char* convertCacheFilePath; // 为utf-8文本时转换为gbk格式时生成的临时文件
17+ // char* outputFilePath; // 需要输出文件路径, 当为utf-8文本时用于转换回utf-8文本
1918};
2019
21- // 函数声明
20+ // 函数声明
2221struct CommandLineArgs parseCommandLineArgs (int argc , char * argv []);
2322
2423int main (const int argc , char * argv []) {
25- // setlocale(LC_ALL, ""); // 设置本地化环境以支持宽字符
24+ // setlocale(LC_ALL, ""); // 设置本地化环境以支持宽字符
2625 const struct CommandLineArgs args = parseCommandLineArgs (argc , argv );
27- // 设置输入输出流
28- // 默认为标准输入输出
26+ // 设置输入输出流
27+ // 默认为标准输入输出
2928 setInputStream (args .input );
30- setOutputStream (args .output );
31-
32- //解析Json
29+ setOutputStream (args .output );
30+
31+ //解析Json
3332 const struct JsonVal * json = parseValue ();
34- if (args .compress ) {
35- printJsonVal (json );
36- }
37- else if (args .format ) {
38- printfJsonVal (json , 0 );
39- }
33+ if (args .compress ) { printJsonVal (json ); }
34+ else if (args .format ) { printfJsonVal (json , 0 ); }
4035
4136 //destoryJsonVal(json);
42- if (args .input != stdin ) {
43- fclose (args .input );
44- }
37+ if (args .input != stdin ) { fclose (args .input ); }
4538 if (args .output != stdout ) {
4639 fclose (args .output );
47- if (args .utf8Text ) {
48- convertGbkToUtf8 (args .output );
49- }
40+ // if (args.utf8Text) { convertGbkToUtf8(args.output); }
5041 }
51- return 0 ;
42+ return 0 ;
5243}
5344
54- // 函数定义:解析命令行参数
45+ // 函数定义:解析命令行参数
5546struct CommandLineArgs parseCommandLineArgs (int argc , char * argv []) {
5647 struct CommandLineArgs args ;
5748
58- // 初始化结构体成员
49+ // 初始化结构体成员
5950 args .input = stdin ;
6051 args .output = stdout ;
6152 args .compress = 0 ;
6253 args .format = 1 ;
63- args .utf8Text = 0 ;
64- args .convertCacheFilePath = "" ;
65- // 标记是否已经出现了--format或--compress
54+ // args.utf8Text = 0;
55+ // args.convertCacheFilePath = "__cache.json ";
56+ // 标记是否已经出现了--format或--compress
6657 int formatSeen = 0 ;
6758 int compressSeen = 0 ;
68- // 解析命令行参数
59+ // 解析命令行参数
6960 for (int i = 1 ; i < argc ; ++ i ) {
7061 if (strcmp (argv [i ], "--output" ) == 0 || strcmp (argv [i ], "-of" ) == 0 ) {
71- // 指定输出流
62+ // 指定输出流
7263 if (i + 1 < argc ) {
7364 printf ("Output: %s\n" , argv [i + 1 ]);
7465 args .output = fopen (argv [i + 1 ], "w" );
75- args .outputFilePath = argv [i + 1 ];
66+ // args.outputFilePath = argv[i + 1];
7667 if (args .output == NULL ) {
7768 perror ("Error opening output file" );
7869 exit (EXIT_FAILURE );
7970 }
80- i ++ ; // 跳过下一个参数,因为它是文件路径
71+ i ++ ; // 跳过下一个参数,因为它是文件路径
8172 }
8273 else {
8374 fprintf (stderr , "Error: --output option requires a file path.\n" );
8475 exit (EXIT_FAILURE );
8576 }
8677 }
8778 else if (strcmp (argv [i ], "--input" ) == 0 || strcmp (argv [i ], "-if" ) == 0 ) {
88- // 指定输入流
79+ // 指定输入流
8980 if (i + 1 < argc ) {
90- FILE * f = fopen (argv [i + 1 ], "r" );
91- args . convertCacheFilePath = "__cache.json" ;
92- if ( isUtf8 ( f )) {
93- printf ( "INFO: Is UTF-8 Text\n" );
94- args . input = convertUtf8ToGbk ( f , args . convertCacheFilePath );
95- args .utf8Text = 1 ;
96- } else {
97- args . input = fopen ( argv [ i + 1 ], "r" );
98- }
81+ args . input = fopen (argv [i + 1 ], "r" );
82+ // FILE* f = fopen(argv[i + 1], "r") ;
83+
84+ // if (isUtf8(f)) {
85+ // printf("INFO: Is UTF-8 Text\n" );
86+ // args.input = convertUtf8ToGbk(f) ;
87+ // args.utf8Text = 1;
88+ // }
89+ // else { args.input = fopen(argv[i + 1], "r"); }
9990 if (args .input == NULL ) {
10091 perror ("Error opening input file" );
10192 exit (EXIT_FAILURE );
10293 }
103- i ++ ; // 跳过下一个参数,因为它是文件路径
94+ i ++ ; // 跳过下一个参数,因为它是文件路径
10495 }
10596 else {
10697 fprintf (stderr , "Error: --input option requires a file path.\n" );
10798 exit (EXIT_FAILURE );
10899 }
109100 }
110101 else if (strcmp (argv [i ], "--compress" ) == 0 || strcmp (argv [i ], "-c" ) == 0 ) {
111- // 压缩格式输出Json
102+ // 压缩格式输出Json
112103 if (formatSeen ) {
113104 fprintf (stderr , "Error: --compress and --format cannot be used together.\n" );
114105 exit (EXIT_FAILURE );
@@ -118,7 +109,7 @@ struct CommandLineArgs parseCommandLineArgs(int argc, char* argv[]) {
118109 compressSeen = 1 ;
119110 }
120111 else if (strcmp (argv [i ], "--format" ) == 0 || strcmp (argv [i ], "-f" ) == 0 ) {
121- // 格式化输出Json
112+ // 格式化输出Json
122113 if (compressSeen ) {
123114 fprintf (stderr , "Error: --compress and --format cannot be used together.\n" );
124115 exit (EXIT_FAILURE );
@@ -127,23 +118,23 @@ struct CommandLineArgs parseCommandLineArgs(int argc, char* argv[]) {
127118 formatSeen = 1 ;
128119 }
129120 else if (strcmp (argv [i ], "--help" ) == 0 || strcmp (argv [i ], "-h" ) == 0 ) {
130- printf ("用法:json [选项]...\n" );
131- printf ("从输入中解析和格式化JSON数据,可选择压缩或格式化输出。\n\n" );
121+ printf ("用法:json [选项]...\n" );
122+ printf ("从输入中解析和格式化JSON数据,可选择压缩或格式化输出。\n\n" );
132123
133- printf ("长选项的强制性参数对于短选项也是强制性的。\n" );
134- printf (" -if, --input 指定输入文件(默认为标准输入)\n" );
135- printf (" -of, --output 指定输出文件(默认为标准输出)\n" );
136- printf (" -f, --format 使用树形缩进输出格式化的JSON\n" );
137- printf (" -c, --compress 输出压缩的JSON\n" );
138- printf (" -h, --help 显示此帮助并退出\n\n" );
124+ printf ("长选项的强制性参数对于短选项也是强制性的。\n" );
125+ printf (" -if, --input 指定输入文件(默认为标准输入)\n" );
126+ printf (" -of, --output 指定输出文件(默认为标准输出)\n" );
127+ printf (" -f, --format 使用树形缩进输出格式化的JSON\n" );
128+ printf (" -c, --compress 输出压缩的JSON\n" );
129+ printf (" -h, --help 显示此帮助并退出\n\n" );
139130
140- printf ("示例:\n" );
131+ printf ("示例:\n" );
141132 printf (" json -if input.json -of output.json -f\n" );
142133 printf (" json --input=input.json --output=output.json --compress\n\n" );
143134
144- printf ("如果未指定输入或输出文件,则程序将默认使用标准输入或标准输出。\n\n" );
135+ printf ("如果未指定输入或输出文件,则程序将默认使用标准输入或标准输出。\n\n" );
145136
146- printf ("注意:--compress 和 --format 选项不能同时使用。\n" );
137+ printf ("注意:--compress 和 --format 选项不能同时使用。\n" );
147138 exit (0 );
148139 }
149140 else {
@@ -153,4 +144,4 @@ struct CommandLineArgs parseCommandLineArgs(int argc, char* argv[]) {
153144 }
154145
155146 return args ;
156- }
147+ }
0 commit comments