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:dzień
  • 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:10 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ł.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)