获取报告 Stream转string,利用字符串分割转换成DataTable

本文介绍了一种使用Amazon MarketplaceWebService (MWS) 获取并解析报表的方法。通过C#实现了一个具体的功能,该功能创建内存流并利用此流请求指定报表。在成功获取报表后,文章展示了如何将报表内容转换为DataTable以便于进一步的数据处理和展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    protected void Button1_Click(object sender, EventArgs e)
    {
        MemoryStream stream = new MemoryStream();
        StreamReader reader = new StreamReader(stream);

        GetReportRequest request = new GetReportRequest();
        request.ReportId = "24537536063";
        request.Merchant = sellerId;
        request.MWSAuthToken = mwsAuthToken;
        request.Report = stream;
        ltMsg.Text = InvokeGetReport(request);

        string text = reader.ReadToEnd();
        stream.Dispose();
        stream.Close();
        reader.Dispose();
        reader.Close();


        DataTable dt = ConvertReport2DT(text);
        GridView1.DataSource = dt;
        GridView1.DataBind();

        //Response.Write(text);
    }

    public static string InvokeGetReport(GetReportRequest request)
    {
        StringBuilder builder = new StringBuilder();
        try
        {
            MarketplaceWebService.MarketplaceWebServiceConfig config = new MarketplaceWebServiceConfig();
            config.ServiceURL = serviceURL;
            MarketplaceWebService.MarketplaceWebService service = new MarketplaceWebServiceClient
                (accessKey, secretKey, appName, appVersion, config);

            GetReportResponse response = service.GetReport(request);

            builder.AppendFormat("Service Response");
            builder.AppendFormat("=============================================================================");

            builder.AppendFormat("        GetReportResponse");
            if (response.IsSetGetReportResult())
            {
                builder.AppendFormat("            GetReportResult");
                GetReportResult getReportResult = response.GetReportResult;
                if (getReportResult.IsSetContentMD5())
                {
                    builder.AppendFormat("                ContentMD5");
                    builder.AppendFormat("                    {0}", getReportResult.ContentMD5);
                }
            }
            if (response.IsSetResponseMetadata())
            {
                builder.AppendFormat("            ResponseMetadata");
                ResponseMetadata responseMetadata = response.ResponseMetadata;
                if (responseMetadata.IsSetRequestId())
                {
                    builder.AppendFormat("                RequestId");
                    builder.AppendFormat("                    {0}", responseMetadata.RequestId);
                }
            }

            builder.AppendFormat("            ResponseHeaderMetadata");
            builder.AppendFormat("                RequestId");
            builder.AppendFormat("                    " + response.ResponseHeaderMetadata.RequestId);
            builder.AppendFormat("                ResponseContext");
            builder.AppendFormat("                    " + response.ResponseHeaderMetadata.ResponseContext);
            builder.AppendFormat("                Timestamp");
            builder.AppendFormat("                    " + response.ResponseHeaderMetadata.Timestamp);

        }
        catch (MarketplaceWebServiceException ex)
        {
            builder.AppendFormat("Caught Exception: " + ex.Message);
            builder.AppendFormat("Response Status Code: " + ex.StatusCode);
            builder.AppendFormat("Error Code: " + ex.ErrorCode);
            builder.AppendFormat("Error Type: " + ex.ErrorType);
            builder.AppendFormat("Request ID: " + ex.RequestId);
            builder.AppendFormat("XML: " + ex.XML);
            builder.AppendFormat("ResponseHeaderMetadata: " + ex.ResponseHeaderMetadata);
        }
        return builder.ToString();
    }

    #region 报告字符串转换成DataTable
    /// <summary>
    /// 报告字符串转换成DataTable
    /// </summary>
    /// <param name="reportMsg">报告字符串</param>
    /// <returns></returns>
    public static DataTable ConvertReport2DT(string reportMsg)
    {
        DataTable dt = new DataTable();
        try
        {
            //\t       \r\n
            if (reportMsg.Contains("\r\n"))
            {
                string[] rows = reportMsg.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
                //第一行表头
                if (rows[0].Contains("\t")) //制表符
                {
                    string[] columns = rows[0].Split('\t');
                    for (int i = 0; i < columns.Length; i++)
                    {
                        if (!dt.Columns.Contains(columns[i]))
                        {
                            dt.Columns.Add(columns[i]);
                        }
                    }
                }
                //第二行开始数据
                for (int i = 1; i < rows.Length; i++)
                {
                    string[] datas = rows[i].Split('\t');
                    DataRow dr = dt.NewRow();
                    for (int j = 0; j < datas.Length; j++)
                    {
                        dr[j] = datas[j];
                    }
                    dt.Rows.Add(dr);
                    dr = null;
                }
            }
        }
        catch { }
        return dt;
    }
    #endregion

public void CreateFileAndUpload(JObject requestJson, bool isUploadFile) { try { string uploadFilePath = ""; // 生成上传结果文件 CreateUploadFileInfo(requestJson, out uploadFilePath); if (!isUploadFile) { return; } if (uploadFilePath.Trim() == string.Empty) { log.Error(string.Format("uploadFilePath is emmpty")); return; } // 执行上传 DirectoryInfo dir = new DirectoryInfo(uploadFilePath); FileSystemInfo[] fileinfo = dir.GetFileSystemInfos(); //获取目录下(不包含子目录)的文件和子目录 string uploadResult = ""; string csvPath = ""; string[] zipPath = new string[] { }; List<DataTable> csvTable = Enumerable.Repeat<DataTable>(null, 4).ToList(); foreach (FileSystemInfo file in fileinfo) { if (file is DirectoryInfo) //判断是否文件夹 { continue; } // 是文件执行上传 string fullPath = file.FullName; if (file.FullName.Contains(".qdf.csv")) { csvTable[0]= (ConvertCsvToDataTable(fullPath)); // .qdf.csvDataTable } if(file.FullName.Contains("_R_tilt_corrected.csv")) { csvTable[1] = ConvertCsvToDataTable(fullPath); } if (file.FullName.Contains("_G_tilt_corrected.csv")) { csvTable[2] = ConvertCsvToDataTable(fullPath); } if (file.FullName.Contains("_B_tilt_corrected.csv")) { csvTable[3] = ConvertCsvToDataTable(fullPath); } if (file.FullName.Contains(".zip")) { zipPath = new[] { fullPath }; } } // post上传数据&文件 JObject UpLoadQdfAndZIPObject = new JObject(); string mesResult = MesRequestHelper.UploadQdfAndZIP(zipPath, csvPath, csvTable, SystemConfig.MachineID, Use.ToClient.ToString(), SystemConfig.OrderID, SystemConfig.model, ProcessCode_RockyP1.BBModule_MTF_Test.ToString()); log.Info(string.Format("UploadQdfAndZIP mes返回的消息:{0}", mesResult)); UpLoadQdfAndZIPObject = JObject.Parse(mesResult); bool status = false; string msg = ""; if (UpLoadQdfAndZIPObject.Property("status") != null) { status = UpLoadQdfAndZIPObject["status"].Value<bool>(); } if (UpLoadQdfAndZIPObject.Property("msg") != null) { msg = UpLoadQdfAndZIPObject["msg"].ToString(); } if(status) // 通知机台后台服务 { bool result = BackendService(); log.Info(string.Format("通知机台后台服务结果:{0}", result)); } } catch (Exception ex) { log.Error(string.Format("UploadTestResult result:{0}, failed:{1}", requestJson.ToString(), ex.Message)); } } 这个函数为啥会捕捉到输入数组长度大于此表中的列数
06-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值