我有一个文本文件,其中包含我需要的所有信息,这需要转换为.csv文件。
示例:
abbccccdeffffiiiiiiiiiiiiiijjkkkkkkkkkkkllmmmmmmnnooo
abbccccdeffffiiiiiiiiiiiiiijjkkkkkkkkkkkllmmmmmmnnooo
abbccccdeffffiiiiiiiiiiiiiijjkkkkkkkkkkkllmmmmmmnnooo
abbccccdeffffiiiiiiiiiiiiiijjkkkkkkkkkkkllmmmmmmnnooo
abbccccdeffffiiiiiiiiiiiiiijjkkkkkkkkkkkllmmmmmmnnooo
abbccccdeffffiiiiiiiiiiiiiijjkkkkkkkkkkkllmmmmmmnnooo
所以基本上
正如我们从这个例子中看到的,我不能使用带空格或逗号的分隔符,它们都有不同的长度。请指出正确的方向。我只是想知道如何处理这个问题。
先谢谢你们!
答案 0 :(得分:2)
您知道每列的length
值,您可以使用String的substring
方法。
string.substring(start, start+length);
其中start
是列的起始索引,length
是colume值的长度。
使用StringBuilder
将其转换为csv
格式。在计算列值时,请继续将它们与stringBuilder
一起附加到,
对象中。检索并附加最后一列后,使用toString()
将其转换为String
并写入您选择的流。
我建议你使用相同的StringBuilder
对象,而不是为每一行创建一个新对象。一旦你把它写成流,只需将大小重置为零(StringBuilder.size(0)
)。
答案 1 :(得分:0)
也许您可以使用String中的indexOf
,lastIndexOf
和substring
方法?然后你可以找到你可以放置分隔符的地方。
String myString = "abbcccdee";
int lastCharIndex = 0;
while (true) {
if(lastCharIndex == myString.length()){
break;
}
//find char
char nextChar = myString.charAt(lastCharIndex);
//calculate first char position
int firstCharIndex = myString.indexOf(nextChar);
//calculate last char position
lastCharIndex = myString.lastIndexOf(nextChar) + 1;
//get value
String value = myString.substring(firstCharIndex, lastCharIndex);
System.out.println(value);
}
答案 2 :(得分:0)
<fileMessage class="MessageParser">
<field name="column1" type="java.lang.String" length="1" variable="id"/>
<field name="column2" type="java.lang.Integer" length="2" variable="age"/>
<field name="column3" type="java.lang.Long" length="4" variable="name"/>
<field name="column4" type="java.lang.String" length="1" variable="gender"/>
</fileMessage>
&#13;
将每一行移动到对象后,按照您想要的方式播放。
相信这需要更多努力,并且只有在具有不同列/行长度的不同文件时才应使用。 否则子串逻辑就可以了。
答案 3 :(得分:0)
使用univocity-parsers FixedWidthParser
和FixedWidthWriter
。
以下是一个例子:
// creates the sequence of field lengths you need
FixedWidthFieldLengths lengths = new FixedWidthFieldLengths(1, 2, 4, 1, 1, 4);
// creates the default settings for a fixed width parser
FixedWidthParserSettings settings = new FixedWidthParserSettings(lengths);
// creates a fixed-width parser with the given settings
FixedWidthParser parser = new FixedWidthParser(settings);
// parses all rows in one go.
List<String[]> allRows = parser.parseAll(new FileReader(new File("/path/to/file.txt")));
要将此内容写入CSV,请使用CsvWriter
:
CsvWriterSettings writerSettings = new CsvWriterSettings(); //many options here, check the tutorial
CsvWriter writer = new CsvWriter(new FileWriter(new File("/path/to/file.csv")), writerSettings);
// Writes the headers of the CSV file (not mandatory)
writer.writeHeaders("a", "bb", "cccc", "d", "e", "ffff");
// Here we just tell the writer to write everything and close the given output Writer instance.
writer.writeStringRowsAndClose(allRows); //this method is available in version 2.0.0-SNAPSHOT. If you use version 1.5.6 you must convert the rows to Object[]
披露:我是这个图书馆的作者。它是开源和免费的(Apache V2.0许可证)。