本教程详细介绍了如何使用php处理无分隔符的固定宽度数据文件(.out),并将其转换为更易于处理的csv或sql格式。核心在于利用php的`unpack`函数精确解析每条记录中的固定长度字段,然后通过`fputcsv`函数生成带有指定分隔符的csv文件,为数据转换提供了高效且灵活的解决方案。
固定宽度数据文件是一种常见的数据存储格式,其特点是每条记录中的每个字段都占据预设的固定字符长度,即使字段实际内容较短,也会用空格或其他填充字符补齐。与CSV或JSON等使用分隔符的数据格式不同,固定宽度文件没有明确的分隔符来区分字段,而是依赖于每个字段的起始位置和长度。
挑战:
示例数据结构:
考虑以下.out文件中的两条记录示例,它们没有分隔符,但每个数据段都占据固定的长度。
I299207075410 07 OCCLUSAL-HP LIQ17% LMedicis B000001000000000001EA 8428010080529100 1072363 20030101000000016750000000016750000000000167500200101010000000000000000000000000000000001218000000000000000000000000000000000000000000000000020021231262436018510(W/BRUSH APPLICATOR) TPLIQ 299207085060R01 LUZU CRE1% SBausch C000006000000000001EA 8404080054930829 1 1309011 20180105000000590530000000098421700000000902967000000000000000000000000000000000000000000000000000000000000000000000000000000 TPCRE
在这些记录中,即使是空白字符也可能构成一个独立的字段,或者作为某个字段的填充部分。例如,第一条记录的第一个字符是“I”,而第二条记录的第一个字符是空白,这可能表示一个长度为1的字段,其中空白代表NULL值。
PHP的unpack函数是处理固定宽度二进制或字符串数据的强大工具。它通过一个格式字符串来定义如何从输入数据中提取各个部分。
unpack函数的基本语法:
array unpack ( string $format , string $data )
格式字符串构建:
对于固定宽度的字符串数据,我们主要使用以下格式字符:
例如,A12id2 表示读取12个字符并将其命名为id2。
为了解析整个固定宽度行,我们需要将所有字段的格式描述连接起来,并用斜杠/分隔,形成一个完整的格式字符串。
以下PHP脚本演示了如何读取一个.out文件,解析其固定宽度记录,并将其导出为CSV文件。
1, // 例如 'I' 或空白
'id_number' => 12,
'code_type' => 5,
'product_name' => 35,
'concentration' => 32,
'manufacturer' => 22,
'product_code' => 22,
'batch_number' => 17,
'status_flag' => 2, // 可能是单个字符或空白
'quantity' => 10,
'details_long' => 186, // 这是一个较长的详细信息字段
'product_category' => 10
];
/
/ 5. 构建 unpack 格式字符串
$unpackFormats = [];
foreach ($fieldsDefinition as $name => $length) {
$unpackFormats[] = 'A' . $length . $name;
}
$unpackString = implode('/', $unpackFormats);
// 6. 逐行解析数据
$parsedData = [];
foreach ($rawLines as $lineNumber => $line) {
// 确保行长度足够,避免unpack警告
// 实际应用中,如果行长不符合预期,可能需要更复杂的错误处理
if (strlen($line) < array_sum($fieldsDefinition)) {
echo "警告:第 " . ($lineNumber + 1) . " 行长度不符合预期,可能被截断或解析错误。\n";
// 可以选择跳过此行或填充空白
// $line = str_pad($line, array_sum($fieldsDefinition), ' ');
}
$parsedLine = unpack($unpackString, $line);
// unpack 返回的数组键可能包含额外的数字索引,这里只保留命名的键
$cleanParsedLine = [];
foreach ($fieldsDefinition as $name => $length) {
$cleanParsedLine[$name] = trim($parsedLine[$name]); // 移除字段前后的空白,根据需求决定是否保留
}
$parsedData[] = $cleanParsedLine;
}
// 调试输出解析结果(可选)
// var_dump($parsedData);
// 7. 导出到CSV文件
$exportFile = fopen($outputCsvFile, "w");
if ($exportFile === false) {
die("错误:无法创建输出文件 '{$outputCsvFile}'。\n");
}
// 写入CSV头部(字段名)
fputcsv($exportFile, array_keys($fieldsDefinition), "|");
// 写入数据行
foreach ($parsedData as $row) {
fputcsv($exportFile, $row, "|"); // 使用管道符 "|" 作为分隔符
}
// 关闭文件句柄
fclose($exportFile);
echo "数据已成功从 '{$inputFile}' 导出到 '{$outputCsvFile}',使用 '|' 作为分隔符。\n";
?>代码解释:
虽然上述代码直接导出了CSV,但将其扩展为导出SQL文件也是可行的。在解析数据之后,你可以遍历 $parsedData 数组,为每一行数据生成一条 INSERT 语句。
示例代码片段(在CSV导出之后添加):
注意事项:
通过PHP的unpack函数,我们可以有效地解析无分隔符的固定宽度数据文件。结合文件读取和CSV/SQL写入功能,可以构建一个强大的数据转换工具。关键在于准确地定义每个固定宽度字段的名称和长度,并根据具体需求处理空白字符和数据类型转换。掌握这一技术,将使你在处理传统数据格式时更加得心应手。
# mysql
# php
# js
# json
# go
# app
# 工具
# csv
# ai
# sql注入
# sql语句
# csv文件
# 防止sql注入
# sql
# 数据类型
# NULL
# 关联数组
# while
# format
# fopen
# fclose
# feof
# fgets
# pdo
# 字符串
# 循环
# 数据结构
# 类型转换
# 数据库
# 分隔符
# 字段名
# 遍历
# 导出到
# 这是
# 可选
# 每条
# 第一个
# 句柄
# 将其
相关文章:
C#如何使用XPathNavigator高效查询XML
成都响应式网站开发,dw怎么把手机适应页面变成网页?
建站之星代理如何优化在线客服效率?
如何用西部建站助手快速创建专业网站?
婚礼视频制作网站,学习*后期制作的网站有哪些?
如何快速启动建站代理加盟业务?
网站图片在线制作软件,怎么在图片上做链接?
SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?
如何在Golang中使用encoding/gob序列化对象_存储和传输数据
合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?
如何彻底删除建站之星生成的Banner?
,购物网站怎么盈利呢?
网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
建站之星价格显示格式升级,你的预算足够吗?
详解jQuery停止动画——stop()方法的使用
已有域名如何快速搭建专属网站?
实现虚拟支付需哪些建站技术支撑?
制作网站的公司有哪些,做一个公司网站要多少钱?
清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?
网站制作费用多少钱,一个网站的运营,需要哪些费用?
如何制作网站标识牌,动态网站如何制作(教程)?
如何在橙子建站上传落地页?操作指南详解
建站之星后台密码遗忘或太弱?如何重置与强化?
如何快速完成中国万网建站详细流程?
如何在新浪SAE免费搭建个人博客?
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
湖州网站制作公司有哪些,浙江中蓝新能源公司官网?
C++如何编写函数模板?(泛型编程入门)
再谈Python中的字符串与字符编码(推荐)
如何获取上海专业网站定制建站电话?
建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析
建站之星如何快速生成多端适配网站?
如何通过老薛主机一键快速建站?
如何快速查询域名建站关键信息?
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
香港服务器租用每月最低只需15元?
北京制作网站的公司,北京铁路集团官方网站?
如何选择最佳自助建站系统?快速指南解析优劣
如何通过VPS建站无需域名直接访问?
Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递
相册网站制作软件,图片上的网址怎么复制?
陕西网站制作公司有哪些,陕西凌云电器有限公司官网?
建站主机核心功能解析:服务器选择与网站搭建流程指南
如何通过虚拟机搭建网站?详细步骤解析
建站主机选择指南:服务器配置与SEO优化实战技巧
如何用VPS主机快速搭建个人网站?
微课制作网站有哪些,微课网怎么进?
网站微信制作软件,如何制作微信链接?
*请认真填写需求信息,我们会在24小时内与您取得联系。