FileRead

모든 형식의 파일에서 데이터를 읽습니다.

uint FileRead(
 int file_handle, // 파일 핸들
 ... // 읽을 매개변수 목록
 );

매개변수

file_handle

[in] FileOpen().

...

[in] 파일에서 읽을 매개변수를 쉼표로 구분한 목록입니다. 각 매개변수는 참조로 전달됩니다. 매개변수 수는 256개를 초과할 수 없습니다. 변수는 기본 타입이어야 하며, 배열, 구조체, 행렬 및 벡터는 허용되지 않습니다.

반환값

읽은 변수의 수입니다. 예상보다 적은 변수가 읽힌 경우 GetLastError()를 사용하여 읽기 오류를 분석할 수 있습니다. CSV 파일을 읽는 중 줄 끝을 만나면 읽기가 중단되지만 오류는 발생하지 않습니다.

참고

FileRead는 FileWrite 함수와 대응됩니다. 이 함수는 범용이며 CSV, TXT 또는 BIN 등 모든 형식의 파일에서 읽습니다.

FileRead는 읽을 문자열의 길이를 미리 알 수 없기 때문에 바이너리 파일에서 string 타입 데이터를 읽을 수 없습니다.

바이너리 파일에서 읽을 때 각 변수에는 데이터 타입에 해당하는 바이트 수가 읽힙니다(char - 1, int - 4, long - 8, double - 8 등).

텍스트 파일에서 읽을 때 전체 줄은 줄 끝까지 string 타입 변수로 읽히며, 끝의 줄바꿈 문자는 포함되지 않습니다.

CSV 파일에서 읽을 때 먼저 해당 타입의 텍스트 표현을 포함하는 문자열을 읽은 다음, 그 문자열은 변환되어 해당 타입의 변수에 저장됩니다(예시는 FileReadNumber, FileReadBool, FileReadDateTime).

예제:

//+------------------------------------------------------------------+
//|                                                 TestFileRead.mq5 |
//|                                  Copyright 2026, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2026, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   uint     written,read;
//--- 서로 다른 타입의 변수 13개
   bool     bool_value=true;
   char     char_value=123;
   short    short_value=12345;  
   int      int_value=1234567;
   long     long_value=5000000000;
   float    float_value=FLT_EPSILON;
   double   double_value=M_PI;
   color    color1_value=clrAquamarine;
   color    color2_value=C'111,0,222';
   datetime datetime_value=TimeCurrent();
   complex  complex_value=1.1+0.1i;
   complexf complexf_value=5.5+0.5i;
   string   string_value="the quick brown fox jumps over the lazy dog";
//--- 쓰기용 CSV 파일 열기
   int file_handle=FileOpen("test.csv",FILE_CSV|FILE_WRITE|FILE_ANSI);
//--- 서로 다른 타입의 변수 13개 쓰기
   written=FileWrite(file_handle,bool_value,char_value,short_value,int_value,long_value,float_value,double_value,color1_value,color2_value,datetime_value,string_value,complex_value,complexf_value);
   bool_value=false;
   char_value=124;
   short_value=12347;  
   int_value=1234569;
   long_value=5001000000;
//--- CSV 파일의 두 번째 줄에 변수 13개 쓰기
   written+=FileWrite(file_handle,bool_value,char_value,short_value,int_value,long_value,float_value,double_value,color1_value,color2_value,datetime_value,string_value,complex_value,complexf_value);
   bool_value=false;
   char_value=125;
   short_value=12349;  
   int_value=1234571;
   long_value=5002000000;
//--- CSV 파일의 세 번째 줄에 변수 13개 쓰기
   written+=FileWrite(file_handle,bool_value,char_value,short_value,int_value,long_value,float_value,double_value,color1_value,color2_value,datetime_value,string_value,complex_value,complexf_value);
   FileClose(file_handle);
   Print(written," bytes written");
   bool     bool_value2;
   char     char_value2;
   short    short_value2;  
   int      int_value2;
   long     long_value2;
   float    float_value2;
   double   double_value2;
   color    color1_value2;
   color    color2_value2;
   datetime datetime_value2;
   complex  complex_value2;
   complexf complexf_value2;
   string   string_value2;
   string   string2_value="untouched string";
//--- 기록된 CSV 파일을 읽기용으로 열기
   file_handle=FileOpen("test.csv",FILE_CSV|FILE_READ|FILE_ANSI);
//--- 줄에 있는 것보다 변수 1개를 더 읽어 보기
   read=FileRead(file_handle,bool_value2,char_value2,short_value2,int_value2,long_value2,float_value2,double_value2,color1_value2,color2_value2,datetime_value2,string_value2,complex_value2,complexf_value2,string2_value);
   FileClose(file_handle);
   Print("read ",read," variables");
   Print(bool_value2," ",char_value2," ",short_value2," ",int_value2," ",long_value2," ",float_value2," ",double_value2," ",color1_value2," ",color2_value2," ",datetime_value2," ",string_value2," ",complex_value2," ",complexf_value2," ",string2_value);
   string txt_line1,txt_line2,txt_line3;
//--- 기록된 파일을 텍스트 파일로 열기
   file_handle=FileOpen("test.csv",FILE_TXT|FILE_READ|FILE_ANSI);
//--- 텍스트 파일에서 3줄 읽기
   read=FileRead(file_handle,txt_line1,txt_line2,txt_line3);
   Print("\nread ",read," lines");
   FileClose(file_handle);
//--- 기록된 줄과 동일한지 시각적으로 확인
   Print(txt_line1);
   Print(txt_line2);
   Print(txt_line3);
//--- 쓰기용 바이너리 파일 열기
   file_handle=FileOpen("test.bin",FILE_BIN|FILE_WRITE);
//--- string을 제외한 서로 다른 타입의 변수 12개 쓰기
   written=FileWrite(file_handle,bool_value,char_value,short_value,int_value,long_value,float_value,double_value,color1_value,color2_value,datetime_value,complex_value,complexf_value);
   FileClose(file_handle);
   Print("");
   Print(written," bytes written");
   bool     bool_value3;
   char     char_value3;
   short    short_value3;  
   int      int_value3;
   long     long_value3;
   float    float_value3;
   double   double_value3;
   color    color1_value3;
   color    color3_value3;
   datetime datetime_value3;
   complex  complex_value3;
   complexf complexf_value3;
//--- 기록된 바이너리 파일을 읽기용으로 열기
   file_handle=FileOpen("test.bin",FILE_BIN|FILE_READ);
//--- 동일한 타입의 변수 12개 읽기
   read=FileRead(file_handle,bool_value3,char_value3,short_value3,int_value3,long_value3,float_value3,double_value3,color1_value3,color3_value3,datetime_value3,complex_value3,complexf_value3);
   FileClose(file_handle);
   Print("read ",read," variables");
//--- 데이터가 올바르게 읽혔는지 시각적으로 확인
   Print(bool_value3," ",char_value3," ",short_value3," ",int_value3," ",long_value3," ",float_value3," ",double_value3," ",color1_value3," ",color3_value3," ",datetime_value3," ",complex_value3," ",complexf_value3);
  }

전문가 로그의 출력

554 bytes written
read 13 variables
true 123 12345 1234567 5000000000 1.1920928955078125e-07 3.141592653589793 clrAquamarine 111,0,222 2026.09.25 14:44:25 the quick brown fox jumps over the lazy dog (1.1,0.1) (5.5,0.5) untouched string
 
read 3 lines
true 123 12345 1234567 5000000000 1.1920928955078125e-07 3.141592653589793 clrAquamarine 111,0,222 2026.09.25 14:44:25 the quick brown fox jumps over the lazy dog (1.1,0.1) (5.5,0.5)
false 124 12347 1234569 5001000000 1.1920928955078125e-07 3.141592653589793 clrAquamarine 111,0,222 2026.09.25 14:44:25 the quick brown fox jumps over the lazy dog (1.1,0.1) (5.5,0.5)
false 125 12349 1234571 5002000000 1.1920928955078125e-07 3.141592653589793 clrAquamarine 111,0,222 2026.09.25 14:44:25 the quick brown fox jumps over the lazy dog (1.1,0.1) (5.5,0.5)
 
68 bytes written
read 12 variables
false 125 12349 1234571 5002000000 1.1920928955078125e-07 3.141592653589793 clrAquamarine 111,0,222 2026.09.25 14:44:25 (1.1,0.1) (5.5,0.5)

참고 항목

FileWrite, FileReadNumber, FileReadBool, FileReadDateTime