Я хочу получить доступ только к первой строке огромного текстового файла (.txt / .csv), чтобы изменить повторяющиеся слова, добавив счетчик и записав его обратно.
Другими словами: в заголовке texfile есть несколько одинаковых имен столбцов, которые необходимо изменить перед импортом в другую систему.
Пример ввода:
Col1, Col2, WWAB., WWAB., WWAB., WWAB., WWCD., WWCD., WWCD., Столбец99
В качестве примера текстовый файл с именем mytest.txt выглядит следующим образом:
Col1, Col2, WWAB., WWAB., WWAB., WWAB., WWCD., WWCD., WWCD., Столбец99
1,2,3,4,5,6,7,8,9,10
А, В, С, D, Е, F, G, H, I, J
Мой пример кода:
import java.io.IOException;
import java.io.RandomAccessFile;
public class ChangeTextFileHeader {
public static void main(String[] args) throws IOException {
RandomAccessFile raFile = null;
raFile = new RandomAccessFile("C:/mytest.txt", "rw"); // define File with read/write permission
int i;
String strOut;
raFile.seek(0); // sets pointer to the start of text
String csvHeader = raFile.readLine(); // read the first line (Header)
System.out.println("Header: " + csvHeader); // show original Header
for (i = 1; i <= 5; i = i + 1) {
raFile.seek(0); // start pointer
//replace textparts with counter
strOut = csvHeader;
strOut = strOut.replaceFirst("WWAB.", "WWAB" + i).replaceFirst("WWCD.", "WWCD" + i);
System.out.println("Loop "+i+": " + strOut); // show original Header
raFile.writeBytes(strOut); // write changes and continue from start
}
raFile.seek(0);
System.out.println("Result: " + raFile.readLine()); //show result of written Header
raFile.close(); //close File
}
}
Пример вывода должен быть:
Col1, Col2, WWAB1, WWAB2, WWAB3, WWAB4, WWCD1, WWCD2, WWCD3, Столбец99
К сожалению, он производит:
Col1, Col2, WWAB5, WWAB., WWAB., WWAB., WWCD5, WWCD., WWCD., Столбец99
Пожалуйста, покажите мне ваш рабочий код. Спасибо.