matematykaszkolna.pl
Porównywanie zawartości pliku Mariusz: Ktoś z was bawił się programowaniem ? Mamy dane dwa pliki Porównując n początkowych znaków w linii w obydwu plikach wypisać te linie których w jednym z plików brakuje Jeśli pliki mają tę samą liczbę linii to wypisać odpowiedni komunikat Próbowałem w podwójnie zagnieżdżonej pętli sprawdzać czy dla wybranej linii z tego większego pliku istnieje linia w tym mniejszym pliku mająca n pierwszych znaków równych Tę linię która nie miałaby pary chciałem wypisać Nie uzyskałem jednak oczekiwanych rezultatów
16 wrz 13:50
jakubs: Wrzuć kod.
16 wrz 13:55
Mariusz: Gdyby kod działał to bym nie pisał
16 wrz 14:48
jakubs: Gdzieś zgubiłem swoją magiczną rózgę, więc niestety nie pomogę.
16 wrz 14:50
Mariusz: Jak napisać taki program od początku ? Może inny pomysł byłby lepszy Gdybyś zobaczył kod też byś nie pomógł Inny dzieciak też gdy zobaczył tekst to mu się odechciało go tłumaczyć chociaż to nieco więcej niż strona tekstu była
16 wrz 15:04
jakubs: Zależy w jakim języku, np. w C++ można skorzystać ze stringów i porównywanie będzie dziecinnie proste emotka
16 wrz 15:07
Braun: @Mariusz Ty jesteś studentem, że tak zapytam ? emotka
16 wrz 15:23
Joe Black: Mariusz z postem o 15:04 twoje nastawienie jest takie: Dajcie gotowy kod.
16 wrz 16:01
Dziadek Mróz: Uje muje, dzikie węże. Po primo, jaki język. Po secundo, dej mie kod! Po tertio, wyrażaj się.
16 wrz 17:39
Braun: Po quattro to samo co po primo, secundo i tertio
16 wrz 17:51
Mariusz: Myślę że wiem dlaczego kod mi nie działa a ten temat pokazuje to jaka jest wasza "pomoc"
16 wrz 18:12
Braun: @Mariusz jeśli byś wstawił kod, to gwarantuję, że otrzymałbyś pomoc !
16 wrz 18:17
Mariusz: jakubs no właśnie najlepiej skorzystać z łańcuchów tylko że oprócz tego trzeba by przypomnieć sobie co nieco o odczycie plików Myślałem też nad wczytaniem zawartości plików do jakiejś struktury danych jak np lista ale chyba jest to niepotrzebna komplikacja
16 wrz 18:18
16 wrz 18:25
Mariusz: Gdy odszedłem na trochę od komputera i trochę pomyślałem nad kodem to doszedłem do tego czego zabrakło w kodzie Pisałem o tej zagnieżdżonej pętli otóż wydaje mi się że w napisanym kodzie wewnętrzna pętla wykonuje się tylko raz Kiedy pojawia się błąd Segmentation Fault ? Parę razy podczas pisania kodu mi się pojawił
16 wrz 18:48
Dziadek Mróz: To znaczy, że odwołujesz się do nieistniejących danych, np. do znaków w tablicy poza jej zakresem. Wyjaśnij jeszcze raz co chcesz zrobić. Masz dwa pliki A i B, wczytujesz z każdego po linii i sprawdzasz n znaków w każdej, jak coś nie pasuje lub ilość linii jest inna to dajesz komunikat?
16 wrz 19:02
Dziadek Mróz: Jeżeli bawisz się na tablicach znaków to używaj <cstring>, jeżeli chcesz aby wszystko się automatycznie załatwiało to używaj <string> i zdefiniowanej w niej klasy string. Info na stronie http://www.cplusplus.com/reference/string/
16 wrz 19:05
Dziadek Mróz: Pochwal się kodem jaki spłodziłeś. Co Ci szkodzi
16 wrz 19:42
Mariusz: W javie napisałem bo tam jest klasa java.util.LinkedList która ma odpowiednie metody Problem jest z wyświetlaniem znaków (np Hiszpanie mają tyldę i akcent graficzny które to nie wyświetlają się poprawnie , Niemcy mają ostre s, oraz przegłosy, które także nie wyświetlają się poprawnie) W C++ mnie się nie udało ale znalazłem podobne zadanie i tam jeden dał gotowy kod Dziadek jeśli ci nie przeszkadza brak formatowania kodu to mogę przesłać moją próbę napisania w C++ (Brak formatowania kodu jest błędem w Pythonie) Ciekawy jestem jak napisać bez korzystania ze struktur danych (jedynie na plikach i łańcuchach) (Mimo ustawienia wskaźnika pliku na początek po przejściu wewnętrznej pętli nie uzyskałem oczekiwanych rezultatów) Na razie podam w Javie abyś zobaczył dlaczego znaki się nie wyświetlają poprawnie [code] package missingLines; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.WindowConstants; import javax.swing.SwingUtilities; import java.util.LinkedList; /** * This code was edited or generated using CloudGarden's Jigloo * SWT/Swing GUI Builder, which is free for non−commercial * use. If Jigloo is being used commercially (ie, by a corporation, * company or business for any purpose whatever) then you * should purchase a license for each developer using Jigloo. * Please visit www.cloudgarden.com for details. * Use of Jigloo implies acceptance of these licensing terms. * A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR * THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED * LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE. */ public class NewJFrame extends javax.swing.JFrame { private JButton jButton1; private JTextField jTextField2; private JLabel jLabel2; private JTextField jTextField1; private JLabel jLabel1; private JScrollPane jScrollPane1; private JTextArea jTextArea1; /** * Auto−generated main method to display this JFrame */ public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { NewJFrame inst = new NewJFrame(); inst.setLocationRelativeTo(null); inst.setVisible(true); } }); } public NewJFrame() { super(); initGUI(); } private void initGUI() { try { setDefaultCloseOperation(WindowConstants.DISPOSEONCLOSE); getContentPane().setLayout(null); { jButton1 = new JButton(); getContentPane().add(jButton1); jButton1.setText("Znajdź"); jButton1.setBounds(219, 434, 135, 21); jButton1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { jButton1ActionPerformed(evt); } }); } { jScrollPane1 = new JScrollPane(); getContentPane().add(jScrollPane1); jScrollPane1.setBounds(75, 153, 445, 260); { jTextArea1 = new JTextArea(); jScrollPane1.setViewportView(jTextArea1); jTextArea1.setBounds(140, 251, 344, 153); } } { jLabel1 = new JLabel(); getContentPane().add(jLabel1); jLabel1.setText("\u015acie\u017cka do pliku 1"); jLabel1.setBounds(122, 47, 103, 14); } { jTextField1 = new JTextField(); getContentPane().add(jTextField1); jTextField1.setBounds(257, 44, 143, 21); jTextField1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { jTextField1ActionPerformed(evt); } }); } { jLabel2 = new JLabel(); getContentPane().add(jLabel2); jLabel2.setText("\u015acie\u017cka do pliku 2"); jLabel2.setBounds(122, 98, 103, 14); } { jTextField2 = new JTextField(); getContentPane().add(jTextField2); jTextField2.setBounds(257, 95, 143, 21); jTextField2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { jTextField2ActionPerformed(evt); } }); } pack(); this.setSize(636, 573); setTitle("Brakujące linie w pliku"); } catch (Exception e) { e.printStackTrace(); } } private void jButton1ActionPerformed(ActionEvent evt) { System.out.println("jButton1.actionPerformed, event="+evt); //TODO add your code for jButton1.actionPerformed String fragment=new String(); LinkedList<String> l1=new LinkedList<String>(); LinkedList<String> l2=new LinkedList<String>(); try { FileReader fr = new FileReader(sciezka1); BufferedReader br = new BufferedReader(fr); String line=new String(); while ((line = br.readLine()) != null) { System.out.println(line); fragment=line.substring(0, line.indexOf("(")−1); l1.addLast(fragment); } fr.close(); } catch (FileNotFoundException e) { // TODO Auto−generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto−generated catch block e.printStackTrace(); } try { FileReader fr = new FileReader(sciezka2); BufferedReader br = new BufferedReader(fr); String line; while ((line = br.readLine()) != null) { System.out.println(line); fragment=line.substring(0, line.indexOf("(")−1); l2.addLast(fragment); } fr.close(); } catch (FileNotFoundException e) { // TODO Auto−generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto−generated catch block e.printStackTrace(); } for(int index=0;index<l2.size();index++){ fragment=l2.get(index); while(l1.contains(fragment)) l1.remove(fragment); } for(int index=0;index<l1.size();index++){ fragment=l1.get(index); jTextArea1.append(fragment); jTextArea1.append("\n"); } } String sciezka1=new String("Cworkspace/MissingLinesInFile/src/missingLines/sebastianrulli.doc"); String sciezka2=new String("Cworkspace/MissingLinesInFile/src/missingLines/anacontreras.doc"); private void jTextField1ActionPerformed(ActionEvent evt) { System.out.println("jTextField1.actionPerformed, event="+evt); //TODO add your code for jTextField1.actionPerformed sciezka1=jTextField1.getText(); } private void jTextField2ActionPerformed(ActionEvent evt) { System.out.println("jTextField2.actionPerformed, event="+evt); //TODO add your code for jTextField2.actionPerformed sciezka2=jTextField2.getText(); } } [/code] Część graficzną wyklikałem sobie używając Jigloo W eclipsie znaki wyświetlane są poprawnie bo pogrzebałem w ustawieniach ale po wyeksportowaniu do .jar już tak ładnie nie jest Poza tym nie zawsze wypisuje poprawne linie
19 wrz 13:12
Mariusz: Wyjaśnij jeszcze raz co chcesz zrobić. Oto treść podobnego zadania tyle że ja zadowoliłbym się porównywaniem fragmentów linii Witam, mam do napisania program który pobiera dane z dwóch plików tekstowych A i B a następnie czyta kolejne linie z pliku B i sprawdza czy są w pliku A, jeśli NIE, dopisuje je do pliku tekstowego C.
19 wrz 13:46
19 wrz 16:43
Dziadek Mróz: W C++ LinkedList jest zdefiniowane pod <vector> (jednokierunkowa) lub (dwukierunkowa).
19 wrz 18:05
Dziadek Mróz: < list > zamiast tej emotki, bez spacji między <>
19 wrz 18:06
Mariusz: http://pastebin.com/8ZDQ713j Dziadek chciałeś kod to masz kod tyle że nie działa Tak jak wcześniej wspomniałem Segmentation Fault się pojawia Lepiej wczytać zawartość pliku do jakiejś struktury danych czy czytać plik i zapisywać linie do łańcucha ?
19 wrz 23:36
Dziadek Mróz: Dodaj jeszcze te dwa pliki tekstowe, żebym wiedział na jakich danych operujesz
20 wrz 11:24
Dziadek Mróz: Problem jest w linii: dlugosc = strlen(linia1) − strlen(strstr(linia1, "(")); Pomyśl trochę co jest źle emotka Wskazówka: poczytaj manual do strlen i strstr.
20 wrz 11:52
Dziadek Mróz: I jeżeli chcesz porównać zawartość plików to nie szukaj podwójnymi pętlami, bo jeżeli jeden plik zaczyna się inaczej niż drugi to nie są takie same emotka
20 wrz 11:58
Mariusz: Czytałem te pliki http://pastebin.com/7MDCmT6f http://pastebin.com/HQzvQY0f ale dobrze by było gdyby działał na podobnych danych
20 wrz 12:03
Dziadek Mróz: Jakby się uprzeć można się ograniczyć do takiego kodu: http://pastebin.com/Kh7vRB17 Dla plików: plikA.txt: http://pastebin.com/dhprEkun plikB.txt: http://pastebin.com/bPJaEXmq Różnica kropek na końcu zdań w plikach.
20 wrz 12:06
Mariusz: ...nie szukaj podwójnymi pętlami A jak chcesz sprawdzać czy dowolna linia z jednego pliku znajduje się także w drugim pliku Znalazłem podobne zadanie i tam koleś też sprawdza linie w podwójnej pętli tylko jeden plik wczytuje do wektora
20 wrz 12:17
Dziadek Mróz: Napisz na GG: 1431298
20 wrz 13:36
Mariusz: Rzeczywiście jak zakomentowałem tę linię i przypisałem wartość zmiennej długość to błąd nie wystąpił jednak programik nie wyświetlał tego co powinien strlen przyjmuje jako argument łańcuch a zwraca liczbę całkowitą strstr zwraca wskaźnik na pierwsze wystąpienie łańcucha 2 w łańcuchu 1 Gdy wpisałem printf("%s\n",strstr(linia1,"(")); to wydukowało fragment łańcucha od znaku '(' do znaku końca łańcucha
20 wrz 13:48
przemek ania: co tam pisz do mnie ok
21 wrz 17:03
Dziadek Mróz: Już wyjaśnione, źle skonstruowany algorytm i brak alokacji pamięci wysypywał program.
21 wrz 17:40
Mariusz: W Pascalu nie ma swobodnego dostępu do plików tekstowych (procedura seek nie działa) więc aby powtórnie przeczytać plik trzeba go zamknąć i ponownie otworzyć a to nie jest dobre rozwiązanie dlatego przydałby się moduł do obsługi listy
8 paź 01:48
Mariusz: Co do braku alokacji pamięci to ona rzeczywiście mogła wysypywać program ale algorytm był dobry (czytanie pliku musiało być w podwójnej pętli ) tyle że za dużo czyta z pliku ale aby to poprawić przydałaby się lista której дедушка мороз już "nie wyjaśnił " więc nie napisałbym że wyjaśnione Oczywiście ta poprawka z listą działałaby dla małych plików których zawartość mieści się w pamięci Pomysł z posortowaniem można zrealizować z użyciem pliku wsadowego (komenda copy oraz sort) Pisał ktoś z was takie pliki ?
21 lut 19:40