C++ 数据文件、数组和计算分配

2024-06-23

我是 C++ 新手,我的一项作业遇到了问题。目标是从如下所示的数据文件加载数据。

item number date    quantity    cost per each
1000       6/1/2018    2            2.18
1001       6/2/2018    3            4.44
1002       6/3/2018    1            15.37
1001       6/4/2018    1            4.18
1003       6/5/2018    7            25.2

基本上,我需要使用数组计算每个日期使用的平均项目数,并对成本进行一些其他计算。我真的很沉迷于从文件中加载数据并对其进行方程式操作。这是我到目前为止所拥有的。

#include <cmath> //for math operations
#include <iostream> //for cout
#include <cstdlib> //for compatibility
#include <fstream>
#include <string>
using namespace std;

int main() 
{   
string date;
int EOQ, rp;
int count;
int itemnum[][];
double quantity[][];
double cost[][];
ifstream myfile; 
string filename;
cout << "Data File: " << endl;
cin >> filename; // user enters filename

myfile.open(filename.c_str());

if(myfile.is_open())
{
    cout << "file opened" << endl;
    string head;
    while(getline(myfile, head))
    {
    break; // so header won't interfere with data
    }
while(!myfile.eof())
{ // do this until reaching the end of file

int x,y;

myfile >> itemnum[x][y] >> date >> quantity[x][y] >> cost[x][y];


cout << "The numbers are:" << endl;
for(count = 0; count < y; count++)
{
cout << itemnum[x][y] << endl; 
break;
}

//cout << "Item:         Reorder Point:       EOQ: " << endl;
//cout << itemnum << "      " << rp << "          " << EOQ << endl;

break;
}
}
else
{
    cout << "" << endl; //in case of user error
    cerr << "FILE NOT FOUND" << endl;
}


cout << endl;
cout << "---------------------------------------------" << endl;
cout << "   End of Assignment A8" << endl;
cout << "---------------------------------------------" << endl;
cout << endl;

system("pause");
return 0;

我还没有开始使用方程式,因为我仍然无法将文件加载到简单的数组中!

谢谢你!

数据文件链接:https://drive.google.com/file/d/1QtAC1bu518PEnk4rXyIXFZw3AYD6OBAv/view?usp=sharing https://drive.google.com/file/d/1QtAC1bu518PEnk4rXyIXFZw3AYD6OBAv/view?usp=sharing


在处理这类问题时,我喜欢将它们分解为与解析相关的部分。我正在使用一些标准库来为我完成一些工作。我还创建了一些结构来帮助组织数据信息。至于你的约会,我可以把它作为一个单一的std::string但我选择打破date分解为三种单独的类型并将它们存储到数据结构中,只是为了显示与解析相关的函数之一的功能。

我更喜欢做的是从文件中获取单行数据并将其保存到字符串中,或​​者获取文件的全部内容并将其保存到大缓冲区或字符串向量中,除非我处理不适用的特定类型的代码,例如解析wav文件。然后在我完成读取后关闭文件句柄!然后,在获得所需的所有信息后,我宁愿解析字符串,因为它更容易解析,而不是在打开文件时尝试直接解析该文件。然后在解析字符串后,我们可以填充我们需要的数据类型。

我必须稍微修改您的数据文件以适应额外的空格,因此我将您的文件保存为文本文件,在单行文本中的每种数据类型之间只有一个空格。我也没有包含第一行(标题)信息,因为我完全省略了它。然而,这仍然应该作为如何为具有良好可读性、可重用性的应用程序设计良好的工作流程的指南,并尝试保持其可移植性和尽可能通用。现在,您一直在等待的事情;我的代码版本的演示:


#include <string>
#include <sstream>
#include <iostream>
#include <fstream>
#include <exception>

struct Date {
    int month;
    int day;
    int year;

    Date() = default;
    Date( int monthIn, int dayIn, int yearIn ) :
        month( monthIn ),
        day( dayIn ),
        year( yearIn ) 
    {}
};

struct DataSheetItem {
    int itemNumber;
    Date date;
    int quantity;
    double costPerEach;

    DataSheetItem() = default;
    DataSheetItem( int itemNumberIn, Date& dateIn, int quantityIn, double costPerEachIn ) :
        itemNumber( itemNumberIn ),
        date( dateIn ),
        quantity( quantityIn ),
        costPerEach( costPerEachIn ) 
    {}
};

std::vector<std::string> splitString( const std::string& s, char delimiter ) {
    std::vector<std::string> tokens;
    std::string token;
    std::istringstream tokenStream( s );
    while( std::getline( tokenStream, token, delimiter ) ) {
        tokens.push_back( token );
    }

    return tokens;
}

void getDataFromFile( const char* filename, std::vector<std::string>& output ) {
    std::ifstream file( filename );
    if( !file ) {
        std::stringstream stream;
        stream << "failed to open file " << filename << '\n';
        throw std::runtime_error( stream.str() );
    }

    std::string line;

    while( std::getline( file, line ) ) {
        if ( line.size() > 0 ) 
            output.push_back( line );
    }
    file.close();
}

DataSheetItem parseDataSheet( std::string& line ) {    
    std::vector<std::string> tokens = splitString( line, ' ' ); // First parse with delimeter of a " "

    int itemNumber = std::stoi( tokens[0] );
    std::vector<std::string> dateInfo = splitString( tokens[1], '/' );
    int month = std::stoi( dateInfo[0] );
    int day   = std::stoi( dateInfo[1] );
    int year  = std::stoi( dateInfo[2] );
    Date date( month, day, year );
    int quantity = std::stoi( tokens[2] );
    double cost = std::stod( tokens[3] );

    return DataSheetItem( itemNumber, date, quantity, cost );
}

void generateDataSheets( std::vector<std::string>& lines, std::vector<DataSheetItem>& dataSheets ) {
    for( auto& l : lines ) {
        dataSheets.push_back( parseDataSheet( l ) );
    }
}

int main() {
    try {
        std::vector<std::string> fileConents;
        getDataSheetItemsFromFile( "test.txt", fileContents );
        std::vector<DataSheetItem> data;
        generateDataSheets( fileConents, data );

        // test to see if info is correct
        for( auto& d : data ) {
            std::cout << "Item #: " << d.itemNumber << " Date: "
                << d.date.month << "/" << d.date.day << "/" << d.date.year
                << " Quantity: " << d.quantity << " Cost: " << d.costPerEach << '\n';
        }
    
    } catch( const std::runtime_error& e ) {
        std::cerr << e.what() << '\n';
        return EXIT_FAILURE;
    }

    return EXIT_SUCCESS;
}

NOTE这不适用于您当前的文件;这不考虑文本的第一行(标题信息),也不考虑数据字段之间的任何额外空白。如果在打开文件时添加一行文本并读取一行并忽略它,则执行循环以获取所有要添加到向量的字符串以返回;您的向量将包含信息,但由于所有额外的空格,它们不会位于向量的正确索引位置。这是你需要注意的事情!除此之外;这就是我基本上设计一个程序或应用程序来解析数据的方式。这无论如何都不是 100% 完整的证明,甚至可能不是 100% 无错误,但从快速浏览并通过我的调试器运行几次来看,它似乎没有任何明显的错误。运行时效率等方面也可能有一些改进的空间,但这只是基本解析的概括。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 数据文件、数组和计算分配 的相关文章

  • MVC。网络错误:初始化字符串的格式不符合从索引 0 开始的规范

    我的连接字符串是
  • 指向指针的指针和指向二维数组的指针之间的区别

    如果我有一个二维数组 B 定义为 int B 2 3 1 3 5 2 4 6 Is int p B与 一样int p 3 B int f B printf d f 1 gives 5作为输出 同时printf d f 给出 1 作为答案 为
  • [Python]比较两个 zip 文件的函数,一个位于 FTP 目录中,另一个位于我的本地计算机上

    我在创建比较两个 zip 文件的函数时遇到问题 如果它们相同 而不仅仅是名称相同 这是我的代码示例 def validate zip files self host 192 168 0 1 port 2323 username 123 pa
  • C# Visual Studio 动态代码片段

    我正在开发一个 WinForms 项目 每天都会执行一些重复性的任务 所以我认为创建代码片段 https msdn microsoft com en us library ms165394 v vs 110 aspx会帮助我 但它仅适用于固
  • 多态性中基类缺少虚拟析构函数 = 资源泄漏?

    我们知道 如果要多态地使用基类 则需要将基类的析构函数指定为 virtual 否则程序中可能会出现资源泄漏 因为只会调用基类析构函数 而不会调用派生对象析构函数 我们还知道构造函数 析构函数纯粹是初始化 未初始化构造 而operator n
  • 如何处理作为参数传递到方法中的 Lambda 表达式 - C# .NET 3.5

    我对 Lambda 表达式的了解有点不稳定 虽然我可以编写使用 Lambda 表达式 又名 LINQ 的代码 但我正在尝试编写自己的方法 该方法采用一些 Lambda 表达式类型的参数 背景 我正在尝试编写一个方法 该方法从任何其他对象类型
  • 解析通过asp:FileUpload上传的XML文件

    我有一个场景 用户将上传 XML 文件 我想将该文件添加到数据库中的表中 不过 困难的部分是我需要解析文件 然后将一些信息添加到一些不同的表中 显示如何获取 XML 文件的每个示例都使用 URI 来获取文件 但是如何直接从数据库获取文件 或
  • Visual Basic 中未知长度的数组

    我有一段用 Visual Basic 编写的代码 Dim n As Double i As Integer n 4 Dim Ramp length 1 To 4 As Double For i 1 To n Ramp length i Ce
  • argc 和 argv 在 Windows 中没有用吗?

    在 Linux 中 argc 和 argv 计算终端中的参数 但在 Windows 中 我找不到放置第二个参数的地方 事实上 每次我运行该程序时 它都会创建那个丑陋的黑色窗口 我什至没有机会给出任何争论 那么这两个变量在Windows平台下
  • Excel 2007 中的数值 - 底层 xml 文件中的表示与存储

    这个问题与 NET和OpenXml有关 我已经阅读了以下文章 它有很好的解释 但没有回答我的问题 Excel 2007 中数值的可视化与底层 xml 文件不一致 https stackoverflow com questions 58594
  • 嘲笑会员用户

    我目前正在开发一个 asp net mvc 2 应用程序 它使用默认的 SqlMembershipProvider 进行身份验证 我已经实现了一个控制器方法 通过调用读取当前用户的 ProviderUserKeyMembership Get
  • WPF MVVM后台打印数据绑定问题

    我正在使用 wpf mvvm 开发一个销售点应用程序 在交易生命周期的许多阶段 都会在后台打印收据 我已经使用其他示例在后台生成和打印收据 我正在后台打印一个 UserControl 一切看起来都很棒 然后 我为该控件创建了 ViewMod
  • 简单的喷射器将具体类型与生活方式结合起来

    我正在寻找一种可以使用指定的生活方式注册具体类型的方法 基本上如下所示 public void SomeFunction Type concrete Lifestyle lifestyle gt container Register con
  • 在 JavaScript/CoffeeScript 中确定一个数组是否包含另一个数组的内容

    在 JavaScript 中 如何测试一个数组是否包含另一个数组的元素 arr1 1 2 3 4 5 8 1 10 2 3 4 5 9 function name arr1 gt true 没有 set 函数可以执行此操作 但您可以简单地执
  • Task.Delay 到底是如何工作的?

    他们说 Task Delay 是一个异步 Thread Sleep 为了测试这一点 我写了下面的代码 我希望立即打印 One 然后 3 秒后将打印结果变量 15 2 秒后 将打印 Two 但似乎并非如此 一 不会立即打印 3 秒后打印 On
  • 更快的 WinSock sendto()

    我使用的是 Windows Server 2008 我的程序是用 C 编写的 我在 while true 循环中使用 WinSock2 和 sendto 来发送数据包 代码如下 while true if c snd gt max c sn
  • 具有可导出私钥的证书的“错误密钥”例外

    我正在尝试使用非对称加密来加密然后解密文件 我已经使用 makecert 创建了一个测试证书并将其安装到我的个人本地计算机存储中 将来我必须在多个服务器上安装此证书 这就是为什么我使用 pe 标志创建它 即使用可导出的私钥 证书已成功创建并
  • 如何以一对一/零关系更新员工和身份用户

    我正在尝试更新员工记录 也想更新身份用户 如果我先单独更新身份用户 例如 UserManager Update user Context Entry employee State System Data Entity EntityState
  • 从不同的线程访问对象

    我有一个服务器类 它基本上等待来自客户端的连接 在该类中 我创建了一个 NetworkStream 对象 以便能够从客户端接收字节 由于 NetworkStream Read 方法不是异步的 这意味着它将等到从客户端读取字节才能继续执行类似
  • 有关 Endian 性和 .Net 的详细信息?

    我有几个关于字节顺序的问题 这些问题足够相关 我保证将它们作为一个问题提出 1 字节顺序是由 Net还是由硬件决定的 2 如果是由硬件决定的 我怎样才能在C 中找出硬件的字节序 3 字节序是否影响二进制交互 例如 OR AND OR 或移位

随机推荐

  • 如何显示在 Rails 控制台中运行的 SQL 查询?

    当我运行查询时 例如MyModel where or record associated things 在控制台中 如何查看正在运行的实际数据库查询 以便更好地了解正在发生的情况 Rails 3 在控制台中输入这一行 ActiveRecor
  • 在Python中使用networkX包绘制图形分区

    我有一个图形对象G节点来自0 to n 1和两个列表L1 L2这是节点的一个分区G 我想画画G以这样一种方式 节点结果分为两个块 一个相对于L1另一个相对于L2 图片的目的应该是证明之间的联系L1 and L2 你能帮我完成这个任务吗 提前
  • 如何使用 php Restful 以 api 为中心的内部设计而不是使用 http 请求

    我想创建一个以 php Restful api 为中心的 Web 应用程序 网站 其中有从前端代码调用的数据 api 除了每次加载页面时进行 HTTP curl 请求调用之外 使用 slim 等框架进行内部 API 调用还能做什么 我不确定
  • 是否可以在 Outlook 启动时运行 VBA 函数?

    我希望 Outlook 启动后立即运行 VBA 函数 这可能吗 如果可以 我需要做什么 我在谷歌上的搜索失败了 我不介意弹出安全警报 Use the Application Startup事件在ThisOutlookSession Priv
  • 序列化一个空类(没有字段)

    我有以下课程 class Foo JsonCreator public Foo 我得到以下异常 com fasterxml jackson databind JsonMappingException 没有找到类 Foo 的序列化器 也没有发
  • System.Net.Http.MultipartFormDataContent 的“curl -F”参数等效吗?

    我正在尝试使用sonicAPI 文件 上传 API https www sonicapi com docs api file upload in C 我尝试将 curl 示例转换为 C HttpClient and MultipartFor
  • 如何以编程方式制作 UIImage?

    这可能不是您一开始所想的 我知道如何使用 UIImage 但我现在需要知道如何使用以下方法创建 空白 UIImage CGRect screenRect self view bounds 嗯 这些尺寸 不管怎样 我想知道如何创建一个 UII
  • 使用 asp.net 身份在 Web api 中启用两因素身份验证时,SignInStatus 始终返回成功

    我正在 WebApi asp net 身份和 OWIN 中实现 2 因素身份验证 每次登录时 我都会收到 SignInStatus Success 但从未达到 SignInStatus RequiresVerification 尽管启用了用
  • 可以访问 JSF/facelets 中的请求参数的过滤器会导致错误的编码

    我面临以下问题 错误 对于用例 我添加了一个 log4j 过滤器 因为它可以提供很好的日志记录 请参阅here https stackoverflow com questions 5901347 a unique id per user s
  • 可点击的链接未出现在生成的锚标记的页面上

    我有一些 js 代码生成以下锚标记 a 2017 09 10 a 我从 IE 的 DOM Explorer 中剪切并粘贴了它 该链接在我显示的页面上不可单击 这是我希望它运行的 vb net Sub DownloadInspection C
  • 关于存储库模式的一些我根本不明白的事情

    我已经阅读了很多关于存储库是什么的主题 但仍然有一些事情困扰着我 据我了解 两者之间唯一的区别存储库 and 传统数据访问层 are 存储库的查询构造能力 即查询对象模式 但是当阅读以下 a 的定义时存储库模式 看来我们还可以有存储库即使我
  • 网页导航

    我正在寻找有关如何为基于 Spring 的 Web 应用程序最好地实现网页导航逻辑的指南 例如 我有一个网页 C 如果单击 确定 我希望流程返回到页面 A 如果这是上一页 或者页面 B 如果这是上一页 我目前正在页面上使用隐藏字段来跟踪我到
  • Swift 中的函数签名专业化崩溃

    我从用户那里收到崩溃报告 但我不明白该崩溃报告 It says Ribony function signature specialization
  • 将信息打印到shiny-server日志中

    有没有办法将信息包含 打印到闪亮的服务器日志文件中 我正在使用一个闪亮的应用程序 其中包括用户登录 如果我的应用程序崩溃 我想知道是什么用户导致了这次崩溃 我试图将其纳入我的server R PRINT FOR LOG FILE cat p
  • 使用 DI 进行单元测试和模拟服务

    我已经为此苦苦挣扎了一段时间 希望有人能提供帮助 我有一个使用服务来获取数据的组件 我正在尝试向其添加单元测试 我的问题是测试总是失败并显示 错误 没有 Http 提供程序 这是我的代码 Service import Injectable
  • Spring-data-rest 和 Spring-jpa [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 数据休息和 jpa 我使用 Embe
  • 使用 Python/Pandas 提取时间序列中的工作日

    我正在处理时间序列中的高频数据我想从我的数据中获取所有工作日 我的数据观测值以秒为单位分隔 因此每天有 86400 秒 并且我的数据集分布在 31 天中 因此有 2 678 400 个观测值 这是我的数据 部分 In 1 ts Out 1
  • 删除小数点后的尾随零雪花

    我一直在尝试从小数点后的数字列中删除尾随零 例如 0 978219150000 gt 0 97821915 0 650502591918 gt 0 650502591918 0 975479450000 gt 0 97547945 数据类型
  • Django - 将结果查询为“关联”字典?

    我想知道 Django 中是否有任何方便的助手可以将查询结果返回为更 可用 的格式 这样我就不必在我的视图中迭代它们 我有一个这样的查询 self filter key in keys values key value 我想要的最终结果是一
  • C++ 数据文件、数组和计算分配

    我是 C 新手 我的一项作业遇到了问题 目标是从如下所示的数据文件加载数据 item number date quantity cost per each 1000 6 1 2018 2 2 18 1001 6 2 2018 3 4 44