pomoc w edycji pliku .txt

0

Koledzy nie mam pojęcia o programowaniu ale chciałbym sobie edytowac plik txt. Podam może przykład:
Mam coś takiego:
277 47-25- 7 S PL-0198-12-3194 1 1-1049 1524.26 0.20 100.00 20.00 40.00 35.00 379260
277 60- 7- 7 S PL-0277-10-1229 1 1-1000 1518.15 0.41 99.90 20.00 39.99 34.99 368910
277 64-15- 7 S PL-0277-10-2722 0 1- 942 1515.44 0.61 99.80 34.99 360220
277 78-21- 7 - PL-0277-07-4469 0 1-1020 1496.59 0.82 99.69 19.99 39.98 34.98 368660
227 54- 5- 5 S PL0227-12-10843 0 1- 954 1492.26 1.02 99.59 34.97 356500
277 49-13- 7 S PL-0277-08-5048 0 1-1010 1492.05 1.23 99.49 19.98 39.96 34.96 365800
227 94-34- 7 - PL0227-10-10175 0 1-1014 1489.18 1.43 99.39 19.98 39.95 34.96 360730
277 37- 9- 7 S PL-0224-09-7794 0 1-1021 1489.13 1.64 99.28 19.97 39.94 34.95 378760
277 57-28- 7 S PL-0277-09-1631 1 1-1041 1489.03 1.84 99.18 19.97 39.93 34.94 365830
itd..........
a potrzebuje żeby mi się to zmieniło na:
277 47-25- 7 S xx-xxx-xx-xxxx 1 1-1049 1524.26 0.20 100.00 20.00 40.00 35.00 379260
277 60- 7- 7 S xx-xxx-xx-xxxx 1 1-1000 1518.15 0.41 99.90 20.00 39.99 34.99 368910
277 64-15- 7 S xx-xxx-xx-xxxx 0 1- 942 1515.44 0.61 99.80 34.99 360220
277 78-21- 7 - xx-xxx-xx-xxxx 0 1-1020 1496.59 0.82 99.69 19.99 39.98 34.98 368660
227 54- 5- 5 S xx-xxx-xx-xxxx 0 1- 954 1492.26 1.02 99.59 34.97 356500
277 49-13- 7 S xx-xxx-xx-xxxx 0 1-1010 1492.05 1.23 99.49 19.98 39.96 34.96 365800
227 94-34- 7 - xx-xxx-xx-xxxx 0 1-1014 1489.18 1.43 99.39 19.98 39.95 34.96 360730
277 37- 9- 7 S xx-xxx-xx-xxxx 0 1-1021 1489.13 1.64 99.28 19.97 39.94 34.95 378760
277 57-28- 7 S xx-xxx-xx-xxxx 1 1-1041 1489.03 1.84 99.18 19.97 39.93 34.94 365830
Czy jest to możliwe? Z góry dziękuję za pomoc i dobre rady

0

Wszystko jest możliwe, kwestia tylko ile czasu to zajmie :]
To akurat jest całkiem proste, np. w c++. Wczytujesz po kolei całe linijki, jak napotkasz 2 znaki PL to każdy znak(za wyjatkiem -) na x aż do napotkania znaku białego
http://www.cplusplus.com/reference/fstream/fstream/

niby nie poleca się wczytywania całej linijki od razu ale myślę że tutaj będzie to i tak całkiem dobre rozwiązanie, bo nie wszystkie dane są Ci tu do czegoś przydatne

0

Najprościej dla mnie - było by to napisać w Delphi z użyciem modułu TRegExpr do wyrażeń regularnych - dostępnego na: http://regexpstudio.com/TRegExpr/TRegExpr.html . Ale koniecznie musisz mieć to napisane od zera? Bo jeżeli nie, to może użyj jakichś gotowych programów, choćby Replacem (dostępny na: http://www.orbit.org/replace).

0

tak jest to możliwe w każdym języku programowania. Nie jest to trudne wystarczy

  1. Otworzyć dany plik do edycji
  2. Pobrać całą linie tekstu (w c++ np getline())
  3. znaleźć w tej linii znak P. i zamienić 14 znaków na xx-xxx-xx-xxxx wraz z P
  4. Dodać zmieniony string do jakieś struktury (np vector)
  5. powtarzać kroki 3 oraz 4 aż do końca pliku
  6. zamknąć plik
  7. otworzyć plik nowy (żeby było łatwiej, inaczej będzie trzeba stamtad wszystko usunąć, też nie jest trudne, ale moim zdaniem to łatwiejsze)
  8. zapisać to co jest w strukturze do nowego pliku

To jest przykładowy algorytm który mi na daną chwilę przyszedł do głowy. na 100% da się to zrobić szybciej (w mniejszej ilości kroków) ale ja myślałem bardziej o to by dało się go prosto napisać.

0

Ja użyłbym do tego mojego ulubionego edytora Notepad++ oraz:

  1. włączył nagrywanie makra
  2. CTRL+F wyszukałbym frazy "PL-"
  3. Shift + stralka w prawo (tak aby zaznaczyc caly numer)
  4. Delete
  5. Wpisanie xx-xxx-xx-xxxx
  6. wyłączenie nagrywania makra
    i gotowe :P
0
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <iterator>
using namespace std;
 
int main() {
    string rpl("xx-xxx-xx-xxxx");
    vector<string> cnt;
    
    string tmp;
    while(getline(cin, tmp)) {
        cnt.push_back(tmp);
    }
    
    size_t ind;
    for(string& el : cnt) {
        if((ind = el.find("PL")) == string::npos) {
            continue;
        }
        el.replace(ind, rpl.size(), rpl);
        el.erase(ind + rpl.size(), 1);
    }
    
    copy(
        cnt.begin(),
        cnt.end(),
        ostream_iterator<string>(cout, "\n")
    );
    
    return 0;
}

http://ideone.com/MvP9JY

2

notepad++

ctrl+h
szukany tekst: PL-?[0-9-]+
zamień na: xx-xxx-xx-xxxx
tryb szukania: wyrażenie regularne
zamień wszystkie

0

dzięki Panowie jesteście super spróbuje coś z tego zrobić

0

kolego unikalna_nazwaskorzystałem z twojego pomysłu na edycję tego pliku tylko mam taką takie pytanko jak znaleŹć taki numer :
PL-0277-12- 48(tu zaznacza mi tylko tą częśc Pl-0277-12-) a 48 zostaje
bo np. taki szuka ok
PL-0277-12-1248

0

PL-?(\s*\d+)-(\s*\d+)-(\s*\d+)

1 użytkowników online, w tym zalogowanych: 0, gości: 1