如何使用C++的getline函数提取文本文件中|分隔符间的数据?
嘿,这个需求我之前处理过类似的,给你分享几种实用的实现方式,分不同场景来梳理:
Python 实现(最灵活通用)
如果你用Python处理,这应该是最顺手的方案,能轻松处理文件读取、分割和清洗:
首先,你的文本每行格式是 | No. | name. | product. | price. |,直接按|分割后,会得到包含空白和空字符串的列表,我们需要先清洗这些无效内容:
with open('your_data.txt', 'r', encoding='utf-8') as file: # 逐行读取文件 for line in file: # 按|分割当前行的所有内容 raw_segments = line.split('|') # 清洗每个分段:去掉前后空白,过滤掉空的无效分段 valid_segments = [seg.strip() for seg in raw_segments if seg.strip()] # 现在valid_segments里就是每个干净的分隔段了 for idx, seg in enumerate(valid_segments, 1): print(f"第{idx}个分隔段:{seg}") # 如果要拆分这个段里的单词/音节,直接用split()按空白分割 words = seg.split() print(f"该段包含的单词:{words}\n")
额外提示
如果你的数据里字段内部可能包含|(虽然你说用|做分隔符,但以防万一),可以用Python内置的csv模块来解析,它能处理这种复杂的分隔场景:
import csv with open('your_data.txt', 'r', encoding='utf-8') as file: # 指定分隔符为|,同时跳过字段前后的空白 reader = csv.reader(file, delimiter='|', skipinitialspace=True) for row in reader: # 过滤掉空字符串(因为行首行尾的|会产生空元素) valid_segments = [seg for seg in row if seg] print(valid_segments)
Bash 脚本实现(Linux/Unix环境快速处理)
如果是在终端环境下想快速处理,用awk或者cut+sed组合就能搞定:
用awk的方案
awk -F'|' '{ for(i=1; i<=NF; i++){ # 去掉字段前后的空白 gsub(/^[[:space:]]+|[[:space:]]+$/, "", $i) # 只输出非空的有效分段 if($i != "") print $i } }' your_data.txt
用cut+sed的组合
# cut提取除了第一个空字段外的所有内容,再用sed处理空白和分割 cut -d'|' -f2- your_data.txt | sed 's/^[[:space:]]*//; s/[[:space:]]*$//; s/[[:space:]]*|[[:space:]]*/\n/g'
核心思路总结
不管用哪种语言,核心步骤都是这三步:
- 按分隔符
|拆分每行内容 - 清洗每个分段:去掉前后的空白字符
- 过滤掉拆分后产生的空字符串(因为行首和行尾的
|会导致空元素)
如果还要进一步把每个分段拆成单词/音节,直接对清洗后的分段按空白分割就行~
内容的提问来源于stack exchange,提问作者Vinita Kumari
相关产品推荐
相关产品推荐

