重构代码,将公共使用的部分提取出来,完成了pubmed txt的处理逻辑,还没有完成写入mat文件部分
This commit is contained in:
parent
7ced32b592
commit
efac589b58
|
|
@ -0,0 +1,131 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="..\packages\Microsoft.Windows.CppWinRT.2.0.210806.1\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\packages\Microsoft.Windows.CppWinRT.2.0.210806.1\build\native\Microsoft.Windows.CppWinRT.props')" />
|
||||
<PropertyGroup Label="Globals">
|
||||
<CppWinRTOptimized>true</CppWinRTOptimized>
|
||||
<CppWinRTRootNamespaceAutoMerge>true</CppWinRTRootNamespaceAutoMerge>
|
||||
<CppWinRTGenerateWindowsMetadata>true</CppWinRTGenerateWindowsMetadata>
|
||||
<MinimalCoreWin>true</MinimalCoreWin>
|
||||
<VCProjectVersion>15.0</VCProjectVersion>
|
||||
<ProjectGuid>{c8434373-f2d6-459c-ac6d-79611acef9f5}</ProjectGuid>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<RootNamespace>CommonLib</RootNamespace>
|
||||
<WindowsTargetPlatformVersion Condition=" '$(WindowsTargetPlatformVersion)' == '' ">10.0.18362.0</WindowsTargetPlatformVersion>
|
||||
<WindowsTargetPlatformMinVersion>10.0.17134.0</WindowsTargetPlatformMinVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<PlatformToolset Condition="'$(VisualStudioVersion)' == '16.0'">v142</PlatformToolset>
|
||||
<PlatformToolset Condition="'$(VisualStudioVersion)' == '15.0'">v141</PlatformToolset>
|
||||
<PlatformToolset Condition="'$(VisualStudioVersion)' == '14.0'">v140</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets">
|
||||
<Import Project="PropertySheet.props" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<ItemDefinitionGroup>
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
|
||||
<PreprocessorDefinitions>_CONSOLE;WIN32_LEAN_AND_MEAN;WINRT_LEAN_AND_MEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<AdditionalOptions>%(AdditionalOptions) /permissive- /bigobj</AdditionalOptions>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'">
|
||||
<ClCompile>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">D:\matlab2023a\extern\include</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Platform)'=='Win32'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>WIN32;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">D:\matlab2023a\extern\include</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)'=='Release'">
|
||||
<ClCompile>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">D:\matlab2023a\extern\include</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">D:\matlab2023a\extern\include</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<None Include="packages.config" />
|
||||
<None Include="PropertySheet.props" />
|
||||
<Text Include="readme.txt">
|
||||
<DeploymentContent>false</DeploymentContent>
|
||||
</Text>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="matlab_io.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="matlab_io.cpp" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
<Import Project="..\packages\Microsoft.Windows.CppWinRT.2.0.210806.1\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\packages\Microsoft.Windows.CppWinRT.2.0.210806.1\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
||||
</ImportGroup>
|
||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||
<PropertyGroup>
|
||||
<ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText>
|
||||
</PropertyGroup>
|
||||
<Error Condition="!Exists('..\packages\Microsoft.Windows.CppWinRT.2.0.210806.1\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Windows.CppWinRT.2.0.210806.1\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
||||
<Error Condition="!Exists('..\packages\Microsoft.Windows.CppWinRT.2.0.210806.1\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Windows.CppWinRT.2.0.210806.1\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
||||
</Target>
|
||||
</Project>
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Source Files">
|
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Header Files">
|
||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Resource Files">
|
||||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="PropertySheet.props" />
|
||||
<None Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Text Include="readme.txt" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="matlab_io.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="matlab_io.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ImportGroup Label="PropertySheets" />
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<!--
|
||||
To customize common C++/WinRT project properties:
|
||||
* right-click the project node
|
||||
* expand the Common Properties item
|
||||
* select the C++/WinRT property page
|
||||
|
||||
For more advanced scenarios, and complete documentation, please see:
|
||||
https://github.com/Microsoft/cppwinrt/tree/master/nuget
|
||||
-->
|
||||
<PropertyGroup />
|
||||
<ItemDefinitionGroup />
|
||||
</Project>
|
||||
|
|
@ -0,0 +1,116 @@
|
|||
/*********************************************************************************************
|
||||
Description: 提供基本matlab读写数据功能
|
||||
|
||||
Copyright : All right reserved by ZheYuan.BJ
|
||||
|
||||
Author : Zhang Zhonghai
|
||||
Date : 2023/09/18
|
||||
***********************************************************************************************/
|
||||
|
||||
#include <string>
|
||||
#include <mat.h>
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
#include "matlab_io.h"
|
||||
using namespace std;
|
||||
|
||||
/* 读取字符串矩阵 */
|
||||
bool ReadMtxString(const string& filePath, const string& mtxName,
|
||||
vector<string>& vStr, int* pRowNum, int* pColNum) {
|
||||
|
||||
MATFile* pMatFile = nullptr;
|
||||
mxArray* pMxArray = nullptr;
|
||||
mxArray* pCell = nullptr;
|
||||
int rowNum, colNum;
|
||||
char strBuf[STRING_BUF_SIZE];
|
||||
|
||||
pMatFile = matOpen(filePath.c_str(), "r"); //打开.mat文件
|
||||
if (pMatFile == nullptr) {
|
||||
cerr << "filePath is error!" << endl;
|
||||
return false;
|
||||
}
|
||||
pMxArray = matGetVariable(pMatFile, mtxName.c_str()); //获取.mat文件里面名为matrixName的矩阵
|
||||
rowNum = (int)mxGetM(pMxArray);
|
||||
colNum = (int)mxGetN(pMxArray);
|
||||
|
||||
vStr.resize(rowNum * colNum);
|
||||
for (int i = 0; i < rowNum; ++i) {
|
||||
for (int j = 0; j < colNum; ++j) {
|
||||
pCell = mxGetCell(pMxArray, j * rowNum + i);
|
||||
if (mxGetString(pCell, strBuf, STRING_BUF_SIZE) != 0) {
|
||||
cerr << "String is too large to fit in the buffer! " << i + 1 << '\t' << j + 1 << endl;
|
||||
return false;
|
||||
}
|
||||
vStr[i * colNum + j] = strBuf;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/* 从mat文件中读取给定名称的矩阵数据,并获取矩阵的行列数值 */
|
||||
T* ReadMtxDouble(const string& filePath, const string& mtxName, int* pRowNum, int* pColNum) {
|
||||
T* dst = nullptr;
|
||||
MATFile* pMatFile = nullptr;
|
||||
mxArray* pMxArray = nullptr;
|
||||
int rowNum, colNum;
|
||||
double* matData;
|
||||
pMatFile = matOpen(filePath.c_str(), "r"); //打开.mat文件
|
||||
if (pMatFile == nullptr) {
|
||||
cerr << "filePath is error!" << endl;
|
||||
return nullptr;
|
||||
}
|
||||
pMxArray = matGetVariable(pMatFile, mtxName.c_str()); //获取.mat文件里面名为matrixName的矩阵
|
||||
rowNum = (int)mxGetM(pMxArray);
|
||||
colNum = (int)mxGetN(pMxArray);
|
||||
// cout << rowNum << " " << colNum << endl;
|
||||
matData = (double*)mxGetData(pMxArray); //获取指针
|
||||
|
||||
dst = new T[rowNum * colNum];
|
||||
for (int i = 0; i < rowNum; ++i) {
|
||||
for (int j = 0; j < colNum; ++j) {
|
||||
dst[i * colNum + j] = T(matData[j * rowNum + i]);
|
||||
}
|
||||
}
|
||||
|
||||
mxDestroyArray(pMxArray); //释放内存
|
||||
matClose(pMatFile); // 关闭文件
|
||||
|
||||
*pRowNum = rowNum;
|
||||
*pColNum = colNum;
|
||||
return dst;
|
||||
}
|
||||
|
||||
/* 将数据写入mat文件中,用给定的名称命名 */
|
||||
bool SaveMtxDouble(T* src, MATFile* pMatFile, string matrixName, int rowNum, int colNum)
|
||||
{
|
||||
//转置存储
|
||||
int datasize = colNum * rowNum;
|
||||
double* mtxData = new double[datasize];//待存储数据转为double格式
|
||||
// memset(mtxData, 0, datasize * sizeof(double));
|
||||
if (pMatFile == nullptr)
|
||||
{
|
||||
cerr << "mat file pointer is error!" << endl;
|
||||
return false;
|
||||
}
|
||||
for (int i = 0; i < rowNum; i++)
|
||||
{
|
||||
for (int j = 0; j < colNum; j++)
|
||||
{
|
||||
mtxData[j * rowNum + i] = double(src[i * colNum + j]);
|
||||
// *(mtxData + j * rowNum + i) = (double)src[i * colNum + j]; 可消除警告
|
||||
}
|
||||
}
|
||||
mxArray* pWriteArray = NULL;//matlab格式矩阵
|
||||
//创建一个rowNum*colNum的矩阵
|
||||
pWriteArray = mxCreateDoubleMatrix(rowNum, colNum, mxREAL);
|
||||
//把data的值赋给pWriteArray指针
|
||||
memcpy((void*)(mxGetPr(pWriteArray)), (void*)mtxData, sizeof(double) * datasize);
|
||||
//给矩阵命名为matrixName
|
||||
matPutVariable(pMatFile, matrixName.c_str(), pWriteArray);
|
||||
|
||||
mxDestroyArray(pWriteArray);//release resource
|
||||
delete[]mtxData;//release resource
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
/*********************************************************************************************
|
||||
Description: 提供基本matlab读写数据功能
|
||||
|
||||
Copyright : All right reserved by ZheYuan.BJ
|
||||
|
||||
Author : Zhang Zhonghai
|
||||
Date : 2023/09/18 adfasdf
|
||||
***********************************************************************************************/
|
||||
|
||||
#ifndef __MATLAB_IO_H
|
||||
#define __MATLAB_IO_H
|
||||
|
||||
#include <string>
|
||||
#include <mat.h>
|
||||
#include <vector>
|
||||
using namespace std;
|
||||
|
||||
#define STRING_BUF_SIZE 10240
|
||||
typedef double T;
|
||||
/*
|
||||
注意参数的区别,读取时候直接传递文件路径名,写入的时候需要提供文件指针,
|
||||
这是因为写入的时候可能一次性需要写入多个矩阵
|
||||
*/
|
||||
|
||||
/* 读取字符串矩阵 */
|
||||
bool ReadMtxString(const string& filePath, const string& mtxName, vector<string>& vStr, int* pRowNum, int* pColNum);
|
||||
|
||||
/* 从mat文件中读取给定名称的矩阵数据,并获取矩阵的行列数值 */
|
||||
T* ReadMtxDouble(const string& filePath, const string& mtxName, int* pRowNum, int* pColNum);
|
||||
|
||||
/* 将数据写入mat文件中,用给定的名称命名 */
|
||||
bool SaveMtxDouble(T* src, MATFile* pMatFile, string matrixName, int rowNum, int colNum);
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.210806.1" targetFramework="native" />
|
||||
</packages>
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
========================================================================
|
||||
C++/WinRT CommonLib Project Overview
|
||||
========================================================================
|
||||
|
||||
This project demonstrates how to get started consuming Windows Runtime
|
||||
classes directly from standard C++, using platform projection headers
|
||||
generated from Windows SDK metadata files.
|
||||
|
||||
Steps to generate and consume SDK platform projection:
|
||||
1. Build project initially to generate platform projection headers into
|
||||
your Generated Files folder.
|
||||
2. Include a projection namespace header in your pch.h, such as
|
||||
<winrt/Windows.Foundation.h>.
|
||||
3. Consume winrt namespace and any Windows Runtime namespaces, such as
|
||||
winrt::Windows::Foundation, from source code.
|
||||
4. Initialize apartment via init_apartment() and consume winrt classes.
|
||||
|
||||
Steps to generate and consume a projection from third party metadata:
|
||||
1. Add a WinMD reference by right-clicking the References project node
|
||||
and selecting "Add Reference...". In the Add References dialog,
|
||||
browse to the component WinMD you want to consume and add it.
|
||||
2. Build the project once to generate projection headers for the
|
||||
referenced WinMD file under the "Generated Files" subfolder.
|
||||
3. As above, include projection headers in pch or source code
|
||||
to consume projected Windows Runtime classes.
|
||||
|
||||
========================================================================
|
||||
Learn more about C++/WinRT here:
|
||||
http://aka.ms/cppwinrt/
|
||||
========================================================================
|
||||
|
|
@ -0,0 +1,146 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="..\packages\Microsoft.Windows.CppWinRT.2.0.210806.1\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\packages\Microsoft.Windows.CppWinRT.2.0.210806.1\build\native\Microsoft.Windows.CppWinRT.props')" />
|
||||
<PropertyGroup Label="Globals">
|
||||
<CppWinRTOptimized>true</CppWinRTOptimized>
|
||||
<CppWinRTRootNamespaceAutoMerge>true</CppWinRTRootNamespaceAutoMerge>
|
||||
<CppWinRTGenerateWindowsMetadata>true</CppWinRTGenerateWindowsMetadata>
|
||||
<MinimalCoreWin>true</MinimalCoreWin>
|
||||
<VCProjectVersion>15.0</VCProjectVersion>
|
||||
<ProjectGuid>{0e88ff62-c387-44f4-a8b6-3fd3ed0206b6}</ProjectGuid>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<RootNamespace>CppRun</RootNamespace>
|
||||
<WindowsTargetPlatformVersion Condition=" '$(WindowsTargetPlatformVersion)' == '' ">10.0.18362.0</WindowsTargetPlatformVersion>
|
||||
<WindowsTargetPlatformMinVersion>10.0.17134.0</WindowsTargetPlatformMinVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<PlatformToolset Condition="'$(VisualStudioVersion)' == '16.0'">v142</PlatformToolset>
|
||||
<PlatformToolset Condition="'$(VisualStudioVersion)' == '15.0'">v141</PlatformToolset>
|
||||
<PlatformToolset Condition="'$(VisualStudioVersion)' == '14.0'">v140</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets">
|
||||
<Import Project="PropertySheet.props" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<ItemDefinitionGroup>
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>
|
||||
</PrecompiledHeaderFile>
|
||||
<PrecompiledHeaderOutputFile>
|
||||
</PrecompiledHeaderOutputFile>
|
||||
<PreprocessorDefinitions>_CONSOLE;WIN32_LEAN_AND_MEAN;WINRT_LEAN_AND_MEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<AdditionalOptions>%(AdditionalOptions) /permissive- /bigobj</AdditionalOptions>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'">
|
||||
<ClCompile>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">D:\matlab2023a\extern\include;$(SolutionDir)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
|
||||
<AdditionalLibraryDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">D:\matlab2023a\extern\lib\win64\microsoft;$(OutDir)</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">CommonLib.lib;libeng.lib;libmx.lib;libmex.lib;libmat.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Platform)'=='Win32'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>WIN32;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">D:\matlab2023a\extern\include;$(SolutionDir)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalLibraryDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">D:\matlab2023a\extern\lib\win64\microsoft;$(OutDir)</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">CommonLib.lib;libeng.lib;libmx.lib;libmex.lib;libmat.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)'=='Release'">
|
||||
<ClCompile>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">D:\matlab2023a\extern\include;$(SolutionDir)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">D:\matlab2023a\extern\include;$(SolutionDir)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
|
||||
<AdditionalLibraryDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">D:\matlab2023a\extern\lib\win64\microsoft;$(OutDir)</AdditionalLibraryDirectories>
|
||||
<AdditionalLibraryDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">D:\matlab2023a\extern\lib\win64\microsoft;$(OutDir)</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">CommonLib.lib;libeng.lib;libmx.lib;libmex.lib;libmat.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies Condition="'$(Configuration)|$(Platform)'=='Release|x64'">CommonLib.lib;libeng.lib;libmx.lib;libmex.lib;libmat.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="common.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="main.cpp" />
|
||||
<ClCompile Include="process_pubmed_txt.cpp">
|
||||
<PrecompiledHeader>Create</PrecompiledHeader>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="packages.config" />
|
||||
<None Include="PropertySheet.props" />
|
||||
<Text Include="readme.txt">
|
||||
<DeploymentContent>false</DeploymentContent>
|
||||
</Text>
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
<Import Project="..\packages\Microsoft.Windows.CppWinRT.2.0.210806.1\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\packages\Microsoft.Windows.CppWinRT.2.0.210806.1\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
||||
</ImportGroup>
|
||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||
<PropertyGroup>
|
||||
<ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText>
|
||||
</PropertyGroup>
|
||||
<Error Condition="!Exists('..\packages\Microsoft.Windows.CppWinRT.2.0.210806.1\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Windows.CppWinRT.2.0.210806.1\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
||||
<Error Condition="!Exists('..\packages\Microsoft.Windows.CppWinRT.2.0.210806.1\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Windows.CppWinRT.2.0.210806.1\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
||||
</Target>
|
||||
</Project>
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Source Files">
|
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Header Files">
|
||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Resource Files">
|
||||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="common.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="process_pubmed_txt.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="main.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="PropertySheet.props" />
|
||||
<None Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Text Include="readme.txt" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ImportGroup Label="PropertySheets" />
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<!--
|
||||
To customize common C++/WinRT project properties:
|
||||
* right-click the project node
|
||||
* expand the Common Properties item
|
||||
* select the C++/WinRT property page
|
||||
|
||||
For more advanced scenarios, and complete documentation, please see:
|
||||
https://github.com/Microsoft/cppwinrt/tree/master/nuget
|
||||
-->
|
||||
<PropertyGroup />
|
||||
<ItemDefinitionGroup />
|
||||
</Project>
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
/*********************************************************************************************
|
||||
Description: 声明一些公用的函数
|
||||
|
||||
Copyright : All right reserved by ZheYuan.BJ
|
||||
|
||||
Author : Zhang Zhonghai
|
||||
Date : 2023/09/18 adfasdf
|
||||
***********************************************************************************************/
|
||||
#ifndef __COMMON_H
|
||||
#define __COMMON_H
|
||||
|
||||
|
||||
/* 处理pubmed txt文件,结果保存在mat文件中 */
|
||||
void ProcessPubmedTxt(int argc, const char** argv);
|
||||
|
||||
|
||||
#endif // !__COMMON_H
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
/*********************************************************************************************
|
||||
Description: 将matlab中一些耗时的计算重构为c++实现,各种计算过程的入口
|
||||
|
||||
Copyright : All right reserved by ZheYuan.BJ
|
||||
|
||||
Author : Zhang Zhonghai
|
||||
Date : 2023/09/18
|
||||
***********************************************************************************************/
|
||||
#include <iostream>
|
||||
#include <time.h>
|
||||
#include "common.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
/* 程序入口 */
|
||||
int main(int argc, const char** argv) {
|
||||
clock_t begin, finish;
|
||||
begin = clock();
|
||||
if (argc < 2) {
|
||||
cerr << "This program take at least 1 arguments(CMD; [Options])!" << endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* process pubmed txt file */
|
||||
if (string(argv[1]) == "ProcessPubmedTxt") {
|
||||
ProcessPubmedTxt(argc - 1, argv + 1);
|
||||
}
|
||||
else if (string(argv[1]) == "ProcessPubmedTxt") {
|
||||
|
||||
}
|
||||
finish = clock();
|
||||
cout << argv[1] << " time: " << (double)(finish - begin) / CLOCKS_PER_SEC << " s" << endl;
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.210806.1" targetFramework="native" />
|
||||
</packages>
|
||||
|
|
@ -0,0 +1,181 @@
|
|||
/*********************************************************************************************
|
||||
Description: 处理pubmed生成的txt文件,将处理结果放到mat文件中
|
||||
|
||||
Copyright : All right reserved by ZheYuan.BJ
|
||||
|
||||
Author : Zhang Zhonghai
|
||||
Date : 2023/09/18
|
||||
***********************************************************************************************/
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <algorithm>
|
||||
#include <unordered_map>
|
||||
#include <mat.h>
|
||||
#include "common.h"
|
||||
#include "CommonLib/matlab_io.h"
|
||||
using namespace std;
|
||||
|
||||
/* 将结果写入mat文件 */
|
||||
/* 将数据写入mat文件中,用给定的名称命名 */
|
||||
bool SavePubmed(const string& matPath,
|
||||
const vector<string> &vTgName,
|
||||
const vector<unordered_map<string, string> >& vumPaperTagVal)
|
||||
{
|
||||
MATFile* pMatFile = matOpen(matPath.c_str(), "r"); //打开.mat文件
|
||||
if (pMatFile == nullptr) {
|
||||
cerr << "filePath is error! " << matPath << endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
vector<const char*> vTgChars;
|
||||
for (auto strTg : vTgName) {
|
||||
vTgChars.push_back(strTg.c_str());
|
||||
}
|
||||
|
||||
// 创建结构体数据
|
||||
mxArray* mxStruct = mxCreateStructMatrix(1, 1, vTgName.size(), vTgChars.data());
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
pubmed txt文件中包含多个文章的摘要信息,每个信息最前边有一个tag,每个tag对应的信息可能有一行,也可能多行,每个文章中间由一个空行隔开
|
||||
1. 读取预先提取的pubmed tags, 并将tags中的'-'和' '字符去掉,只留下纯字符串做tag
|
||||
2. 读取pubmed txt文件, 对所有文献根据tag进行拆分,同一个文献中,合并同一个tag的所有内容,空格隔开
|
||||
3. 去除一些冗余等内容, 将title和abstract合并,赋值给abstract
|
||||
4. 将结果写入mat文件
|
||||
*/
|
||||
void ProcessPubmedTxt(int argc, const char** argv) {
|
||||
// argv 1.pubmed tag.mat文件; 2.pubmed article.txt文件; 3.pubmed out.mat输出文件
|
||||
//
|
||||
// cout << argc << '\t' << argv[1] << endl;
|
||||
int rowNum, colNum;
|
||||
vector<string> vTg;
|
||||
vector<string> vTgName;
|
||||
// unordered_map<string, vector<string> > umTagVal;
|
||||
vector<unordered_map<string, string> > vumPaperTagVal;
|
||||
unordered_map<string, string> umFullTagToTag; // 完整tag与tag的映射,如“PMID- ”:“PMID”
|
||||
/* 读取pubmed tags */
|
||||
ReadMtxString(argv[1], "tg", vTg, &rowNum, &colNum);
|
||||
/* 1. 去掉tags里的'-'和' '字符,得到纯净的tag */
|
||||
vTgName = vTg;
|
||||
for (int i = 0; i < vTg.size(); ++i) {
|
||||
// cout << vTg[i] << '\t';
|
||||
int pos = 0;
|
||||
for (int j = 0; j < vTg[i].size(); ++j) {
|
||||
if (vTg[i][j] != ' ' && vTg[i][j] != '-') { // 去掉tag中的空格和'-'字符,生成tag name
|
||||
vTgName[i][pos++] = vTg[i][j];
|
||||
}
|
||||
}
|
||||
vTgName[i].resize(pos);
|
||||
umFullTagToTag[vTg[i]] = vTgName[i];
|
||||
// cout << vTg[i].size() << '\t' << vTgName[i].size() << endl;
|
||||
}
|
||||
|
||||
/* 2. 读取pubmed txt文件,先读入后处理 */
|
||||
ifstream ifsPubmedTxt(argv[2]);
|
||||
vector<string> vStrPubmedTxt;
|
||||
vector<string> vLineTag;
|
||||
vector<int> vPaperStartIdx;
|
||||
string blankTag = " "; // 5个空格
|
||||
string strLine;
|
||||
string fullTag;
|
||||
int curPos = 0;
|
||||
vPaperStartIdx.push_back(curPos); // 添加初始索引
|
||||
const int FULL_TAG_LEN = 5;
|
||||
while (getline(ifsPubmedTxt, strLine)) { // 读取内容时候去掉了行尾的换行符
|
||||
while (strLine.back() == ' ') strLine.pop_back(); // 去掉行尾的空格
|
||||
if (strLine.size() == 0) { // 新的paper
|
||||
vPaperStartIdx.push_back(curPos);
|
||||
continue;
|
||||
}
|
||||
fullTag = strLine.substr(0, 5);
|
||||
if (fullTag == blankTag) { // 这一行的内容还是属于上一个tag的
|
||||
string& lastTagConteng = vStrPubmedTxt.back();
|
||||
lastTagConteng.append(strLine.substr(FULL_TAG_LEN)); // 最前边包含了一个空格
|
||||
}
|
||||
else {
|
||||
vStrPubmedTxt.push_back(strLine.substr(FULL_TAG_LEN));
|
||||
vLineTag.push_back(fullTag);
|
||||
curPos++;
|
||||
}
|
||||
// cout << strLine << endl;
|
||||
}
|
||||
// cout << vStrPubmedTxt.size() << endl;
|
||||
vPaperStartIdx.push_back(curPos); // 比文章多1,最后一个记录结束位置
|
||||
|
||||
/* 处理每一篇文章 */
|
||||
ofstream testOfs("pubmed_test-1.txt");
|
||||
for (int i = 0; i < vPaperStartIdx.size() - 1; ++i) {
|
||||
int startIdx = vPaperStartIdx[i];
|
||||
int endIdx = vPaperStartIdx[i + 1];
|
||||
unordered_map<string, string> umTagContent;
|
||||
|
||||
for (int tgIdx = 0; tgIdx < vTgName.size(); ++tgIdx) {
|
||||
umTagContent[vTgName[tgIdx]] = ""; // 对每一个tag,设置一个新的string
|
||||
}
|
||||
for (int idx = startIdx; idx < endIdx; ++idx) { // 遍历当前文章的每一个tag内容
|
||||
string& fullTag = vLineTag[idx];
|
||||
auto tagItr = umFullTagToTag.find(fullTag);
|
||||
if (tagItr != umFullTagToTag.end()) { // 找到tag了
|
||||
const string& tag = tagItr->second;
|
||||
string& tagContent = umTagContent[tag];
|
||||
tagContent.append(vStrPubmedTxt[idx]);
|
||||
}
|
||||
}
|
||||
vumPaperTagVal.push_back(umTagContent);
|
||||
}
|
||||
|
||||
cout << "文件个数:" << vumPaperTagVal.size() << endl;
|
||||
|
||||
/* 去除没有摘要的文章 */
|
||||
const string abstractTag = "AB";
|
||||
for (auto itr = vumPaperTagVal.begin(); itr != vumPaperTagVal.end(); ) {
|
||||
if ((*itr)[abstractTag].size() == 0) {
|
||||
itr = vumPaperTagVal.erase(itr);
|
||||
}
|
||||
else {
|
||||
itr++;
|
||||
}
|
||||
}
|
||||
|
||||
/* 根据PMID,去除冗余 */
|
||||
unordered_map<string, int> umPMID;
|
||||
const string pmidTag = "PMID";
|
||||
for (auto itr = vumPaperTagVal.begin(); itr != vumPaperTagVal.end(); ) {
|
||||
if (umPMID.find((*itr)[pmidTag]) != umPMID.end()) {
|
||||
cout << "duplicate " << (*itr)[pmidTag] << endl;
|
||||
itr = vumPaperTagVal.erase(itr);
|
||||
}
|
||||
else {
|
||||
umPMID[(*itr)[pmidTag]] = 1;
|
||||
itr++;
|
||||
}
|
||||
}
|
||||
|
||||
/* 将title和abstract合并,赋值给abstract */
|
||||
const string titleTag = "TI";
|
||||
for (auto itr = vumPaperTagVal.begin(); itr != vumPaperTagVal.end(); itr++) {
|
||||
string& abstractStr = (*itr)[abstractTag];
|
||||
abstractStr = (*itr)[titleTag] + " " + abstractStr; // 可能会有性能损失,不过影响不大
|
||||
}
|
||||
|
||||
//for (int tgIdx = 0; tgIdx < vTgName.size(); ++tgIdx) {
|
||||
// for (int i = 0; i < vumPaperTagVal.size(); ++i) {
|
||||
// testOfs << vumPaperTagVal[i][vTgName[tgIdx]] << endl;
|
||||
// }
|
||||
//}
|
||||
for (int i = 0; i < vumPaperTagVal.size(); ++i) {
|
||||
testOfs << vumPaperTagVal[i][abstractTag] << endl;
|
||||
}
|
||||
testOfs.close();
|
||||
cout << "文件个数:" << vumPaperTagVal.size() << endl;
|
||||
// for (auto num : vPaperStartIdx) cout << num << endl;
|
||||
ifsPubmedTxt.close();
|
||||
|
||||
/* 将处理后的数据写入mat文件,mat中的变量名称分别为Tx和abs1 */
|
||||
SavePubmed(argv[3], vTgName, vumPaperTagVal);
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1 @@
|
|||
用c++程序重写matlab中比较耗时的部分
|
||||
|
|
@ -64,7 +64,8 @@
|
|||
<ItemDefinitionGroup>
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<PrecompiledHeaderFile>
|
||||
</PrecompiledHeaderFile>
|
||||
<PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
|
||||
<PreprocessorDefinitions>_CONSOLE;WIN32_LEAN_AND_MEAN;WINRT_LEAN_AND_MEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
|
|
@ -75,19 +76,24 @@
|
|||
<ClCompile>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">D:\matlab2023a\extern\include;D:\apps\Twirls\eigen-3.4.0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">D:\matlab2023a\extern\include;$(SolutionDir)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
|
||||
<AdditionalLibraryDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">D:\matlab2023a\extern\lib\win64\microsoft;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">libmat.lib;libmx.lib;libmex.lib;libeng.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalLibraryDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">D:\matlab2023a\extern\lib\win64\microsoft;$(OutDir)</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">CommonLib.lib;libeng.lib;libmx.lib;libmex.lib;libmat.lib</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Platform)'=='Win32'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>WIN32;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">D:\matlab2023a\extern\include;$(SolutionDir)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">CommonLib.lib;libeng.lib;libmx.lib;libmex.lib;libmat.lib</AdditionalDependencies>
|
||||
<AdditionalLibraryDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">D:\matlab2023a\extern\lib\win64\microsoft;$(OutDir)</AdditionalLibraryDirectories>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)'=='Release'">
|
||||
<ClCompile>
|
||||
|
|
@ -95,15 +101,18 @@
|
|||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">D:\matlab2023a\extern\include;D:\apps\Twirls\eigen-3.4.0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">D:\matlab2023a\extern\include;$(SolutionDir)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">D:\matlab2023a\extern\include;$(SolutionDir)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
|
||||
<AdditionalLibraryDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">D:\matlab2023a\extern\lib\win64\microsoft;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies Condition="'$(Configuration)|$(Platform)'=='Release|x64'">libmat.lib;libmx.lib;libmex.lib;libeng.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalLibraryDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">D:\matlab2023a\extern\lib\win64\microsoft;$(OutDir)</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies Condition="'$(Configuration)|$(Platform)'=='Release|x64'">CommonLib.lib;libeng.lib;libmx.lib;libmex.lib;libmat.lib</AdditionalDependencies>
|
||||
<AdditionalDependencies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">CommonLib.lib;libeng.lib;libmx.lib;libmex.lib;libmat.lib</AdditionalDependencies>
|
||||
<AdditionalLibraryDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">D:\matlab2023a\extern\lib\win64\microsoft;$(OutDir)</AdditionalLibraryDirectories>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
|
|
|
|||
94
GMM/main.cpp
94
GMM/main.cpp
|
|
@ -1,3 +1,12 @@
|
|||
/*********************************************************************************************
|
||||
Description: 用高斯混合模型进行曲线的拟合
|
||||
|
||||
Copyright : All right reserved by ZheYuan.BJ
|
||||
|
||||
Author : Zhang Zhonghai
|
||||
Date : 2023/09/12
|
||||
***********************************************************************************************/
|
||||
|
||||
#include <iostream>
|
||||
#include <iomanip>
|
||||
#include <fstream>
|
||||
|
|
@ -22,80 +31,12 @@
|
|||
#include <mat.h>
|
||||
#include "gmm.h"
|
||||
#include "thread_pool.h"
|
||||
#include "CommonLib/matlab_io.h"
|
||||
using namespace std;
|
||||
using std::cout;
|
||||
using std::vector;
|
||||
namespace fs = std::filesystem;
|
||||
|
||||
/* 从mat文件中读取给定名称的矩阵数据,并获取矩阵的行列数值 */
|
||||
template<typename T>
|
||||
T* ReadMatlabMat(const string &filePath, const string &mtxName, int *pRowNum, int *pColNum) {
|
||||
T* dst = nullptr;
|
||||
MATFile* pMatFile = nullptr;
|
||||
mxArray* pMxArray = nullptr;
|
||||
int rowNum, colNum;
|
||||
double* matData;
|
||||
pMatFile = matOpen(filePath.c_str(), "r"); //打开.mat文件
|
||||
if (pMatFile == nullptr) {
|
||||
cerr << "filePath is error!" << endl;
|
||||
return nullptr;
|
||||
}
|
||||
pMxArray = matGetVariable(pMatFile, mtxName.c_str()); //获取.mat文件里面名为matrixName的矩阵
|
||||
rowNum = mxGetM(pMxArray);
|
||||
colNum = mxGetN(pMxArray);
|
||||
// cout << rowNum << " " << colNum << endl;
|
||||
matData = (double*)mxGetData(pMxArray); //获取指针
|
||||
|
||||
dst = new T[rowNum * colNum];
|
||||
for (int i = 0; i < rowNum; ++i) {
|
||||
for (int j = 0; j < colNum; ++j) {
|
||||
dst[i * colNum + j] = T(matData[j * rowNum + i]);
|
||||
}
|
||||
}
|
||||
|
||||
mxDestroyArray(pMxArray); //释放内存
|
||||
matClose(pMatFile); // 关闭文件
|
||||
|
||||
*pRowNum = rowNum;
|
||||
*pColNum = colNum;
|
||||
return dst;
|
||||
}
|
||||
|
||||
/* 将数据写入mat文件中,用给定的名称命名 */
|
||||
template<typename T>
|
||||
bool SaveMatrix(T* src, MATFile* pMatFile, string matrixName, int rowNum, int colNum)
|
||||
{
|
||||
//转置存储
|
||||
int datasize = colNum * rowNum;
|
||||
double* mtxData = new double[datasize];//待存储数据转为double格式
|
||||
// memset(mtxData, 0, datasize * sizeof(double));
|
||||
for (int i = 0; i < rowNum; i++)
|
||||
{
|
||||
for (int j = 0; j < colNum; j++)
|
||||
{
|
||||
mtxData[j * rowNum + i] = double(src[i * colNum + j]);
|
||||
// *(mtxData + j * rowNum + i) = (double)src[i * colNum + j]; 可消除警告
|
||||
}
|
||||
}
|
||||
mxArray* pWriteArray = NULL;//matlab格式矩阵
|
||||
if (pMatFile == nullptr)
|
||||
{
|
||||
cerr << "mat file pointer is error!" << endl;
|
||||
return false;
|
||||
}
|
||||
//创建一个rowNum*colNum的矩阵
|
||||
pWriteArray = mxCreateDoubleMatrix(rowNum, colNum, mxREAL);
|
||||
//把data的值赋给pWriteArray指针
|
||||
memcpy((void*)(mxGetPr(pWriteArray)), (void*)mtxData, sizeof(double) * datasize);
|
||||
//给矩阵命名为matrixName
|
||||
matPutVariable(pMatFile, matrixName.c_str(), pWriteArray);
|
||||
|
||||
mxDestroyArray(pWriteArray);//release resource
|
||||
delete[]mtxData;//release resource
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/* 将x向量放到宽度为binWidth大小的桶中,功能类似matlab的hist*/
|
||||
void PutXtoBin(double* x, int xSize, double binWidth, vector<double>& vXBin, vector<double>& vYBin) {
|
||||
double maxX = 0.0;
|
||||
|
|
@ -131,9 +72,8 @@ struct cmpFunc {
|
|||
void GMMToFactorEY(GMM& gmm, double binWidth, vector<double> &vYBin, vector<double>& vFactor, vector<double>& vEY) {
|
||||
/* 需要调整曲线的权重,来拟合高斯曲线,而不是用概率密度 */
|
||||
double zoomFactorSum = 0.0;
|
||||
int valNum = 0;
|
||||
vEY.resize(vYBin.size());
|
||||
int topM = vYBin.size() / 4;
|
||||
int topM = (int)(vYBin.size() / 4);
|
||||
if (topM < 1) topM = 1;
|
||||
/* 用堆排序的方式取前topM个最大值, 用来计算缩放参数*/
|
||||
priority_queue<pair<double, double>, vector<pair<double, double> >, cmpFunc> pqTopM;
|
||||
|
|
@ -211,7 +151,7 @@ void ThreadProcessData(const ThreadParam& param) {
|
|||
int rowNum = 0;
|
||||
int colNum = 0;
|
||||
|
||||
hs = ReadMatlabMat<double>(matFilePath.string(), "hs", &rowNum, &colNum);
|
||||
hs = ReadMtxDouble(matFilePath.string(), "hs", &rowNum, &colNum);
|
||||
|
||||
vector<double>vXBin;
|
||||
vector<double>vYBin;
|
||||
|
|
@ -224,7 +164,7 @@ void ThreadProcessData(const ThreadParam& param) {
|
|||
PutXtoBin(hs + i * colNum, colNum, 0.2, vXBin, vYBin);
|
||||
|
||||
GMM gmm(1, 2); // 1维, 2个高斯模型
|
||||
gmm.Train(vXBin.data(), vXBin.size());
|
||||
gmm.Train(vXBin.data(), (int)vXBin.size());
|
||||
|
||||
GMMToFactorEY(gmm, 0.2, vYBin, vFactor, vEY);
|
||||
vDist[i] = CorrelationDistance(vYBin, vEY);
|
||||
|
|
@ -232,15 +172,15 @@ void ThreadProcessData(const ThreadParam& param) {
|
|||
}
|
||||
/* 写入matlab文件 */
|
||||
MATFile* pMatFile = matOpen(outFilePath.string().c_str(), "w");
|
||||
SaveMatrix<double>(vFactorAll.data(), pMatFile, "factor", rowNum, 6);
|
||||
SaveMatrix<double>(vDist.data(), pMatFile, "correlation", rowNum, 1);
|
||||
SaveMtxDouble(vFactorAll.data(), pMatFile, "factor", rowNum, 6);
|
||||
SaveMtxDouble(vDist.data(), pMatFile, "correlation", rowNum, 1);
|
||||
matClose(pMatFile);
|
||||
|
||||
delete[] hs;
|
||||
}
|
||||
|
||||
/* 程序入口 */
|
||||
int main(int argc, char** argv) {
|
||||
int main(int argc, const char** argv) {
|
||||
|
||||
if (argc != 5) {
|
||||
cerr << "This program should take 4 arguments(1.parrent Dir; 2. mat file suffix; 3. out mat filename; 4. thread number)!" << endl;
|
||||
|
|
@ -267,6 +207,6 @@ int main(int argc, char** argv) {
|
|||
}
|
||||
thPool.~ThreadPool();
|
||||
finish = clock();
|
||||
cout << "Total time:" << (double)(finish - begin) / CLOCKS_PER_SEC << endl;
|
||||
cout << "GMM Total time: " << (double)(finish - begin) / CLOCKS_PER_SEC << " s" << endl;
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -141,7 +141,7 @@ int main(int argc, char** argv) {
|
|||
//cout<<dicr.size()<<endl;
|
||||
//cout<<wd2.size()<<" "<<wd2[0].size()<<endl;
|
||||
//cout<<wd1s.size()<<" "<<wd1s[0].size()<<endl;
|
||||
//#pragma omp parallel for
|
||||
// #pragma omp parallel for
|
||||
for (int i = 0; i < loopNum; ++i) {
|
||||
clock_t begin = clock();
|
||||
//#pragma omp atomic
|
||||
|
|
@ -174,11 +174,11 @@ int main(int argc, char** argv) {
|
|||
}
|
||||
clock_t finish = clock();
|
||||
double loopTime = (double)(finish - begin) / CLOCKS_PER_SEC;
|
||||
//cout<<"Loop : "<<i<<" Time consuming :"<<loopTime<<"s"<<endl;
|
||||
// cout<<"Loop : "<<i<<" Time consuming :"<<loopTime<<"s"<<endl;
|
||||
}
|
||||
end = clock();
|
||||
double endtime = (double)(end - start) / CLOCKS_PER_SEC;
|
||||
//cout<<"Total time:"<<endtime<<endl;
|
||||
cout<<"RandSim Total time:"<<endtime << " s" << endl;
|
||||
txtWriterVvs(Zr, ZrName);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
41
Twirls.sln
41
Twirls.sln
|
|
@ -7,30 +7,71 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GMM", "GMM\GMM.vcxproj", "{
|
|||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RandSim", "RandSim\RandSim.vcxproj", "{D3A55022-91F5-4DB2-85A6-A25AE12CC840}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CppRun", "CppRun\CppRun.vcxproj", "{0E88FF62-C387-44F4-A8B6-3FD3ED0206B6}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{C8434373-F2D6-459C-AC6D-79611ACEF9F5} = {C8434373-F2D6-459C-AC6D-79611ACEF9F5}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CommonLib", "CommonLib\CommonLib.vcxproj", "{C8434373-F2D6-459C-AC6D-79611ACEF9F5}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|ARM = Debug|ARM
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
Release|ARM = Release|ARM
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{A2B67815-1235-4F7C-874D-4FCCB3B0C738}.Debug|ARM.ActiveCfg = Debug|x64
|
||||
{A2B67815-1235-4F7C-874D-4FCCB3B0C738}.Debug|ARM.Build.0 = Debug|x64
|
||||
{A2B67815-1235-4F7C-874D-4FCCB3B0C738}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{A2B67815-1235-4F7C-874D-4FCCB3B0C738}.Debug|x64.Build.0 = Debug|x64
|
||||
{A2B67815-1235-4F7C-874D-4FCCB3B0C738}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{A2B67815-1235-4F7C-874D-4FCCB3B0C738}.Debug|x86.Build.0 = Debug|Win32
|
||||
{A2B67815-1235-4F7C-874D-4FCCB3B0C738}.Release|ARM.ActiveCfg = Release|x64
|
||||
{A2B67815-1235-4F7C-874D-4FCCB3B0C738}.Release|ARM.Build.0 = Release|x64
|
||||
{A2B67815-1235-4F7C-874D-4FCCB3B0C738}.Release|x64.ActiveCfg = Release|x64
|
||||
{A2B67815-1235-4F7C-874D-4FCCB3B0C738}.Release|x64.Build.0 = Release|x64
|
||||
{A2B67815-1235-4F7C-874D-4FCCB3B0C738}.Release|x86.ActiveCfg = Release|Win32
|
||||
{A2B67815-1235-4F7C-874D-4FCCB3B0C738}.Release|x86.Build.0 = Release|Win32
|
||||
{D3A55022-91F5-4DB2-85A6-A25AE12CC840}.Debug|ARM.ActiveCfg = Debug|x64
|
||||
{D3A55022-91F5-4DB2-85A6-A25AE12CC840}.Debug|ARM.Build.0 = Debug|x64
|
||||
{D3A55022-91F5-4DB2-85A6-A25AE12CC840}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{D3A55022-91F5-4DB2-85A6-A25AE12CC840}.Debug|x64.Build.0 = Debug|x64
|
||||
{D3A55022-91F5-4DB2-85A6-A25AE12CC840}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{D3A55022-91F5-4DB2-85A6-A25AE12CC840}.Debug|x86.Build.0 = Debug|Win32
|
||||
{D3A55022-91F5-4DB2-85A6-A25AE12CC840}.Release|ARM.ActiveCfg = Release|x64
|
||||
{D3A55022-91F5-4DB2-85A6-A25AE12CC840}.Release|ARM.Build.0 = Release|x64
|
||||
{D3A55022-91F5-4DB2-85A6-A25AE12CC840}.Release|x64.ActiveCfg = Release|x64
|
||||
{D3A55022-91F5-4DB2-85A6-A25AE12CC840}.Release|x64.Build.0 = Release|x64
|
||||
{D3A55022-91F5-4DB2-85A6-A25AE12CC840}.Release|x86.ActiveCfg = Release|Win32
|
||||
{D3A55022-91F5-4DB2-85A6-A25AE12CC840}.Release|x86.Build.0 = Release|Win32
|
||||
{0E88FF62-C387-44F4-A8B6-3FD3ED0206B6}.Debug|ARM.ActiveCfg = Debug|x64
|
||||
{0E88FF62-C387-44F4-A8B6-3FD3ED0206B6}.Debug|ARM.Build.0 = Debug|x64
|
||||
{0E88FF62-C387-44F4-A8B6-3FD3ED0206B6}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{0E88FF62-C387-44F4-A8B6-3FD3ED0206B6}.Debug|x64.Build.0 = Debug|x64
|
||||
{0E88FF62-C387-44F4-A8B6-3FD3ED0206B6}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{0E88FF62-C387-44F4-A8B6-3FD3ED0206B6}.Debug|x86.Build.0 = Debug|Win32
|
||||
{0E88FF62-C387-44F4-A8B6-3FD3ED0206B6}.Release|ARM.ActiveCfg = Release|x64
|
||||
{0E88FF62-C387-44F4-A8B6-3FD3ED0206B6}.Release|ARM.Build.0 = Release|x64
|
||||
{0E88FF62-C387-44F4-A8B6-3FD3ED0206B6}.Release|x64.ActiveCfg = Release|x64
|
||||
{0E88FF62-C387-44F4-A8B6-3FD3ED0206B6}.Release|x64.Build.0 = Release|x64
|
||||
{0E88FF62-C387-44F4-A8B6-3FD3ED0206B6}.Release|x86.ActiveCfg = Release|Win32
|
||||
{0E88FF62-C387-44F4-A8B6-3FD3ED0206B6}.Release|x86.Build.0 = Release|Win32
|
||||
{C8434373-F2D6-459C-AC6D-79611ACEF9F5}.Debug|ARM.ActiveCfg = Debug|x64
|
||||
{C8434373-F2D6-459C-AC6D-79611ACEF9F5}.Debug|ARM.Build.0 = Debug|x64
|
||||
{C8434373-F2D6-459C-AC6D-79611ACEF9F5}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{C8434373-F2D6-459C-AC6D-79611ACEF9F5}.Debug|x64.Build.0 = Debug|x64
|
||||
{C8434373-F2D6-459C-AC6D-79611ACEF9F5}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{C8434373-F2D6-459C-AC6D-79611ACEF9F5}.Debug|x86.Build.0 = Debug|Win32
|
||||
{C8434373-F2D6-459C-AC6D-79611ACEF9F5}.Release|ARM.ActiveCfg = Release|x64
|
||||
{C8434373-F2D6-459C-AC6D-79611ACEF9F5}.Release|ARM.Build.0 = Release|x64
|
||||
{C8434373-F2D6-459C-AC6D-79611ACEF9F5}.Release|x64.ActiveCfg = Release|x64
|
||||
{C8434373-F2D6-459C-AC6D-79611ACEF9F5}.Release|x64.Build.0 = Release|x64
|
||||
{C8434373-F2D6-459C-AC6D-79611ACEF9F5}.Release|x86.ActiveCfg = Release|Win32
|
||||
{C8434373-F2D6-459C-AC6D-79611ACEF9F5}.Release|x86.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
|
|
|||
Loading…
Reference in New Issue