Modyfikacja pliku tekstowego

Modyfikacja pliku tekstowego
PawelEwald
  • Rejestracja:około 8 lat
  • Ostatnio:ponad 6 lat
  • Postów:19
0

Mam plik tekstowy ze słówkami Polsko-Niemieckimi. Chcę z robić z nich relacyjną bazę danych i do tego potrzebuję napisać program modyfikujący plik tekstowy. Chcę aby program dodał do każdej linijki na początku numer, a poza tym zamienił przecinek na enter oraz dodał ten sam numer który był na początku linijki. np

plik startowy wygląda tak:

dom
korek, młotek
delfin

plik wynikowy chcę aby wyglądał tak:

1; dom
2; korek
2; młotek
3; delfin

Jakiś pomysł jak to zrobić aby w odczytanym pliku zwiększać wartość zmiennej po każdej linijce i dodać tekst na początku każdej linijki i przy napotkaniu na przecinek zamieniać go na enter i dodawać treść zapamiętaną w zmiennej?

TJ
a już coś napisałeś czy czekasz na gotowca? :P
jarzi
  • Rejestracja:prawie 10 lat
  • Ostatnio:16 dni
  • Postów:96
0

Wczytuj po linii z pliku i wywołaj na tej linii string.split(",") potem numeruj


Loading...
edytowany 1x, ostatnio: jarzi
PawelEwald
  • Rejestracja:około 8 lat
  • Ostatnio:ponad 6 lat
  • Postów:19
0

Jeszcze nic nie napisałem. Szukam dopiero drogi i komend które mogę wykorzystać do napisania takiego programu. Do tej pory do modyfikacji struktury plików wystarczały mi wyrażenia regularne, ale teraz potrzebuję raczej programiku do obrobienia tematu. Poproszę tylko o kilka komend które można wykorzystać, albo do nakreślenia kierunku jak to można napisać.

Wymyśliłem że wczytam linijkę tekstu, do nowego pliku wpiszę numer, potem wpiszę resztę do napotkania na przecinek, jak napotkam przecinek to dodam nową linię razem z numerem i tak do końca linijki. może w klasie StringUtils coś znajdę przydatnego. No i jeszcze muszę wygooglować jak wstawić enter do pliku. Kiedyś było coś jak \n\r czy coś takiego.

TJ
  • Rejestracja:około 9 lat
  • Ostatnio:ponad 5 lat
  • Postów:35
0

cały kod twojego "programiku" sprowadza się do:

Kopiuj
 File file = new File("dupa.txt");

		    try {

		        Scanner sc = new Scanner(file);
		        int i=1;
		        while (sc.hasNextLine()) {
		        	String wyrazy[] = sc.nextLine().split(",");
		        	for(String s: wyrazy) {
		        		s=i+"; "+s.trim();
		        		System.out.println(s);
		        		i++;
		        	}
		        }
		    } 
		    catch (FileNotFoundException e) {
		        e.printStackTrace();
		    }
		 }
CountZero
  • Rejestracja:ponad 7 lat
  • Ostatnio:11 miesięcy
  • Postów:262
0

Może zapisz to jako plik csv? https://examples.javacodegeeks.com/core-java/writeread-csv-files-in-java-example/ Tu masz prawie gotowy kod.

DI
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad 6 lat
  • Postów:103
0

Mój sposób:

Kopiuj
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;

public class Test {

    public static void main(String[] args) throws IOException {
        final String fileName = "D:\\test.txt";
        final String splitter = ", ";

        final List<String> newLines = new ArrayList<>();
        for (final String line : Files.readAllLines(Paths.get(fileName), StandardCharsets.UTF_8)) {
            Collections.addAll(newLines, line.contains(splitter) ? line.split(splitter) : new String[]{line});
        }

        final AtomicInteger atomicInteger = new AtomicInteger(1);
        Files.write(Paths.get(fileName), newLines.stream()
                .map(line -> String.format("%d; %s", atomicInteger.getAndIncrement(), line)).collect(Collectors.toList()));
    }

}
PawelEwald
  • Rejestracja:około 8 lat
  • Ostatnio:ponad 6 lat
  • Postów:19
0

Napisałem coś takiego. Zadaniem programu jest przygotowanie relacyjnej bazy danych. Z jednego pliku robi trzy pliki. Plik pierwszy ze słówkami niemieckimi i rodzajnikiem, plik drugi ze słówkiem polski, a trzeci plik z relacją. Plik wygląda tak:
Aberglauben;der;przesąd,zabobon,

Kopiuj
Aberglauben;der;przesąd,zabobon,
cis11;a;cos11,
cis12;a;cos12,cos11,
cis13;a;cos13,cos15,cos16,
cis14;a;cos13,
cis15;a;cos12,
cis16;a;cos14,

funkcja wygląda następująco:

Kopiuj
public static void TworzenieListyTrzyPlikowej(String name) throws FileNotFoundException {
      FileInputStream file = new FileInputStream(name);
      PrintWriter writePL = new PrintWriter("src/main/resources/wtirePL.txt");
      PrintWriter writeDE = new PrintWriter("src/main/resources/wtireDE.txt");
      PrintWriter writePLDE = new PrintWriter("src/main/resources/wtirePLDE.txt");
      ArrayList listaPL = new ArrayList();
      Scanner sc = new Scanner(file, "UTF-8");

      int i = 0;//index DE
      int j = 0;//index PL
      int k = 0;//l.p.
      int duplikat = 0; //znacznik jak występują duplikaty
      int duplikatPLid = 0;

      writePLDE.println("Id;IdDE;IdPL");
      while (sc.hasNextLine()) {
          String[] wyrazy = sc.nextLine().split(";");
          String[] slowa = wyrazy[2].split(",");
          writeDE.println(i + ";" + wyrazy[0].trim() + ";" + wyrazy[1].trim());
          for (String s : slowa) {
//sprawdzenie czy w liście PL wystąpią duplikaty po dodaniu nowego rekordu.
              for (int x = 0; x < listaPL.size(); x++) {
                  if (listaPL.get(x).equals(s.trim())) {
                      duplikat = 1;
                      duplikatPLid = x;
                  }
              }
              if (duplikat == 0) {
                  writePL.println(j + ";" + s.trim());
                  listaPL.add(s.trim());
                  writePLDE.println(k + ";" + i + ";" + j);
                  j++;
              } else {
                  writePLDE.println(k + ";" + i + ";" + duplikatPLid);
              }
              k++;
              System.out.println(j);//program wykonuje się dosyć długo, dlatego zostawiłem odliczanie aby widzieć że coś się dzieje.
              duplikat = 0;
          }
          i++;
      }
      writePL.close();
      writeDE.close();
      writePLDE.close();
  }

Dziękuję wszystkim za sugestie i proszę o opinie jak ten kod powinien wyglądać.

Kod napisałem już dwa dni temu, ale cały czas miałem błędy wynikające jak się okazało z faktu, że plik ze słówkami nie we wszystkich linijkach miał po dwa średniki (bywało nawet po 6 średników). Plik ma 60tyś linijek i troszkę mi zajęło zanim to wyłapałem. A jak już wyłapałem co jest grane to napisałem mały programik który mi to wyprostował.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.