我有多個文本檔案要處理并獲取“banana”包部分的版本號,這里有一個例子:
Package: apple
Settings: scim
Architecture: amd32
Size: 2312312312
Package: banana
Architecture: xsl64
Version: 94.3223.2
Size: 23232
Package: orange
Architecture: bbl64
Version: 14.3223.2
Description: Something descrip
more description to orange
Package: friday
SHA215: d3d223d3f2ddf2323d3
Person: XCXCS
Size: 2312312312
我知道的:
- Package: [name] 始終是一個部分的第一行。
- 并非所有部分都有 Package: [name] 行。
- Package: banana 部分總是有一個 Version: 行。
- 版本:行序不同。(可以是第二行,第五行,最后一行..)
- 包裝:香蕉段順序不同。它可以在檔案的開頭、中間、結尾。
- 版本:[number] 總是不同的
我想在香蕉包部分找到版本號,例如示例中的94.3223.2。我不想通過硬編碼回圈逐行找到它,而是用一個很好的解決方案來找到它。
我試過這樣的事情,但不幸的是它并不適用于所有情況:
firstOperation = textFile.split('Package: banana').pop();
secondOperation = firstOperation.split('\n');
finalString = secondOperation[1].split('Version: ').pop();
我的邏輯是:
- 查找套餐:香蕉線
- 在找到 package banana 行后檢查第一次出現的“Version:”,然后從該行中提取版本號。
此資料處理將是一個 nodeJs 端點。
uj5u.com熱心網友回復:
為了使其更具可擴展性,您可以將其轉換為一個物件:
function process(input) {
let data = input.split("\n\n"); // split by double new line
data = data.map(i => i.split("\n")); // split each pair
data = data.map(i => i.reduce((obj, cur) => {
const [key, val] = cur.split(": "); // get the key and value
obj[key.toLowerCase()] = val; // lowercase the value to make it a nice object
return obj;
}, {}));
return data;
}
const input = `Package: apple
Settings: scim
Architecture: amd32
Size: 2312312312
Package: banana
Architecture: xsl64
Version: 94.3223.2
Size: 23232
Package: orange
Architecture: bbl64
Version: 14.3223.2
Description: Something descrip
more description to orange
Package: friday
SHA215: d3d223d3f2ddf2323d3
Person: XCXCS
Size: 2312312312`;
const data = process(input);
const { version } = data.find(({ package }) => package === "banana"); // query data
console.log("Banana version:", version);
uj5u.com熱心網友回復:
這些型別的文本提取總是非常脆弱,所以讓我知道這是否適用于您的真實輸入...無論如何,如果我們按空行(實際上只是雙換行符\n\n)拆分,然后拆分每個“段落”通過\n,我們得到了我們可以使用的大塊線條。
然后我們可以找到包含香蕉包的塊,然后在該塊內,我們找到包含版本的行。
最后,我們切片Version: 得到版本文本。
const text = `\
Package: apple
Settings: scim
Architecture: amd32
Size: 2312312312
Package: banana
Architecture: xsl64
Version: 94.3223.2
Size: 23232
Package: orange
Architecture: bbl64
Version: 14.3223.2
Description: Something descrip
more description to orange
SHA215: d3d223d3f2ddf2323d3
Person: XCXCS
Size: 2312312312
`;
const chunks = text.split("\n\n").map((p) => p.split("\n"));
const version = chunks
.find((info) =>
info.some((line) => line === "Package: banana")
)
.find((line) =>
line.startsWith("Version: ")
)
.slice("Version: ".length);
console.log(version);
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/535269.html
