Linux讀取一行文字的方法
第一種方法:
1.網上流行的一個方法: 打印出每行的文字資訊。
#include <stdio.h> #include <stdlib.h> int main(void) { FILE * fp; char * line = NULL; size_t len = 0; ssize_t read; fp = fopen("test.txt", "r"); if (fp == NULL) exit(EXIT_FAILURE); while ((read = getline(&line, &len, fp)) != -1) { printf("Retrieved line of length %zu :\n", read); printf("%s", line); } if (line) free(line); exit(EXIT_SUCCESS); }
2.我自己稍作修改,取得指定行數的文字資訊。
#include <stdio.h> #include <stdlib.h> int get_file_line(char *pInputName, char *pOutputBuf, int cnt) { FILE * fp; int i=0; char * line = NULL; size_t len = 0; ssize_t read; fp = fopen(pInputName, "r"); if (fp == NULL) return -1; if(cnt<=0) return -2; while ((read = getline(&line, &len, fp)) != -1) { ++i; if(i>=cnt) break; } if (line) { memcpy(pOutputBuf,line,strlen(line)); free(line); return 0; } return -3; } int main(void) { char name[20]="test.txt"; char buf[256]={0}; int j; for(j=1;j<8;++j) { memset(buf,0,256); get_file_line(name,buf,j); printf("[%d] == %s",j,buf); } printf("\n"); }
執行以下,結果如圖:
在此處做一個小小的拓展,就是在每行的文字資訊中提取我們想要的資訊:
#define dIndexName "WWW" #define NAME_LEN_MAX 7 void GetName(void) { int i; char *p=NULL; char line[30]={0}; char dest_name[20]={0}; char pFileName[256]="test.txt"; get_file_line(pFileName,line,1); printf("line === %s \n",line); if((p=strstr(line,dIndexName))&&(p=strchr(line,':'))) { memcpy(dest_name,p+1,NAME_LEN_MAX); } for(i=0;i<NAME_LEN_MAX;++i) { printf("[%d] === %c \n",i,dest_name[i]); } }
執行結果,如下所示:
第二種方法:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
typedef unsigned char u8;
int get_file_line(char *pInputName, int line)
{
char pTempString[256];
u8 *pTempBuffer;
int tTempFile,tTempFileLen;
int i,m,n;
u8 tTempFlag,tTempCmdFlag;
{
tTempFile=open(pInputName,O_RDONLY);
if(tTempFile>=0)
{
tTempFileLen=lseek(tTempFile,0,SEEK_END);
lseek(tTempFile,0,SEEK_SET);
tTempCmdFlag=1;
if( NULL!=(pTempBuffer=(u8 *)malloc(tTempFileLen)) )
{
if( tTempFileLen==read(tTempFile,pTempBuffer,tTempFileLen) )
{
m=n=0;
tTempFlag=0;
while(n<tTempFileLen)
{
if( tTempFlag )
{
if( pTempBuffer[n]<0x20)
{
if( tTempFlag )
{
if( n>m )
{
memcpy(pTempString,pTempBuffer+m,n-m);
pTempString[n-m]=0;
printf("String1 %s \n",pTempString);
}
tTempFlag=0;
}
}
}else if( pTempBuffer[n]>=0x20 )
{
m=n;
tTempFlag=1;
}
n++;
}
if( (n>m)&&(tTempFlag) )
{
memcpy(pTempString,pTempBuffer+m,n-m);
pTempString[n-m]=0;
printf("String2 %s \n",pTempString);
}
tTempCmdFlag=0;
}
free(pTempBuffer);
}
close(tTempFile);
return tTempCmdFlag;
}
}
return 2;
}
void main(void)
{
char name[20]="tmp.txt";
get_file_line(name,0);
}
有點長,但是也算一種辦法啦。
相關推薦
Linux讀取一行文字的方法
第一種方法: 1.網上流行的一個方法: 打印出每行的文字資訊。 #include <stdio.h> #include <stdlib.h> int main(void) { FILE * fp; char * line = N
黑馬基礎階段測試題:通過字符輸入流讀取info.txt中的所有內容,每次讀取一行,將每一行的第一個文字截取出來並打印在控制臺上。
print swift red amr ack pub flush app args package com.swift; import java.io.BufferedReader; import java.io.BufferedWriter; import java
C語言從stdin讀取一行字串的幾種方法
C語言從stdin讀取一行字串的幾種方法 gets gets函式的標頭檔案是<stdio.h>,原型如下: char *gets(char *s); gets從stdin中讀入一行內容到s指定的buffer中,當遇到換行符或EOF時讀取結束。讀取成功時,返
【轉載】SAP ABAP中讀取專案文字 READ_TEXT 的方法
在SAP系統裡面很多地方都用到了長文字,這些長文字的值以其他字元的形式存在表STXL和STXH裡面,不能直接去這兩個表裡面去取值,而是要通過函式READ_TEXT去取,很多新手不瞭解的地方可能就是怎麼取到READ_TEXT函式裡面的那些引數值,我這邊介紹兩種方法,通過這兩種
linux下統計文字行數的各種方法之使用shell指令碼統計
上一篇講的都是統計單個檔案的方法,直接在命令列執行就可以。現在試試指令碼的方式,統計多個檔案的行數 一、統計目錄下所有檔案的檔案數及所有行數 指令碼暫時命名為count.sh,程式碼如下: #!/bin/bash # 計算當前或者指定目錄的檔案數目及所有檔案的行數 fileCou
linux下統計文字行數的各種方法之命令列統計
檔案test1.txt有17行 方法一: awk ‘{print NR}’ test1.txt | tail -n1 管道前列印所有行號,管道後則列印最後一行 或者: awk ‘END{print NR}’ test1.txt 方法二: grep -n ‘’ te
MFC用CStdioFile類讀取中文文字時亂碼問題的一種解決方法
在文章開始之前,先宣告一下,本人的程式設計環境為vs2010,MFC工程使用unicode字符集。 在MFC中,用CStdioFile類可以很方便地一行一行讀取檔案。 可是最近我在編寫MFC程式時,用CStdioFile讀取中文文字時,發現讀
c#讀取txt文字中的某一行
如果要讀取文字中指定的某一行的資訊,可以藉助正則表示式的一個方法實現,實現原理就是將其分解成陣列,然後直接讀取陣列中指定元素: private void fileSystemWatcher_Chan
delphi一行一行的讀取txt文字的資料
var Form1: TForm1; mylist:TStringlist; i,a:integer; implementation {$R *.dfm} procedure TForm1.Button2Click(Sender: TObject); begin
c從標準輸入流讀取一行的的方法
int main() { char data[1000]; while(gets(data)) { int len = strlen(data) ; printf("%s %d\n",da
Android TestView獲取每一行文字的方法
艾瑪呀,累死我了,終於找到了方法了,em親測有效Layout layout = textView.getLayout(); String text = textView.getText().toString(); int start = 0; int end; //迴圈遍歷列
【C語言】從stdin讀取一行字串的多種方法
1. gets gets函式的標頭檔案是<stdio.h>,原型如下: char *gets(char *s); gets從stdin中讀入一行內容到s指定的buffer中,當遇到換行符或
linux讀取檔案中的一行,解析字串並賦值給變數
line="/vision/system.properties.{IP}=192.168.12.123" eval `echo $line|awk -F '.{' '{print "path="$1}'` echo $path #以上命令實現 解析字串line,提取"/vi
ABAP讀取長文字的方法
SAP中所有的專案文字都存在以下兩張資料表中: 1. STXH 擡頭專案文字 透明表 2. STXL 明細專案文字 透明表 長文字讀取方法 首先在STXH和STXL中根據OBJECT NAME, TEXT ID,TEXT OBJECT查詢到需要的文
說一說本人對linux系統學習的方法和經驗
linux 百度 應用程序 操作系統 多線程 相信大夥都聽說過linux系統,然而對於這個系統,總使讓新手感覺茫然,諾達的系統。下面是一段百度中的介紹:Linux系統是一套開源的並且能夠自由傳播的類似與Unix操作系統,是一個基於POSIX和UNIX的多任務、多用戶、支持多線程和多CPU的
Linux.挖礦.cpuminer方法記錄
-- auto install 開始 進入 技術 cnblogs 樹莓派 ges 挖礦一般都要用高端顯卡做礦機, 不是一般人玩得起 這裏講的是一種用CPU來挖礦的方法, 純玩玩, 不要指望能致富喔 本方法在CentOS和樹莓派原生系統上測試通過 先從git下載cpumi
3種關閉linux系統端口方法
打開 端口 防火墻 關閉下面總結三種關閉linux系統端口的方法1、通過殺掉進程的方法來關閉端口每個端口都有一個守護進程,kill掉這個守護進程就可以了每個端口都是一個進程占用著,第一步、用下面命令netstat -anp |grep 端口找出占用這個端口的進程,第二步、用下面命令kill PID
在UEditor編輯器的工具欄上加一行文字
文字 asc ava html blog 編輯 fun 功能 round <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="tex
嘮一嘮Linux系統入門的方法和經驗
真的是 外設 學習方法 軟件 基於 都是 net 入門書籍 穩定 相信大夥都聽說過linux系統,然而對於這個系統,總使讓新手感覺茫然,偌大的系統。下面是一段百度中的介紹: Linux是一套免費使用和自由傳播的類Unix操作系統,是一個基於POSIX和UNIX的多用戶、多任
python_控制臺輸出帶顏色的文字方法
nlb -1 高亮 ucc emf post 隱藏 bnf .cn 在開發項目過程中,為了方便調試代碼,經常會向stdout中輸出一些日誌,默認的這些日誌就直接顯示在了終端中。而一般的應用服務器,第三方庫,甚至服務器的一些通告也會在終端中顯示,這樣就攪亂了我們想要的信