精华内容
下载资源
问答
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼一般在屏幕上显示...在UCDOS的点阵字库HZK16,字符点阵是按照汉字内码排列的,汉字的内码一些图形字符开始,起始编码为A1A1H,汉字内码第一位为区码,每区为94个汉...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

    一般在屏幕上显示汉字的时候需要汉字系统的支持,但需要自己显示汉字的时候,就需要自己读汉字字库文件,把字符点阵读出来,再用绘图的办法显示到屏幕上,本文是读 UCDOS 16点字库文件的示例。

    在 UCDOS 的点阵字库 HZK16 中,字符点阵是按照汉字内码排列的,汉字的内码从一些图形字符开始,起始编码为 A1A1H,汉字内码第一位为区码,每区为 94 个汉字,第二位为每区内的编码,每个汉字的点阵为 16点*16点 共32字节,数据按第一行 1-8点,9-16点,第二行 1-8点,9-16点...排列,每位数据 1 为要显示点,0 为不显示点。汉字点阵数据在字库中的偏移量为 ((区码-A1H)*94 + (区内编码-A1H))*32。

    本程序为一个简单的例子,要显示的汉字在变量 DISP_DATA 中,且没有考虑汉字、英文混用的情况。

    源程序:

    ; Write in May 22,1996

    ;            By LuoYunBin ----- http://asm.yeah.net

    .286

    LINE_CHAREQU210;在屏幕上第几行显示

    COL_CHAREQU230;在屏幕上第几列显示

    COLOR_CHAREQU0EH;显示颜色

    CHARSEQU(offset disp_data_end-offset disp_data)/2

    CODESEGMENT

    ASSUME CS:CODE,DS:CODE

    ORG 100H

    START:

    jmpinstall

    CC_FILEDB'C:\UCDOS\HZK16',0;字库文件名,用 UCDOS 的16点阵汉字库

    HANDLEDW?;file handle

    DISP_DATADB'罗云彬';要显示的汉字

    DISP_DATA_ENDEQUTHIS BYTE

    D_OPEN_ERRORDB'File C:\UCDOS\HZK16 not found !',0dh,0ah,24h

    install:

    movax,3d00h;打开汉字库

    movdx,offset cc_file

    int21h

    jnbopen_ok

    movah,9

    movdx,offset d_open_error

    int21h

    int20h

    open_ok:

    movhandle,ax

    movsi,offset disp_data

    movdi,offset zi_buffer

    movcx,chars

    cld

    ins2:

    lodsb

    movah,al

    lodsb

    callget_dots;读出汉字点针

    loopins2

    calldisp_cc;显示到屏幕

    int20h

    GET_DOTSPROC

    pusha

    subax,0a1a1h;汉字的内码从 A1区开始

    cwd

    movdl,al;所以绝对开始区是内码-A1

    moval,ah;点阵在字库中的位置为

    cbw

    movbl,94;((汉字码1-A1)* 94 + 汉字码2 - A1)* 32

    mulbl

    addax,dx

    movbx,32

    mulbx

    movcx,dx

    movdx,ax

    movax,4200h;移动读写指针到点阵数据位置

    movbx,handle

    int21h

    movah,3fh

    movcx,32

    movdx,di

    int21h

    popa

    adddi,32

    ret

    GET_DOTSENDP

    DISP_CCPROC

    movax,12h;640*480 mode

    int10h;设置640*480/16色显示模式

    movcx,chars

    movsi,offset zi_buffer

    movbx,col_char-20;BX = column

    dh_lop0:

    addbx,20;every char column+20

    pushcx

    movcx,16;l6 lines/char

    movdx,line_char;DX = start line

    dh_lop1:

    pushbx

    pushcx

    lodsb;16 dots/line

    movah,al

    lodsb

    movcx,16

    dh_lop2:

    shlax,1

    pushax

    pushbx

    pushcx

    jcdb_color

    xoral,al;back color is 0

    jmpshort db_draw

    db_color:

    moval,color_char

    db_draw:

    movah,0ch

    movcx,bx

    xorbh,bh

    int10h

    popcx

    popbx

    popax

    incbx;inc column

    loopdh_lop2

    incdx;next line

    popcx

    popbx

    loopdh_lop1

    popcx

    loopdh_lop0

    xorah,ah

    int16h

    movax,3

    int10h

    ret

    DISP_CCENDP

    ZI_BUFFEREQUTHIS BYTE

    CODEENDS

    END START

    展开全文
  • C语言操作EXCEL文件(读写)本文主要介绍通过纯C语言进行EXCEL的读写操作:(修改时间2018.08.28,如果运行结果均是0,请看文章最后一节)C语言读操作C语言写操作在之前需要使用C语言读取Excel文件内容的功能,查阅了很...

    C语言操作EXCEL文件(读写)

    本文主要介绍通过纯C语言进行EXCEL的读写操作:(修改时间2018.08.28,如果运行结果均是0,请看文章最后一节)

    C语言读操作

    C语言写操作

    在之前需要使用C语言读取Excel文件内容的功能,查阅了很多资料,大部分是通过ODBC或者过OLE/COM对Excel表格的读取操作,这变要求在工程中添加类,如CApplicaton及其头文件等,这包括Excel接口、导入类、头文件等。操作十分复杂,当然我也对这种方法进行了尝试,也实现了功能,这种方法实现的功能比较多,一般我们只是进行简单的读写操作,所以并不是很想使用这种方法。下面通过C语言读写程序来实现。

    一、写操作

    第一步:单纯C语言写入Excel文件只能是.xls或者.csv的后缀文件,它们可以通过Notepad++等记事本软件当做txt文件打开。

    需要注意的是:当对*.xls文件写入或者读取之后,再打开Excel文件时会弹出格式兼容的提示窗口,因为这样的C语言操作Excel文件是当文本文件打开操作的,所以会忽略原有格式,但是不影响,点击“是(Y)”即可,如下图所示:

    a4c26d1e5885305701be709a3d33442f.png

    第二步:对表格的处理,使用C语言打开表格后,文件指针指向整个表格的第1行第1列。 如果要给它的下一个同行单元格(第1行第2列)写数据,使用”\t” ; 如果要给它的下一个同列单元格(第2行第1列)写数据,使用”\n” 。

    具体代码如下:

    void writeExcel()

    {

    char chy[4]={ 'x' ,'a' ,'h','w' } ;

    int data[4]={ 1 , 3 , 6 ,9 };

    int i ;

    FILE *fp = NULL ;

    fp = fopen("G:\\Desktop\\test.xls","w") ;

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

    fprintf(fp,"%c\t%d\n",chy[i],data[i] ) ;

    fclose(fp);

    }

    void main()

    {

    writeExcel() ;

    }

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    运行结果

    a4c26d1e5885305701be709a3d33442f.png

    a4c26d1e5885305701be709a3d33442f.png

    二、读操作

    读取文件

    a4c26d1e5885305701be709a3d33442f.png a4c26d1e5885305701be709a3d33442f.png

    对于读取Excel文件的操作,使用了文件随机定位函数fseek(),它的一般调用格式如下:

    fseek(文件指针,位移量,起始位置) ;

    fseek()参数说明:

    位移量

    指重新定位时的字节偏移数,表示相对于基址的字符数,通常是一个长整型数,可以是整形常量,整形表达式等。如果用整型常量,需要再后面加上字母“L”;如果使用整形表达式需要用“(long)(表达式)”强制转换成长整形。

    起始位置

    指重新定位时的基准点,也就是基址,用整数或符合常量表示。如下表:

    整数

    符号常量

    对应的起始位置

    0

    SEEK_SET

    文件开头

    1

    SEEK_CUR

    文件指针的当前位置

    2

    SEEK_END

    文件末尾

    例如: fseek(fp , 10L , 0) ;

    具体代码如下:

    #include

    void main()

    {

    FILE *fp;

    char filename[40] ;

    int i,j ;

    float da[6][5] = {0} ;

    printf(" 输入文件名: ");

    gets(filename);

    fp=fopen(filename,"r"); // fp指针指向文件头部

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

    for(j = 0 ;j < 5 ; j++)

    {

    fscanf(fp,"%f",&da[i][j]);

    fseek(fp, 5L, SEEK_CUR);

    }

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

    printf("%f\t%f\t%f\t%f\t%f\t\n",da[i][0],

    da[i][1],da[i][2],da[i][3],da[i][4]);

    }

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    运行结果

    a4c26d1e5885305701be709a3d33442f.png

    十分抱歉,由于个人疏忽,代码给大家带来麻烦,再次表示抱歉。以上读Excel文件的错误已经解决,代码已经更新,错误的产生是由于fseek(

    )函数放错了位置,以及其中第二个参数的偏移量的错误,若大家在以后学习中发现读取数据全为0或者读取数据顺序位置不正确,请查阅fseek(

    )函数的参数使用方法。

    另外,上述开发是在CodeBlocks中进行的,如果使用Visual Stdio

    2010等版本软件,出现闪退问题,是软件自身bug所致,在main( )函数结尾添加”system(“pause”);

    或者getchar( ); ” 即可解决,对应的VS2010读Excel实例如下:

    例程: a4c26d1e5885305701be709a3d33442f.png

    读该Excel文件代码如下:

    #include

    void main()

    {

    FILE *fp;

    char filename[40] ;

    int i,j ;

    float da[6][5] = {0} ;

    printf(" 输入文件名: ");

    gets(filename);

    fp=fopen("as.csv","r");

    fseek(fp, 5L, SEEK_SET); // 从文件第二行开始读取

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

    for(j = 0 ;j < 5 ; j++)

    {

    fscanf(fp,"%f",&da[i][j]);

    fseek(fp, 1L, SEEK_CUR);

    }

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

    printf("%f\t%f\t%f\t%f\t%f\t\n",da[i][0],

    da[i][1],da[i][2],da[i][3],da[i][4]);

    getchar() ;

    }

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    VS2010工程如下: a4c26d1e5885305701be709a3d33442f.png

    运行结果: a4c26d1e5885305701be709a3d33442f.png

    三、最新补充 2018.08.28

    由于经常有朋友告诉我运行结果是0

    ,并将他们的工程发到我邮箱,我试着运行了下,确实发现是0.0 ,程序没有报错。 然后,我试着将他们发给我的工程里的excel文件或者csv文件打开,发现会弹出提示文件损坏,如果我点击“是”的话,文件同样可以继续打开,这可能是文件格式损坏了,所以程序计算不了数据的位置。我简单的将他们的excel文件重新另存为了一个excel,便运行成功了。他们的excel问题如下图。 a4c26d1e5885305701be709a3d33442f.png

    损坏后还可以打开: a4c26d1e5885305701be709a3d33442f.png

    谢谢!

    有问题可以将工程打包发邮箱hongzhen91@yeah.net ,我会尽快查看,一起讨论下。

    展开全文
  • C语言中文件读取和写入

    千次阅读 2018-07-17 09:02:23
    注意: 1、由于C是缓冲写 所以要在关闭或刷新后才能看到文件内容 2、电脑处理文本型和二进制型的不同 (因为电脑只认识二进制格式) 在C语言中文件 //获取文件指针FILE *pFi
    原文地址为:
    C语言中文件的读取和写入
    

     

    注意:

     

    1、由于C是缓冲写 所以要在关闭或刷新后才能看到文件内容

     

    2、电脑处理文本型和二进制型的不同 (因为电脑只认识二进制格式

    在C语言中写文件

    //获取文件指针
    FILE *pFile = fopen("1.txt", //打开文件的名称 "w"); // 文件打开方式 如果原来有内容也会销毁
    //向文件写数据
    fwrite ("hello", //要输入的文字 1,//文字每一项的大小 以为这里是字符型的 就设置为1 如果是汉字就设置为4
    strlog("hello"), //单元个数 我们也可以直接写5
    pFile //我们刚刚获得到的地址
    );
    //fclose(pFile); //告诉系统我们文件写完了数据更新,但是我们要要重新打开才能在写
    fflush(pFile); //数据刷新 数据立即更新

    在C语言中读文件

    FILE *pFile=fopen("1.txt","r"); //获取文件的指针
    char *pBuf; //定义文件指针
    fseek(pFile,0,SEEK_END); //把指针移动到文件的结尾 ,获取文件长度
    int len=ftell(pFile); //获取文件长度
    pBuf=new char[len+1]; //定义数组长度
    rewind(pFile); //把指针移动到文件开头 因为我们一开始把指针移动到结尾,如果不移动回来 会出错
    fread(pBuf,1,len,pFile); //读文件
    pBuf[len]=0; //把读到的文件最后一位 写为0 要不然系统会一直寻找到0后才结束
    MessageBox(pBuf); //显示读到的数据
    fclose(pFile); // 关闭文件

    转载请注明本文地址: C语言中文件的读取和写入
    展开全文
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼一般在屏幕上显示...在UCDOS的点阵字库HZK16,字符点阵是按照汉字内码排列的,汉字的内码一些图形字符开始,起始编码为A1A1H,汉字内码第一位为区码,每区为94个汉...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

    一般在屏幕上显示汉字的时候需要汉字系统的支持,但需要自己显示汉字的时候,就需要自己读汉字字库文件,把字符点阵读出来,再用绘图的办法显示到屏幕上,本文是读 UCDOS 16点字库文件的示例。

    在 UCDOS 的点阵字库 HZK16 中,字符点阵是按照汉字内码排列的,汉字的内码从一些图形字符开始,起始编码为 A1A1H,汉字内码第一位为区码,每区为 94 个汉字,第二位为每区内的编码,每个汉字的点阵为 16点*16点 共32字节,数据按第一行 1-8点,9-16点,第二行 1-8点,9-16点...排列,每位数据 1 为要显示点,0 为不显示点。汉字点阵数据在字库中的偏移量为 ((区码-A1H)*94 + (区内编码-A1H))*32。

    本程序为一个简单的例子,要显示的汉字在变量 DISP_DATA 中,且没有考虑汉字、英文混用的情况。

    源程序:

    ; Write in May 22,1996

    ;            By LuoYunBin ----- http://asm.yeah.net

    .286

    LINE_CHAREQU210;在屏幕上第几行显示

    COL_CHAREQU230;在屏幕上第几列显示

    COLOR_CHAREQU0EH;显示颜色

    CHARSEQU(offset disp_data_end-offset disp_data)/2

    CODESEGMENT

    ASSUME CS:CODE,DS:CODE

    ORG 100H

    START:

    jmpinstall

    CC_FILEDB'C:\UCDOS\HZK16',0;字库文件名,用 UCDOS 的16点阵汉字库

    HANDLEDW?;file handle

    DISP_DATADB'罗云彬';要显示的汉字

    DISP_DATA_ENDEQUTHIS BYTE

    D_OPEN_ERRORDB'File C:\UCDOS\HZK16 not found !',0dh,0ah,24h

    install:

    movax,3d00h;打开汉字库

    movdx,offset cc_file

    int21h

    jnbopen_ok

    movah,9

    movdx,offset d_open_error

    int21h

    int20h

    open_ok:

    movhandle,ax

    movsi,offset disp_data

    movdi,offset zi_buffer

    movcx,chars

    cld

    ins2:

    lodsb

    movah,al

    lodsb

    callget_dots;读出汉字点针

    loopins2

    calldisp_cc;显示到屏幕

    int20h

    GET_DOTSPROC

    pusha

    subax,0a1a1h;汉字的内码从 A1区开始

    cwd

    movdl,al;所以绝对开始区是内码-A1

    moval,ah;点阵在字库中的位置为

    cbw

    movbl,94;((汉字码1-A1)* 94 + 汉字码2 - A1)* 32

    mulbl

    addax,dx

    movbx,32

    mulbx

    movcx,dx

    movdx,ax

    movax,4200h;移动读写指针到点阵数据位置

    movbx,handle

    int21h

    movah,3fh

    movcx,32

    movdx,di

    int21h

    popa

    adddi,32

    ret

    GET_DOTSENDP

    DISP_CCPROC

    movax,12h;640*480 mode

    int10h;设置640*480/16色显示模式

    movcx,chars

    movsi,offset zi_buffer

    movbx,col_char-20;BX = column

    dh_lop0:

    addbx,20;every char column+20

    pushcx

    movcx,16;l6 lines/char

    movdx,line_char;DX = start line

    dh_lop1:

    pushbx

    pushcx

    lodsb;16 dots/line

    movah,al

    lodsb

    movcx,16

    dh_lop2:

    shlax,1

    pushax

    pushbx

    pushcx

    jcdb_color

    xoral,al;back color is 0

    jmpshort db_draw

    db_color:

    moval,color_char

    db_draw:

    movah,0ch

    movcx,bx

    xorbh,bh

    int10h

    popcx

    popbx

    popax

    incbx;inc column

    loopdh_lop2

    incdx;next line

    popcx

    popbx

    loopdh_lop1

    popcx

    loopdh_lop0

    xorah,ah

    int16h

    movax,3

    int10h

    ret

    DISP_CCENDP

    ZI_BUFFEREQUTHIS BYTE

    CODEENDS

    END START

    展开全文
  • 文件名:通常由路径、主文件名、扩展名三部分组成 例如:F : \C_2011\labs\lab_15.doc文件分类可以不同的角度对文件进行分类1、根据文件的内容,可分为程序文件和数据文件。而程序文件又可分为源文件、目标文件和...
  • C语言文件输入输出读取中文TXT文件出现乱码

    万次阅读 多人点赞 2018-03-17 19:18:37
    今天在实现一个倒序输出文件的程序时测试了英文数字和中文,唯独中文出现了乱码,源码如下//倒序显示文件的内容 #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #define CNTL_Z '\032' //文件...
  • 了解了在C语言中如何打开文件后就可以正式进行文件读写操作了,文件根据类型又分为ASCII文件和二进制文件,我们首先简单的入手,先看看ASCII文件(文本文件)是如何读取的。ASCII文件(文本文件)保存的是一个字符...
  • 关于C语言 从文件读出的汉字为乱码

    千次阅读 2019-12-31 08:48:49
    再确定代码无误的情况下 这篇文章说的很清楚, 是因为编码的方式
  • c语言从文件中读取一个结构体数组(txt文件)

    千次阅读 多人点赞 2020-03-16 15:47:34
    c语言读写操作很多,我给大家介绍一种我常用的方法。 //读取文件 File *fp=fopen("wxm.txt","r"); //写入文件 File *fp=fopen("wxm.txt","w"); //关闭文件 fclose(fp); ????:关闭文件一般紧接return 0之前 下面是...
  • c语言中文件读写

    2018-03-04 11:32:01
    https://www.cnblogs.com/wgang171412/p/5089040.html
  • 这是一个读取写入txt文件的一个代码,我读取汉字之后fprintf到txt文件里是正常的,但是用printf输出时就变成了乱码。 求大神帮助!!!! 以下是代码和运行后样子。 07/23/1595513451_164747.png) #include ...
  • C语言文件读写

    2020-12-24 14:55:51
    文章目录前言一、文件的打开(fopen函数)二、文件关闭(fclose函数)三、C中文文件和二进制文件的区别四、C语言以字符形式读写文件五、C语言以字符串形式读写文件六、C语言中文件复制操作七、C语言中文件常用的...
  • 在对汉字进行操作的时候,我进行了一些字的实验,目前仅发现了一个王字,在取反后取反回去不能变成王字,我加了查看字符格式的代码,发现 王 这个字在进行第一次字符操作时候,被分解为三个字节!!!然后再操作,就...
  • 声明:本文适用于 在Linux(也许仅限于Ubuntu),使用C语言读取MySQL存储的数据时 显示的中文都是???的情况。  不是为了说一个简单的“Mysql不支持中文”(即用的仅仅是Mysql本身,自始至终不用离开mysql的...
  • C语言读取文件中文本模式和二进制模式的区别

    千次阅读 多人点赞 2016-07-22 16:14:58
     在学习C语言读取文件的时候,首先学习到的是C语言读取文件时分文本模式和二进制模式。给好多人造成疑惑,文件存储时要分类?二进制存储和文本存储完全不相同?对于纯文本必须使用文本模式?对于纯数字必须使用二...
  • C语言读取中文汉字

    万次阅读 2018-08-05 11:48:33
    一般的来说,一个汉字占两个字节,数字和字母都占一个字节,但是有一点是,汉字的两个字节如果转换成整型都是负数,也就是说,用按字节读取文件,然后判断字节的正负,如果一个字节对应的整型是负的,那么一连读取两...
  • C语言课程设计要求使用文件,然后在我进行文件操作的时候发生了一点小小的意外,读写文件中汉字显示的居然是乱码。 经过我的一番查找之后发现居然是txt编码方式的问题。 为使计算机支持更多语言,通常使用 0x80~0...
  • C语言文件读写函数总结

    千次阅读 多人点赞 2018-04-30 23:51:59
    2、从文件中读取字符 fgetc 二、字符串的读写 1、字符串写入文件函数 fputs 2、从文件中读取字符 fgets 三、块数据读写 1、向文件中写入块数据fwrite 2、从文件中读取块数据fread 四、格式化读写 1、格式化...
  • 关于什么是文件,大家应该都不陌生,如在windows大家经常看到以.txt结尾的文本文件,以.c结尾的c源文件。在介绍文件操作之前,我会讲解几个与文件相关的术语。@磁盘文件:顾名思义,存储在磁盘的文件。@二进制文件...
  • 二进制文件(映像文件):在内存以二进制形式存取。2.文本文件(ascii文件):以ascii码形式存取的文件。通俗的讲,在Mac下,你把一个文件丢进记事本里面,如果打开是乱码就是二进制文件。二.其次是文件类型指针:简单...
  • 让我们一道例题来分析,分析我都写在注释里面了。 例:编写一个程序,以一个字符和任意文件名作为命令行参数。然后输入字符所在的整行内容。(此题目是我为了讲解而自己想的,若有不足之处请多指教) 代码如下: #...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼一般在屏幕上显示...在UCDOS的点阵字库HZK16,字符点阵是按照汉字内码排列的,汉字的内码一些图形字符开始,起始编码为A1A1H,汉字内码第一位为区码,每区为94个汉...
  • C语言文件详解 引入: 主要文件操作包括以下函数: 打开文件 关闭所有打开的文件并结束程序 文件指针指向的文件流中读取一个字符 将指定字符写到文件指针所指向的当前位置上 关闭文件流释放文件指针 fopen...
  • c语言文件读写操作的详细使用方法C文件操作遇到的状况1.将一个文件读到另一个文件,用“(ch = getc(fp)) != EOF”来判断文件是否结束,如果文件是全英文文本的话绝对没问题,新文件的大小和原文件大小一样;但是如果...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,300
精华内容 10,520
关键字:

c语言从文件中读取中文

c语言 订阅