读取INI文件插件

GetPrivateProfile.inc

 1 /**
 2  * AMXX INI 读取模块
 3  * 兵联互创|展鸿 编写
 4  * 时间 2015-1-12
 5  */
 6
 7 enum SUIC_DATA
 8 {
 9     SUIC_STRING = 1,
10     SUIC_INT,
11     SUIC_FLOAT,
12     SUIC_ARRAY_FLOAT,
13     SUIC_ARRAY_INT
14 }
15
16 /**
17  * @说明: 读INI文件
18  * @参数: lpApplicationName        --配置节名;
19  * @参数: lpKeyName                --配置项名;
20  * @参数: lpDefault                --默认值 (读取失败时使用此字符串);
21  * @参数: lpFileName            --文件名;
22  * @参数: iDataType                --数据类型 (参考SUIC_*的定义);
23  * @参数: anyReturnData            --接收数据的变量 (当数据类型为字符串时, 必须追加容器大小参数; 当数据类型为数组时, 数组大小必须为32.);
24  * @返回值: 无;
25  */
26 native GetPrivateProfile(const lpApplicationName[], const lpKeyName[], const lpDefault[], const lpFileName[], SUIC_DATA:iDataType, any:...);

GetPrivateProfile.sma

  1 #include <amxmodx>
  2
  3 #include "./GetPrivateProfile.inc"
  4
  5 public plugin_natives()
  6 {
  7     register_native("GetPrivateProfile", "Native_GetPrivateProfile");
  8 }
  9
 10 public plugin_init()
 11 {
 12     register_plugin("GetPrivateProfile", "1.1", "SUIC");
 13 }
 14
 15 public Native_GetPrivateProfile(iPlugin, iParams)
 16 {
 17     new lpApplicationName[64], lpKeyName[64], lpDefault[128], lpFileName[128];
 18
 19     get_string(1, lpApplicationName, charsmax(lpApplicationName));
 20     get_string(2, lpKeyName, charsmax(lpKeyName));
 21     get_string(3, lpDefault, charsmax(lpDefault));
 22     get_string(4, lpFileName, charsmax(lpFileName));
 23
 24     new szBuffer[1024], szLeft[1024], szRight[1024], Float:flData[32], iData[32];
 25
 26     if(strlen(lpApplicationName) && strlen(lpKeyName) && file_exists(lpFileName))
 27     {
 28         new hFile = fopen(lpFileName, "rb");
 29
 30         if(hFile)
 31         {
 32             while(!feof(hFile))
 33             {
 34                 fgets(hFile, szBuffer, charsmax(szBuffer));
 35                 trim(szBuffer);
 36
 37                 if(szBuffer[0] != ‘[‘)
 38                     continue;
 39
 40                 replace(szBuffer, charsmax(szBuffer), "[", "");
 41                 replace(szBuffer, charsmax(szBuffer), "]", "");
 42
 43                 if(!equali(szBuffer, lpApplicationName))
 44                     continue;
 45
 46                 while(!feof(hFile))
 47                 {
 48                     fgets(hFile, szBuffer, charsmax(szBuffer));
 49                     trim(szBuffer);
 50
 51                     if(!szBuffer[0] || szBuffer[0] == ‘;‘ || szBuffer[0] == ‘/‘)
 52                         continue;
 53
 54                     if(szBuffer[0] == ‘[‘)
 55                         break;
 56
 57                     strtok(szBuffer, szLeft, charsmax(szLeft), szRight, charsmax(szRight), ‘=‘);
 58                     trim(szLeft);
 59                     trim(szRight);
 60
 61                     if(!equali(szLeft, lpKeyName))
 62                         continue;
 63
 64                     fclose(hFile);
 65
 66                     switch(get_param(5))
 67                     {
 68                         case SUIC_STRING: set_string(6, szRight, get_param(7));
 69                         case SUIC_INT: set_param_byref(6, str_to_num(szRight));
 70                         case SUIC_FLOAT: set_float_byref(6, str_to_float(szRight));
 71                         case SUIC_ARRAY_FLOAT:
 72                         {
 73                             BreakupStringArray(szRight, flData, sizeof flData, 2);
 74                             set_array_f(6, flData, 32);
 75                         }
 76                         case SUIC_ARRAY_INT:
 77                         {
 78                             BreakupStringArray(szRight, iData, sizeof iData, 1);
 79                             set_array(6, iData, 32);
 80                         }
 81                     }
 82
 83                     return true;
 84                 }
 85                 break;
 86             }
 87             fclose(hFile);
 88         }
 89     }
 90
 91     switch(get_param(5))
 92     {
 93         case SUIC_STRING: set_string(6, lpDefault, get_param(7));
 94         case SUIC_INT: set_param_byref(6, str_to_num(lpDefault));
 95         case SUIC_FLOAT: set_float_byref(6, str_to_float(lpDefault));
 96         case SUIC_ARRAY_FLOAT:
 97         {
 98             BreakupStringArray(lpDefault, flData, sizeof flData, 2);
 99             set_array_f(6, flData, 32);
100         }
101         case SUIC_ARRAY_INT:
102         {
103             BreakupStringArray(lpDefault, iData, sizeof iData, 1);
104             set_array(6, iData, 32);
105         }
106     }
107
108     return false;
109 }
110
111 stock BreakupStringArray(const szData[], any:flData[], iSize, iDataType)
112 {
113     new szBuffer[64], szValue[64], iNum;
114     copy(szBuffer, charsmax(szBuffer), szData);
115     trim(szBuffer);
116
117     while(szBuffer[0] && strtok(szBuffer, szValue, charsmax(szValue), szBuffer, charsmax(szBuffer), ‘,‘))
118     {
119         if(iNum >= iSize)
120             break;
121
122         trim(szValue);
123
124         switch(iDataType)
125         {
126             case 1: flData[iNum++] = str_to_num(szValue);
127             case 2: flData[iNum++] = str_to_float(szValue);
128         }
129     }
130 }

TEST.sma

 1 #include <amxmodx>
 2
 3 #include "./GetPrivateProfile.inc"
 4
 5 public plugin_init()
 6 {
 7     new str[20];
 8     GetPrivateProfile("TEST1", "TEST2", "Error", "TEST.ini", SUIC_STRING, str, charsmax(str));
 9
10     new ii;
11     GetPrivateProfile("TEST1", "TEST3", "-1", "TEST.ini", SUIC_INT, ii);
12
13     new Float:ff;
14     GetPrivateProfile("TEST1", "TEST4", "-1.5", "TEST.ini", SUIC_FLOAT, ff);
15
16     new arri[32];
17     GetPrivateProfile("TEST1", "TEST5", "-1, -2, -3", "TEST.ini", SUIC_ARRAY_INT, arri);
18
19     new Float:arrf[32];
20     GetPrivateProfile("TEST1", "TEST6", "-1.5, -2.5, -3.5", "TEST.ini", SUIC_ARRAY_FLOAT, arrf);
21
22     server_print("start call");
23     server_print("string [%s]", str);
24     server_print("int [ %d ]", ii);
25     server_print("float [ %f ]", ff);
26     server_print("array int [ %d %d %d ]", arri[0], arri[1], arri[2]);
27     server_print("array float [ %f %f %f ]", arrf[0], arrf[1], arrf[2]);
28     server_print("end");
29 }

TEST.ini 文件路径: "cstrike/TEST.ini"

[TEST1]
TEST2=Hello World !!!
TEST3=233
TEST4=233.3
TEST5=4, 5, 6
TEST6=4.2, 5.2, 6.2

时间: 2024-10-11 19:06:45

读取INI文件插件的相关文章

C#读取ini文件的方法

最近项目用到ini文件,读取ini文件,方法如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections.Specialized; using System.IO; using System.Runtime.InteropServices; using System.Windows.Forms; namespace test{ /

Linux下读取Ini文件类

Linux下读取Ini文件类 最近项目上有需要读取Ini文件 所谓Ini文件也就是文本文档 并且以 //注释1 /*注释2 [Section] Key1=aaa Key2=bbb 这种形式存在的文档 自己编写了一个类  比较使用 简单 可以跨平台读写INI文件 头文件Ini.h #include <map> #include <string> using namespace std; #define CONFIGLEN 256 enum INI_RES { INI_SUCCESS,

读取INI文件 - Delphi篇

程序经常需要读取一些用户设定值,怎么完成这个过程? B/S程序一般使用XML文件,而C/S程序则使用INI文件. 前篇<C#迁移之callXBFLibrary - 2(调用非托管DLL)>是C#读取INI的示例. 本篇介绍使用Delphi完成这个过程. 首先,引用单元. uses Windows, SysUtils, Classes, DB, ADODB, StrUtils, Forms, IniFiles; 其中"IniFiles"即是我们要引用的单元. 然后,定义类变量

QT仿照MFC读取INI文件(支持中文)

QT仿照MFC读取INI文件(支持中文) #include <QSettings> #include <QtGui> UINT SEGetPrivateProfileInt(LPCSTR lpAppName, LPCSTR lpKeyName,      INT nDefault, LPCSTR lpFileName) {     UINT nReturn = nDefault;     QString strDefault, strItem, strSection, strKey

bat 读取 ini 文件

bat 读取 ini 文件 参考链接:https://stackoverflow.com/questions/2866117/windows-batch-script-to-read-an-ini-file 这个 bat 支持 ini 的键值与=号之间存在空格,例如 key1 = value1 readini.bat: @if (@[email protected]) @end /* -- batch / JScript hybrid line to begin JScript comment

利用GetPrivateProfileString读取ini文件的字段

//INIClass读取类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; using System.IO; using UnityEngine; namespace cReadConfigFile { public class INIClass { public string inipath; [

C++ 读取INI文件

Windows操作系统专门为此提供了6个API函数来对配置设置文件进行读.写: GetPrivateProfileInt() 从私有初始化文件获取整型数值GetPrivateProfileString() 从私有初始化文件获取字符串型值GetProfileInt 从win.ini 获取整数值GetProfileString 从win.ini 获取字符串值WritePrivateProfileString 写字符串到私有初始化文件WriteProfileString 写字符串到win.ini 我们

vs读取ini文件

读取string类型: DWORD GetPrivateProfileString(LPCTSTR lpAppName,LPCTSTR lpKeyName,LPCTSTR lpDefaut,LPSTR lpReturnedString,DWORD nSize,LPCTSTR lpFileName); 其中个参数的意思: LPCTSTR lpAppName ------- INI文件中的一个字段名 LPCTSTR lpKeyName -------- lpAppName 下的一个键名,也就是里面具

批处理读取ini文件

ini文件读取 使用方法:      inifile iniFilePath [section] [item] 例子: inifile c:\boot.ini 读取c:\boot.ini的所有[section] inifile c:\boot.ini "[boot loader]" 读取c:\boot.ini [boot loader]段的内容 inifile c:\boot.ini "[boot loader]" timeout 显示c:\boot.ini [bo